PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

[解决] 绝对坐标系下此功能成功,转动坐标系后失败。

[复制链接]

2015-8-3 12:51:57 4294 2

秋爱 发表于 2015-8-3 10:49:22 |阅读模式

秋爱 楼主

2015-8-3 10:49:22

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。) y: g9 ~# d. B) }5 A3 z
    #include <stdio.h>+ |; ?0 E2 n# a( N# _+ n
#include <stdarg.h>1 [9 h# M, B4 H# p8 U6 b
#include <uf.h>4 l- B$ I6 \1 Z" E
#include <uf_ui.h>
  x% D6 u" F/ q) D; D; }#include <uf_curve.h># ~# `1 a9 Y. m) O; b7 V% w( r- I: \
#include <uf_modl.h>
6 c4 ?2 L! O9 n* ?6 F#include <uf_mtx.h>
! Z! |$ _' O. K#include <uf_csys.h>
2 K$ g, D: H7 U3 s6 ^& O- {5 }) g, X& U1 k) V  i/ \0 H
static void ECHO(char *format, ...)
9 E' G& |7 Y' p3 E2 }$ b8 \{$ I- r- ^" ]6 l* G( L5 ~( x+ t
    char msg[UF_UI_MAX_STRING_LEN+1];( F! O' @" h' C5 K; X
    va_list args;9 s# @5 y/ A! h6 |
    va_start(args, format);; |9 {/ P8 f' {$ z, B
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
4 J" J: H; ^# b    va_end(args);4 ~/ @2 G7 j8 x! s: U2 b$ @2 B
    UF_UI_open_listing_window();/ x' u. x5 L, S5 i
    UF_UI_write_listing_window(msg);& a" A; r7 X6 B# h! l9 n
    UF_print_syslog(msg, FALSE);
8 ?- D' V% n* F' f+ H: z7 F" Z}
/ w9 L: T( I2 m, Q. P#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))8 l, R8 _$ I0 q3 Q( l& p5 E; e
static int report_error( char *file, int line, char *call, int irc)
1 a# c% J" L, @! X+ J7 `2 z{9 f) v. ]" y2 M/ `1 D1 ~
    if (irc)1 ^3 N* d3 {% E7 r! W! }0 _# m# U
    {
8 I, {8 y$ ]  F4 ]* i        char err[133];
  q! e1 H7 N; K( M' j        UF_get_fail_message(irc, err);
* H3 U* W' h" ^        ECHO("*** ERROR code %d at line %d in %s:\n",1 Y# z  B$ D1 u- C! g
            irc, line, file);
1 |8 c0 m9 y3 A) H4 }  G        ECHO("+++ %s\n", err);
' ^7 F; d5 ~+ u        ECHO("%s;\n", call);
. h/ X* ?$ }8 {2 I) \5 b. U: m3 w6 p    }% K: `# C2 ^5 V) h6 ~: t- `5 T/ q
    return(irc);; L- V* R; x! L9 {# o
}. B9 d. r* r' ], a- I
4 ]. O/ K" n, t9 h: _) ?- m" B/ Z
/*****************************************************************************
$ i: c6 W: t8 \# v  L( [! k! n& @- A. Y; k**  Activation Methods0 k  w8 c2 i& N4 Y0 h: M6 S. A6 w
*****************************************************************************/
) l& k" h2 W7 R* w3 O, t% m9 @$ ]" f$ N/*  Explicit Activation- Y6 w0 x: m" J! S& {
**      This entry point is used to activate the application explicitly, as in
9 P/ b6 s2 C7 ~% ~8 P& S- c8 w5 t**      "File->Execute UG/Open->User Function..." */7 Q3 Z; c( J! i3 l% k6 G

5 F* S- B8 O1 @
+ B3 P. |' I! d3 S" \7 jtag_t oldwcs = null_tag;+ s6 h, @9 b7 _# k6 L* x
double origin [3] = {0,0,0};
- T4 I& m4 S* [9 d7 utag_t csys = null_tag;
# X4 b# b# ?8 d9 }8 y. W2 c$ L5 |tag_t  matrix_id;
, B* K3 N+ j+ v2 i( \: K4 _* Fdouble csys_origin [3] ;. X3 O2 H0 x4 R! B9 W/ B. [
double matrix_values [9] ;
* v8 G  P6 Y" o3 R! C0 T* F4 `: Sdouble x_vec [3];, ^9 ^* T7 ]& D' J+ B
double y_vec [3];7 b  O* U; A7 Q  t# p! o
double z_vec [3];! C9 D3 M) H4 i' T$ l+ d% a
double mtx [9];0 ^" @8 _1 @* L0 G3 P! T* H
tag_t  mtxid = null_tag;9 J# K. \% z4 I. G( l! q1 `1 s& q
tag_t arc = null_tag;
# ~- E7 V, u4 k2 j! K/ F( i" zUF_CURVE_arc_t  arc_coord;
4 u* Y8 U/ {+ Zdouble origincenter [3] = {0,0,0};2 p- z! V( v& f8 o# B/ C: y
uf_list_p_t objects;! S7 U# C- a( ^* n$ m
char  *taper_angle = "0";
* b& }" n8 y2 ~" @1 F& L/ m2 ^5 ]# I1 ichar * limit [ 2 ] = {"0","60"};! L' a, P9 o8 F1 y8 c7 O+ a- `4 Z
double point [3]  = {0,0,0};  f/ Y+ e' K4 R# g/ U5 F
//double direction [ 3 ] = {0,0,1};* \, z" a! p; r* S# V
" j5 j& |/ Z- q+ [
uf_list_p_t features;
2 j1 ^3 X2 n# F3 v5 t! U, X; U$ y9 ichar * message = "vector";
1 L5 o( z( Z6 j3 h( W( D' Y) ^int  mode = UF_UI_INFERRED ;
9 y( @+ ?3 [: A( C6 C/ rdouble direction [3];
+ J2 ]2 V) q( l* [double origin [3];: ~& A$ e- E: `' c  z4 `
int response;
* n) _5 E, U, n; I5 D6 K- \char * cue ="point";5 Q! i/ j. L9 s: E9 P2 p
int mode_sel [ 2 ] = {1,0};
9 O- O" `% o5 o$ ]1 R3 J3 @int point_display_mode = 1;2 D/ ?& @; A2 F5 E3 o
double point_sel [3]; ( j/ }) @+ {4 }% I! o- \" ~3 L( |
//double outputpoint[3];
3 c0 H0 n3 V0 R" }# U; s
' L, E) f, y# pextern DllExport void ufusr( char *parm, int *returnCode, int rlen )% `7 y: K2 U+ }& _1 s" r
{
8 Y/ T& z% J- A" y; Y% c    /* Initialize the API environment */
6 ~; B+ o$ c1 [9 P' p& c2 A    if( UF_CALL(UF_initialize()) ) 4 @5 e' t/ p) F: @
    {
$ V6 [0 v0 |7 s        /* Failed to initialize */" r9 a7 X# d: s3 U( p
        return;
# i* G2 w8 z. j. ?+ T1 y/ [& b    }2 m5 {# s/ z$ L! U! |
    5 D6 O8 K9 m0 a5 @/ H
    /* TODO: Add your application code here */
. @( Y) z5 t% h" d& `( r3 _2 w$ }+ Y  v: W
UF_CSYS_ask_wcs(&oldwcs);                              
/ R9 @  g7 r  x% }/ w3 \1 o UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   % H6 R6 f$ h: g$ s4 k
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
" _0 P# Q2 p, T* v0 D6 r UF_MTX3_x_vec(matrix_values,x_vec);                  3 j. _8 V) y9 Y% D3 o
UF_MTX3_y_vec(matrix_values,y_vec);  k) a) J7 v' f( N' R
UF_MTX3_z_vec(matrix_values,z_vec);
0 i' p& q& @" S8 y  N9 T& N5 e UF_MTX3_initialize(x_vec,y_vec,mtx);               
5 ^7 D4 o4 B, v# {% M; d UF_CSYS_create_matrix(mtx,&mtxid);
8 y- f$ g' F% _! \ UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
% |; k8 i/ L' | UF_CSYS_set_wcs(csys);  
& |; [+ ^1 I  Y) o $ ]6 S5 V9 o/ b5 A

  g8 Z* ?9 w, g) A# b# ol10:* \1 [' v% M$ \# {
    uc1616(cue,mode_sel,point_display_mode,point_sel);6 R' V! f+ O5 Q
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
' d; o) ^* Z5 E- t- l# j- W& n$ Q" ^
  f5 L2 b& `8 `) I  D2 Z arc_coord.arc_center[0]=point_sel[0];
8 P8 V1 w0 f2 N5 F2 s! ^3 _ arc_coord.arc_center[1]=point_sel[1];
( n+ Y: E) }' W; Y; n( Z1 c) j arc_coord.arc_center[2]=point_sel[2];$ e6 X) l% [% S/ M' o7 \
arc_coord.start_angle = 0;
, Y/ D; U/ x+ w7 ?; X& b" z5 T arc_coord.end_angle = 360.0 * DEGRA;1 w' O# N" g; H4 Q
arc_coord.matrix_tag = mtxid;
$ k, o" Q" p1 v arc_coord.radius = 20;
4 X! P8 f* }" z" g8 A. A% M, k
5 v4 ]2 |9 Z2 F1 x6 V UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
) h; n- Q" N; {  Q    UF_MODL_create_list(&objects);
8 C3 e* _4 C  z! k- F    UF_CALL(UF_MODL_put_list_item(objects,arc));
, ]9 J  ?) k2 _8 ^5 y. a! W/ }: [/ f' Z$ j5 U9 A8 h; J
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
& X" }6 x  n. g  U if (response == UF_UI_OK )
+ i8 n' [7 F' a4 W {
- {: A. B; u/ f: |* \7 n  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
6 n6 f: Y" \! G9 H3 r) p0 Q* X }
0 @$ j! J+ }, [  [ else
& `$ w! c: r7 g: ^2 @( g {
3 a6 t' q( Y3 K1 x3 G+ T$ }  return;
( x) l9 s9 E" F" X5 K }
- c0 H" z( D* n goto l10;
" M: z- _2 Y. j  ?8 n+ O2 a4 a" }$ z) h9 @& i: h
    /* Terminate the API environment */0 d# f0 g: H4 D2 Y
    UF_CALL(UF_terminate());2 J* }) a5 N" x% B8 r, W
}
% G$ v/ i" M8 x  z: F* @/*****************************************************************************! ?" j' E8 W- x) L8 @% ^( w9 W
**  Utilities
4 R" e' F! Z5 m! @*****************************************************************************/' o- P! q* O2 k& k2 s& v8 Q7 |
/* Unload Handler
4 h/ p% ?$ q# g+ D9 S& b& R" I**     This function specifies when to unload your application from Unigraphics.
4 w$ @: q  ^! H5 ?**     If your application registers a callback (from a MenuScript item or a! o) ^4 D2 e& E& G8 E* t& B
**     User Defined Object for example), this function MUST return
; ]( H! W; @) `6 L7 ~  P$ B**     "UF_UNLOAD_UG_TERMINATE". */
" m! l4 ?, ]. Z! fextern int ufusr_ask_unload( void )* i" c, _& V% B$ _- p- \
{0 i2 T$ r8 U" ~) t; C. Z, |1 e
    return( UF_UNLOAD_IMMEDIATELY );
0 @$ b: b6 j8 K; }3 N. j% S0 T}4 n, `* k0 M" ]  k' o5 C1 q  Q4 c
- c* w' ^. i' Z" B

5 E( U2 Y* Y. t0 B9 u" V5 U4 B/ ^7 d" N  U6 G* f9 Y

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

点的位置在圈出的位置,圆位置不定。

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复2

admin 发表于 2015-8-3 12:49:49

admin 沙发

2015-8-3 12:49:49

你旋转了坐标系,实际上就是更改了wcs' E3 u1 l& r8 B* I) p
( M  J3 G; K; b& E0 y" z
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换( ?6 D5 q" |& T. ~! w! U
" }4 h+ i- a% m" X  ]4 f4 m
这个你需要多试试,首先把你通过uc1616选择的点坐标打印出来看看,必要的时候去转换,圆弧的生成比较复杂,需要一个支撑平面的,如果是XY平面,也应该是wcs的XY平面,所以看来你都是在绝对坐标系下处理的,把改转换的都转换下,再看!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

admin 发表于 2015-8-3 12:51:57

admin 板凳

2015-8-3 12:51:57

UF_CSYS_ask_wcs(&oldwcs);                              
! }) t9 ?3 A" ]' R# l$ f! C, d* Y' GUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   * S5 x0 W8 m: f9 _% X
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    . w" n) F0 {; K6 R! W- V
UF_MTX3_x_vec(matrix_values,x_vec);                  
; N1 D8 M5 O5 B  I1 D5 ~+ vUF_MTX3_y_vec(matrix_values,y_vec);
& o+ L4 u# G+ ?& GUF_MTX3_z_vec(matrix_values,z_vec);
5 W; P- `# X. |0 k3 X1 r5 tUF_MTX3_initialize(x_vec,y_vec,mtx);               ; Z4 o4 P+ J% n8 s0 ?: c
UF_CSYS_create_matrix(mtx,&mtxid);( ^6 I, f# c$ H# b9 t2 ^
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    ) I/ Z/ f( {- m2 L! M
UF_CSYS_set_wcs(csys);  4 p. ^( l( ?( I" H- Z
$ s# {% W$ t9 l- I" j

# v% r7 c; ], l; [这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
- D: @2 b/ }' w. O
3 E$ ?; }& g- m$ b不需要这些代码
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了