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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。" z1 q& M; G, ~
    #include <stdio.h>
  M: V9 }1 x$ f' g9 [1 _  {( @. j#include <stdarg.h>
6 C; |0 \3 B6 s- f#include <uf.h>
' N) a- h8 t3 q- [+ q+ z9 }( H+ m#include <uf_ui.h>
0 P" W% n2 b+ Q. V  ]7 b#include <uf_curve.h>
/ K! |7 ~1 s& H# K5 B% c3 G, Z8 v#include <uf_modl.h>
3 a" a4 r( M4 O# }#include <uf_mtx.h>
5 D2 T4 \+ u) B- H/ n#include <uf_csys.h>
0 I- J- J0 x; u' K1 m
+ j$ S3 c" z; O5 d4 rstatic void ECHO(char *format, ...)
3 Z; n0 W$ h$ q& a/ f! @" }{
' ?: }- F& E1 E7 i    char msg[UF_UI_MAX_STRING_LEN+1];4 T/ Y" j/ ~  ]
    va_list args;
- F  o3 I6 z/ E, M: }' ^4 n5 f    va_start(args, format);
) G# n* F9 ]! Q; b: E7 `2 ?: k    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
7 c) E9 t3 i# t" \- V    va_end(args);9 e# F. {+ y0 ?" A
    UF_UI_open_listing_window();
