PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。* w, j7 R1 K# a  P
    #include <stdio.h>
/ _1 E) x4 B/ b#include <stdarg.h>
- S0 v. ^" w+ C  t! G- Q5 U#include <uf.h>9 ]5 M1 ?6 O" B- g/ ^( z( F
#include <uf_ui.h>& F3 q$ f3 ]5 m
#include <uf_curve.h>) E5 w8 t* H( \/ _
#include <uf_modl.h>& I" Z  P- B3 t& R9 l- j/ d6 G- y
#include <uf_mtx.h>
# ~% O  u% Z4 b$ A7 X#include <uf_csys.h>8 u( o% A! A7 S) P' C; j# E5 U

7 D4 e* Y- `8 @! b0 Hstatic void ECHO(char *format, ...)
) Y9 K' C/ b. e9 f{' n7 j' Y/ L( s2 ~9 V1 J" x
    char msg[UF_UI_MAX_STRING_LEN+1];
1 Q8 g% b+ X& t3 \2 ?$ Y* z! q    va_list args;; w3 f' c! o) i) V/ V
    va_start(args, format);: }3 d2 E6 j3 |0 R: e1 a' W
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);2 z# W3 ~6 J8 ]: p3 _
    va_end(args);5 l* Y& N1 n, X
    UF_UI_open_listing_window();- l0 L. X7 }) @; q- d- I
    UF_UI_write_listing_window(msg);
+ X# i2 N3 J" }" T  ?    UF_print_syslog(msg, FALSE);
; v$ S$ w' f0 D, P, {" ~* y, g" o}
' M; s3 h) p, [# V+ n#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))! y0 U8 U# w6 c/ ]9 \
static int report_error( char *file, int line, char *call, int irc)3 M, ]$ A" N) t" ~* }
{
* t7 J6 i- p3 m* @+ A  t    if (irc)
- j9 `* v. ]" [* g    {5 m! _  y0 q1 Q
        char err[133];
4 X  w" @3 H( X        UF_get_fail_message(irc, err);
9 n- Q: l+ g& f# q2 @        ECHO("*** ERROR code %d at line %d in %s:\n",
9 L- y9 [/ x* H            irc, line, file);7 N, r2 h8 }' g; B/ H
        ECHO("+++ %s\n", err);: L, v+ `/ @. E5 p8 H$ S
        ECHO("%s;\n", call);
( H; U. b, \1 u0 o( ]9 y    }
( R0 y" c* P6 V6 Y; ]* y% h* b    return(irc);
3 ]. X2 R7 n- ^7 Z* B' G  I+ y: `}
( @3 p! d1 f4 ]" `3 G* e. j- ]9 Y) B. `
/*****************************************************************************
: L, n; H6 B7 a$ z**  Activation Methods; t: r+ Y' |, q9 k
*****************************************************************************/3 F: s. j6 P- M
/*  Explicit Activation
1 N; X( X7 ~; U2 A) ~**      This entry point is used to activate the application explicitly, as in
3 K* m3 H4 Y. u0 z**      "File->Execute UG/Open->User Function..." */
3 Q6 T. {1 k8 \9 n, I
* j: F( C* i: S3 Z& ~/ z. h: [& Y# Z4 H$ [$ \5 |0 a
tag_t oldwcs = null_tag;5 {: l2 l+ m5 x. H3 o% q9 R
double origin [3] = {0,0,0};
8 T& n( |& G# x. a& Ptag_t csys = null_tag;0 J! S- o, t% o6 w: z
tag_t  matrix_id;
+ s$ B: \! J* t, ~double csys_origin [3] ;* n' o" [: Y$ b0 r: q# ]- z
double matrix_values [9] ;
) M$ k* T( P* Udouble x_vec [3];
: n, z  c( \: P8 Pdouble y_vec [3];5 G( o8 B$ x7 X5 b2 r: m
double z_vec [3];; X1 v' V# l3 R1 E+ P' [
double mtx [9];
6 }' m% I/ [( Q  U/ _, Dtag_t  mtxid = null_tag;
3 n8 \( K" r0 E0 Z0 n9 v" Jtag_t arc = null_tag;
- d3 \& F/ {% T$ AUF_CURVE_arc_t  arc_coord;
9 l' r$ k! F6 k1 cdouble origincenter [3] = {0,0,0};/ D- n8 L9 x" Y% j
uf_list_p_t objects;4 w+ c& g# ?- A) V7 P! {$ q
char  *taper_angle = "0";; _- Q; ], z, u" w* w
char * limit [ 2 ] = {"0","60"};
* t$ n2 U9 G" jdouble point [3]  = {0,0,0};
  q$ W1 @5 t9 |# p9 t//double direction [ 3 ] = {0,0,1};
6 i% T3 l2 c5 d' u' U- [* ]0 W: Q* g) h
uf_list_p_t features;
5 y2 q+ r. ?3 ]. [4 vchar * message = "vector";0 D- H; k: w. Y, n0 n  I
int  mode = UF_UI_INFERRED ;
6 \2 `) ~: l! y8 d) G+ Ddouble direction [3]; , v9 X) X" O6 B9 E
double origin [3];2 ^' s5 D" K( h( t6 }7 Q: c
int response;
; ]/ Y* l0 y% j5 Y* jchar * cue ="point";
- [( p* ~+ O* Y) V  ]1 uint mode_sel [ 2 ] = {1,0};
; t. N2 P' P$ n8 X* [& f. o8 pint point_display_mode = 1;0 ]) ~9 b& K1 {, T7 U# K$ ~
double point_sel [3];
- F4 T$ b' c$ A//double outputpoint[3];% R$ r8 h5 S. s( I) E

% g4 w( o) M' z8 Q6 p, N  N1 Zextern DllExport void ufusr( char *parm, int *returnCode, int rlen )+ t: r7 i9 I4 h8 A, Q- W: _
{
9 W( y. X6 c" T" e4 m    /* Initialize the API environment */7 M% D* [2 t" q# i
    if( UF_CALL(UF_initialize()) ) 5 d, z% G( w! Z( E/ V0 R+ B. h
    {( Y9 u! e2 b; a$ [9 q. ?4 y7 U
        /* Failed to initialize */
) o2 q# ^: W' m8 [        return;+ N3 E+ J8 [9 S3 B! h
    }
* k) N# h  Y- v, g+ d2 S% ~    ( z4 R& `* a( O- u& A
    /* TODO: Add your application code here */
* W/ M; q( Y* w* i0 f
- u9 L% @: A& d# t+ M0 I- } UF_CSYS_ask_wcs(&oldwcs);                              
* x, e5 C+ k+ Y5 f UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
; f! P  f. Z; H! G UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    9 k9 e. {$ `) K) o4 `
UF_MTX3_x_vec(matrix_values,x_vec);                  
0 D4 i4 B( N3 ^  s& j) p UF_MTX3_y_vec(matrix_values,y_vec);" i; l: ~6 z5 v$ _* z5 l6 L
UF_MTX3_z_vec(matrix_values,z_vec);8 Q' Z4 T/ s$ p" m3 f; I( S
UF_MTX3_initialize(x_vec,y_vec,mtx);               
5 G: K8 e/ D% B& `, b4 F UF_CSYS_create_matrix(mtx,&mtxid);( g& [0 f2 T' u3 A/ x4 F
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
% y& q# H$ y% p# ~6 x4 x5 X UF_CSYS_set_wcs(csys);  3 x! s6 k- n# T% a; O
7 H" L: W/ T+ ]7 L

+ Z4 @9 N6 z7 S- ?, P8 Dl10:
. H% A) n( K% S  X7 d) \' U2 B    uc1616(cue,mode_sel,point_display_mode,point_sel);9 a9 F; _+ D& v/ R# F) b7 h+ \6 P& y
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
. I; {* z  t0 t# _' [- n
6 H, Y1 j" ~. A7 D1 A1 k arc_coord.arc_center[0]=point_sel[0];
% [& b  Q. {' p arc_coord.arc_center[1]=point_sel[1]; ) M' c2 f' M4 e/ o) _
arc_coord.arc_center[2]=point_sel[2];: ]8 q$ B* f- ~6 w7 f! b4 w
arc_coord.start_angle = 0;
3 V0 Q( z/ a  x" d8 A3 q arc_coord.end_angle = 360.0 * DEGRA;
& {, L, ]: [& o6 W$ F: Q& \ arc_coord.matrix_tag = mtxid;
6 V8 _0 b5 s1 v9 |' i! A' k/ N arc_coord.radius = 20;
0 r6 w8 j' |+ h/ u$ Y 7 s) H. w/ W, _, ~" \
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
$ C9 A: V2 S8 n* a+ ~    UF_MODL_create_list(&objects);
- ~6 t7 U( [( D1 s% o    UF_CALL(UF_MODL_put_list_item(objects,arc));
7 Y9 ]1 `- o* f  _# r7 A2 k' u6 b! V$ d% E. W. a$ y
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);" {0 o% s( V7 D# }
if (response == UF_UI_OK )! b7 F2 u# \7 y7 G% ?
{) H* f% b9 Z1 K- w
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));. d! L7 d6 r6 c4 c7 l% L& ]
}* g# f* U2 E4 \
else1 N0 G2 q" B2 Q; @$ l4 t; o
{& |' R, ]( m* X( U
  return;$ H* R7 R- P# q6 z0 ]  B/ Q
}
* N1 C- R* P$ C0 I goto l10;/ @9 }. A0 _  L- d8 `/ O# T
7 H4 x" v3 c" N! R8 [' O6 o! Z
    /* Terminate the API environment */
/ o8 l0 a0 r0 _1 p    UF_CALL(UF_terminate());& z9 N3 |( j5 a4 N4 A2 X
}! @9 v  k/ S% Q+ I( W
/*****************************************************************************" H, V, Z- Y: P, t3 f! s
**  Utilities
2 }4 I- h8 f" B* k% h& h9 N*****************************************************************************/
; ]& F) k+ N9 H- o8 B/* Unload Handler1 C  j1 F  _4 |. a
**     This function specifies when to unload your application from Unigraphics.0 Z  \1 O4 f( r, @- v3 h
**     If your application registers a callback (from a MenuScript item or a. ]! b3 }- k' n: F( q. w8 v
**     User Defined Object for example), this function MUST return6 V- d: L/ M* F2 k
**     "UF_UNLOAD_UG_TERMINATE". */
: U" e- d" c* K/ sextern int ufusr_ask_unload( void )# U* e* Q4 y( c. j0 m" e
{/ b" M$ j( e5 w* s8 z. n! d6 [6 j
    return( UF_UNLOAD_IMMEDIATELY );9 h4 r5 Y8 l+ l" C. `+ g' |! \  |
}. M9 R: x1 ^4 @: |
5 O2 I4 I, d# Z" _' I5 T$ T

- g* l9 V8 F5 I. ]
* E7 Q2 R# T, R' d$ a- b. H

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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: I. u9 Y/ u$ O/ D  c- i) i
- h8 O% r' S1 B! j( C6 d
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换' m# _1 f  R1 \1 F: l

$ q) p& u8 Y7 n1 W7 P这个你需要多试试,首先把你通过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);                               : u, S9 ]4 J6 c* {' w& T
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   , w5 k# N& p0 c. p+ R
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
! C4 D' J( t# B5 a: i6 ]9 o0 i) T9 ^UF_MTX3_x_vec(matrix_values,x_vec);                  
  m0 \# m, S, v) jUF_MTX3_y_vec(matrix_values,y_vec);& Q- H+ e7 z. a# S
UF_MTX3_z_vec(matrix_values,z_vec);
( S( y" \( G" o5 PUF_MTX3_initialize(x_vec,y_vec,mtx);               ) i6 E- _% S6 c6 f1 }! k6 D6 F% o/ m$ m
UF_CSYS_create_matrix(mtx,&mtxid);
6 e8 O7 Q0 V! F5 O( @/ VUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
3 x% a: ~: Y& `# Y3 i" TUF_CSYS_set_wcs(csys);  ' E2 V) o, H2 l3 H' n* q

! v% t5 r9 t& x- w' W! q1 F8 u$ p  L& |. u3 l2 _9 r" j) d
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
, L- l1 ~( [3 c+ ~
; l; H, B3 g6 H不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了