* N- @' _0 L5 A1 t$ ?) m    UF_UI_write_listing_window(msg);
" ?- P% O1 k1 A6 L9 o  c: Y    UF_print_syslog(msg, FALSE);4 b  v2 k) ]. ~4 E* @, P* n8 F
}
7 q7 s2 K. [1 @9 b  F#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))7 \& G* n2 {& \" q. D# A/ V) G
static int report_error( char *file, int line, char *call, int irc)' O" H* d2 D' X! N- s) x
{+ M3 W, t8 m6 z" k
    if (irc)0 g7 e' B' b; d" t4 u, N
    {
( O9 Q. D* F/ c5 P        char err[133];& n9 i8 Z6 Q5 Y% `; j8 D
        UF_get_fail_message(irc, err);5 z" j, F9 Q! R  n2 c6 w: U
        ECHO("*** ERROR code %d at line %d in %s:\n",( d4 ^# E4 H; Q/ P2 ~2 ~7 n6 _
            irc, line, file);
0 J* Z- T% ]) S        ECHO("+++ %s\n", err);
: W( z7 O4 S1 [% v% ]- z        ECHO("%s;\n", call);" J; @' n! k! y0 G! i0 o2 r9 H+ a/ f
    }8 [# l. d; o1 f
    return(irc);
- z5 p- m0 R; L}7 o. \/ O3 X" I  z

" @/ j9 ^( x6 j# ~4 ]' c. h/ ?* W/*****************************************************************************
% C# z0 V& [5 d1 i: p$ ?**  Activation Methods+ |1 ^, G7 |: I8 c# m
*****************************************************************************/$ N2 {/ ~9 V) }" ]. o; q, m: W  g1 a
/*  Explicit Activation
2 `8 v/ R; S* I3 b) V**      This entry point is used to activate the application explicitly, as in7 W( ?) l' J7 \
**      "File->Execute UG/Open->User Function..." */
5 A6 ^( k' h" ~' e. @' |
1 Y( ^0 t( ~; E
" B$ h& g$ Z$ r8 w% b* ctag_t oldwcs = null_tag;
& |. C$ k8 Y5 R5 ~9 ~) e9 Jdouble origin [3] = {0,0,0};8 `# R, B; p- X  Y
tag_t csys = null_tag;
. L/ C5 G7 v; l. D2 mtag_t  matrix_id; $ ^( D! z; p  \2 g
double csys_origin [3] ;& X# c5 m/ y1 e  u4 X  @
double matrix_values [9] ;
3 Z- y; _1 o8 k+ O! Qdouble x_vec [3];
3 h1 Q3 C& K- Z9 \double y_vec [3];
) M( O. f) P" [4 gdouble z_vec [3];
! u) X! B& j) w" X( N& r2 f' Idouble mtx [9];; B$ g1 {4 k6 e5 _2 G
tag_t  mtxid = null_tag;3 B& x& ^. @9 O, L  g* d0 p
tag_t arc = null_tag;
3 d& `; `) K! t# Z" e5 u% L2 ~UF_CURVE_arc_t  arc_coord;
. b# n7 B$ m$ z6 cdouble origincenter [3] = {0,0,0};. J7 w% `' h8 E) [
uf_list_p_t objects;8 i4 ?9 n7 f& E6 c3 E5 p
char  *taper_angle = "0";7 Q$ w7 B7 n9 b7 \5 ]
char * limit [ 2 ] = {"0","60"};' c% W; d0 k4 o: S" |% d" B) I+ p
double point [3]  = {0,0,0};. r% E$ C; E. r6 f& [! D
//double direction [ 3 ] = {0,0,1};
1 D2 G7 L* S% q* {
3 _' @3 a) _3 S6 i9 N7 M  Z4 tuf_list_p_t features;
3 u# M9 {$ [$ \9 s% e' F$ Ichar * message = "vector";
2 I# l0 q/ e' M' l" Fint  mode = UF_UI_INFERRED ;7 O$ G$ @" B6 R; D
double direction [3]; 7 I/ E9 K' P8 T* u
double origin [3];
0 S% F, ^" \9 O7 uint response;7 J' e# Y# i/ q3 V0 `0 q0 I
char * cue ="point";
- I% h6 y0 p3 a, R' b/ S0 t% t* r% bint mode_sel [ 2 ] = {1,0}; - s' k4 k2 q  {5 X9 U* c/ l
int point_display_mode = 1;
6 _  h3 }. L! n& pdouble point_sel [3]; 5 G& e4 }* S8 {2 u% X3 w) y+ `
//double outputpoint[3];
8 @; Z0 Z6 c# J
2 W5 V( x2 r* e- kextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
4 c7 Y) [+ Q; h5 ^% S( O{
* g" c' I% t/ W. f8 v& H9 J    /* Initialize the API environment */
/ V) o" I# p6 r    if( UF_CALL(UF_initialize()) )
' Y6 }% T# `& G9 C0 V    {" ?7 X2 r3 m* D3 i% P$ R( Y. m
        /* Failed to initialize */5 W8 w. E& k! h$ V. c1 u
        return;
1 }6 l% y: m! q9 R# E    }
6 y/ h, {+ j/ I8 V9 O4 y7 F- ^   
9 ^7 J9 n, Z2 u+ X4 y    /* TODO: Add your application code here */" V/ _: q" o* e" _# Z* {. l
0 j9 Q, v5 A6 k4 i
UF_CSYS_ask_wcs(&oldwcs);                              
  n! B6 U$ s9 Q9 Z UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   6 n* l/ `( H+ y2 v6 A" h" R# r/ j
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
9 x( o" b, ^/ h# G UF_MTX3_x_vec(matrix_values,x_vec);                  0 T, R! H( {: u8 ^2 N! F
UF_MTX3_y_vec(matrix_values,y_vec);, o, _4 Q5 a/ O8 Z
UF_MTX3_z_vec(matrix_values,z_vec);6 Q# p- r. s  n2 e
UF_MTX3_initialize(x_vec,y_vec,mtx);               
0 Q+ k! t3 M) d. |/ \" U UF_CSYS_create_matrix(mtx,&mtxid);+ w0 b' K2 x; E& U. J# q
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
' l; Q7 d1 e& s% C; m UF_CSYS_set_wcs(csys);  ; }- Q8 }% Z* J+ _* R
9 g4 ^+ a1 B0 j; N! [. c! l) n: c9 y
% n% L3 }% U+ |( u, p
l10:
7 C% O& u; V8 L( W% f8 x    uc1616(cue,mode_sel,point_display_mode,point_sel);  X# M+ J. K$ F+ v" u- }* q" t
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
6 [( _- g! m- j, {' l& P7 L; L- U  ?3 G$ u+ p9 v2 S
arc_coord.arc_center[0]=point_sel[0];
7 x3 }' A$ V  D arc_coord.arc_center[1]=point_sel[1];
8 t+ s5 e1 w/ L5 i3 B0 t8 C; ?9 u arc_coord.arc_center[2]=point_sel[2];
! v2 ~9 v( e8 K  ]' n arc_coord.start_angle = 0;
1 m# w. @) T% k6 q arc_coord.end_angle = 360.0 * DEGRA;7 _( m( I4 g2 p0 T
arc_coord.matrix_tag = mtxid;& c  N4 ?3 h. M* W; \  S: W  h9 C
arc_coord.radius = 20;
! v5 }4 `: G2 P. o, A4 {+ q 6 @' H. a" F9 {* Y
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));' {0 P7 c" |& V
    UF_MODL_create_list(&objects);
0 w, D) i$ u  `3 ~- C    UF_CALL(UF_MODL_put_list_item(objects,arc));8 C, y: ~  m- W1 ^2 a0 A

* r, B' f1 m* A6 M' B3 j) w4 y UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
. c8 x) k  h. U- C% w9 V if (response == UF_UI_OK )
- j! s5 U; k. Z {) u# `: g2 o5 T9 e& U# }
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
; B* L4 m" ~  K! C) l }5 G/ C) c) p* F) X
else
5 `  G5 A7 v# t% O8 R' x {+ M3 X8 d, M! t& k4 J
  return;0 h1 C1 A7 d3 W, z( c% M% H
}0 _6 b. I" E# j6 l) D9 u' q
goto l10;3 a( L9 ~: h+ s7 u; V  X
8 i' A- S* d& V) ]
    /* Terminate the API environment */
& }/ y% r" ]! Q# J  D" I    UF_CALL(UF_terminate());
/ m) ?  ^3 @5 f! B}7 z, ^$ i& J/ w7 R5 _1 n; h) O
/*****************************************************************************
/ O4 ^* O# }0 {$ N; K( F/ q( j**  Utilities5 x  g1 T* h4 H, ~
*****************************************************************************/
3 q+ z6 }! [, Y% K+ \) `2 l% T" i/* Unload Handler8 |5 f- `* V3 E' [5 z/ a! j
**     This function specifies when to unload your application from Unigraphics.
, m# `0 J% E8 m& ?5 }" D; X% q1 Y**     If your application registers a callback (from a MenuScript item or a
4 ?, O4 Y+ [2 p  T**     User Defined Object for example), this function MUST return: r5 G3 _! M7 l! ~+ K  q
**     "UF_UNLOAD_UG_TERMINATE". */
& Z$ K* ]# d" y; D! B( H: ?! s# T6 ]extern int ufusr_ask_unload( void )
7 ~* ?2 a1 G! ]4 f{
) v0 N* @6 a% m! d/ K5 v/ B( h  _    return( UF_UNLOAD_IMMEDIATELY );$ X- r! h4 f& n  t0 m
}
5 ]# h( j$ p0 ?/ u
& Q( X. a" P  r4 e  |
( P5 S/ J$ ~  O7 r$ s8 P: k2 E& O# ^8 h3 Z$ C  o6 B

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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

你旋转了坐标系,实际上就是更改了wcs3 R+ D" D: L& A" c
& `. }$ Z" ]5 i8 S) t! _/ @
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换& }2 V: n) U8 S3 y
- R/ D: P; D* H( G  ?% I, h# }
这个你需要多试试,首先把你通过uc1616选择的点坐标打印出来看看,必要的时候去转换,圆弧的生成比较复杂,需要一个支撑平面的,如果是XY平面,也应该是wcs的XY平面,所以看来你都是在绝对坐标系下处理的,把改转换的都转换下,再看!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

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

admin 板凳

2015-8-3 12:51:57

UF_CSYS_ask_wcs(&oldwcs);                              
3 @" D' f1 U- H0 vUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   ) x% X3 j5 {' s) N. z9 Q0 w
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    / {8 w7 I2 A) L) w! m4 z9 n$ E
UF_MTX3_x_vec(matrix_values,x_vec);                  - S8 N& [7 k5 K; M* G
UF_MTX3_y_vec(matrix_values,y_vec);+ ]$ L% B6 ]; C5 `: x
UF_MTX3_z_vec(matrix_values,z_vec);
% G/ B! V* u' d2 u, HUF_MTX3_initialize(x_vec,y_vec,mtx);               ! I6 q- B$ G5 D; R7 e1 `: f& I2 `
UF_CSYS_create_matrix(mtx,&mtxid);
, ^" B$ h3 w1 }+ S, rUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
2 @+ b+ f1 d! H$ ^% BUF_CSYS_set_wcs(csys);  ; V7 A4 C; P7 X2 p  \

/ H  f1 g) q1 e2 _' Q8 `, B* T5 ?0 B: `
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
, N" ~. E4 l& V, }) O5 i5 _! i% b5 f, Q" M! E$ V
不需要这些代码
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了