PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。: r5 w9 Z# {* d7 N% V) c
    #include <stdio.h>
6 @& m1 E& r% Y6 a) u- g#include <stdarg.h>
1 }8 P% j5 s* q7 D% _, h#include <uf.h>
8 H2 R4 H9 b% d#include <uf_ui.h>
. _  l( b7 v) D7 d#include <uf_curve.h>
1 p* K; f" X/ U2 K4 k# X#include <uf_modl.h>) O: r. r/ \2 D# i
#include <uf_mtx.h>
( L) L( P5 k5 J: x#include <uf_csys.h>
- ?- Q; N  O% K8 F6 u: u9 W$ |( ?" y. |: l+ o
static void ECHO(char *format, ...)
% B% w& }6 L- B/ ?* }4 O  R{8 X- G8 `! K6 a/ m% {$ T$ A
    char msg[UF_UI_MAX_STRING_LEN+1];
: R) |% j4 g( y: O' D! U) s    va_list args;# @: J8 @: O% S! x( o& e2 {. W* A
    va_start(args, format);1 G: w. h8 D% d1 a# B2 {
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);' O! s' H3 E! L' }1 Z, ~
    va_end(args);
7 C  V+ [$ U' K) ~    UF_UI_open_listing_window();! v; C( Z* u9 B4 ~4 k4 [
    UF_UI_write_listing_window(msg);
7 }: k; u3 R, P! R, \. n    UF_print_syslog(msg, FALSE);
" U$ B9 j6 B/ M% N% `}) F; n3 i5 y% ]7 Y8 q1 l9 b
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))3 k& \/ X& H; m- U' h+ f
static int report_error( char *file, int line, char *call, int irc)8 g5 a" c: J6 F% f: w
{, ~+ s1 P& B! [' ]; R/ B. Y% G* F
    if (irc)0 m8 e+ O5 p; F6 m
    {
: a6 H' o+ p; }' G        char err[133];0 T3 C* o5 s7 g+ M5 B2 n
        UF_get_fail_message(irc, err);
8 u+ Y+ P$ h2 S8 @5 }' g        ECHO("*** ERROR code %d at line %d in %s:\n",! J( h6 i9 |. ^( ~
            irc, line, file);
8 u7 [3 p# `! i: O1 J        ECHO("+++ %s\n", err);
8 j" b# k9 P4 S0 B! p3 @/ l4 |        ECHO("%s;\n", call);
- \! y; p' g3 S$ F    }: [* m; z: M9 |* Q, b
    return(irc);0 S0 M) e( O! B" d
}5 `) k7 Y/ ]7 v0 }$ ?$ |) ?
0 }0 ]% d5 k3 G8 p: b
/*****************************************************************************8 o, \9 X2 V5 ^4 B/ Q! Q
**  Activation Methods5 y! D2 `2 D0 U, l% l( n# F
*****************************************************************************/
. ]) Z. _5 `7 o/ T/*  Explicit Activation% l& b* K  `4 L6 m! w8 h$ r3 e
**      This entry point is used to activate the application explicitly, as in  G9 r/ A) T% w1 d6 {3 E
**      "File->Execute UG/Open->User Function..." */
6 @! C- e! \+ g4 h' e/ _+ P" a1 _
0 A1 h- L1 y4 [/ v% @4 l9 g, J
tag_t oldwcs = null_tag;
; k4 N# I  Z/ x6 ?1 V+ wdouble origin [3] = {0,0,0};$ k3 N+ Q  x/ m. H1 `, m& U4 h
tag_t csys = null_tag;
7 F* c0 G( l/ xtag_t  matrix_id;
+ y! \& k' ^$ q2 c: P( y. I0 @double csys_origin [3] ;
& N  E' z( m: X  f4 z. qdouble matrix_values [9] ;  z/ B5 S; e3 D7 [1 a9 D) M1 G
double x_vec [3];, m7 V. s6 L1 u. {
double y_vec [3];
$ m* x7 X. \' `& I" idouble z_vec [3];
5 Y- X/ ^7 R6 n0 G2 z5 u3 ~double mtx [9];5 v! A  O9 @& |- g9 J4 y6 |
tag_t  mtxid = null_tag;; w' @, T8 e9 i1 a
tag_t arc = null_tag;8 [9 c) {. N( A2 g2 M
UF_CURVE_arc_t  arc_coord;% F0 T4 g  N6 z/ @% ^: V
double origincenter [3] = {0,0,0};( j* o) A7 `* w$ n
uf_list_p_t objects;
/ T5 L5 A: i, ]char  *taper_angle = "0";8 x6 e8 t  W4 V
char * limit [ 2 ] = {"0","60"};2 g: A: v0 H  w6 \+ y$ ]
double point [3]  = {0,0,0};# U- B% `! M! ?( q# i
//double direction [ 3 ] = {0,0,1};' k9 o) S: ]2 g  j8 h: M  p9 K
4 L! L8 z+ H7 w* }" f3 ], T3 `
uf_list_p_t features;
0 Z  r, C9 j5 Q" _0 b$ `, dchar * message = "vector";
9 s  Y( v/ A  c$ ~int  mode = UF_UI_INFERRED ;' |! z2 \4 z5 R2 e  a1 p2 B; ^
double direction [3];
7 X1 u+ c2 C- B6 R. y/ ]! mdouble origin [3];
+ `0 I0 f4 _* `6 Yint response;
5 |- t5 s  |* R+ J* _, Dchar * cue ="point";0 n# X' \: e7 ~+ A
int mode_sel [ 2 ] = {1,0};
. ], V- y/ O  Oint point_display_mode = 1;, L& S0 ]) B* `8 y( a4 l" _
double point_sel [3];
8 }1 }; e6 T7 t; W. v% B//double outputpoint[3];
6 A, |3 r/ a4 D4 \: U$ ^* G
3 G9 i( p+ w& _1 t8 w# s) bextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
. o( r% n! n, S* P( R2 h+ b' G5 g{/ X3 v1 c7 A( l7 W
    /* Initialize the API environment */( L9 T# L; d! g7 Y; [6 B& D" M
    if( UF_CALL(UF_initialize()) )
5 D! z8 o9 U- G    {
. X* h1 Q" ]: \8 o+ e- I        /* Failed to initialize */
# g9 t2 R' o0 F0 X' _9 Y' m6 _        return;6 k4 d+ m; C. E, I" j
    }. p$ a. S/ e' v, Z, ?
   
% t! E  O. o& E/ m    /* TODO: Add your application code here */
0 X8 M, Z9 E0 d  g# t! M* h1 x6 R$ ]% \! A; K  A% K' P. f
UF_CSYS_ask_wcs(&oldwcs);                              
& q. R+ Z! R, g8 a9 h  T5 d6 k" L UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
' P; M$ I7 K7 s" a9 d5 N9 F" ^ UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
$ v! H$ a  Q! N: p5 N# U0 I UF_MTX3_x_vec(matrix_values,x_vec);                  
& R0 f+ z- ^7 [: X. _( l; W UF_MTX3_y_vec(matrix_values,y_vec);
( V, p' r# h0 ]& T UF_MTX3_z_vec(matrix_values,z_vec);
* H% B9 k) U4 |( z UF_MTX3_initialize(x_vec,y_vec,mtx);               1 i) Y  D# [( N+ T5 Q9 l4 r
UF_CSYS_create_matrix(mtx,&mtxid);7 d0 |+ q, [1 l7 r
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
: V0 |1 o  b3 M UF_CSYS_set_wcs(csys);  . B! I1 J* p4 `* n  O; k: V
& c. z* E. ?- l+ `# h, A

3 e" C2 y) b3 s# u7 ul10:
# P  Q5 j; c; o$ f7 j* {- X" r+ b    uc1616(cue,mode_sel,point_display_mode,point_sel);: c6 q  f2 D7 T9 T6 F, H; ~! S
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
( m7 G0 o- y" |$ W7 Q4 e6 h# V$ i" L  f# U: D& o: [1 R2 C
arc_coord.arc_center[0]=point_sel[0];
9 a& f* a; l, h& @% ?5 \# E) a arc_coord.arc_center[1]=point_sel[1]; % a) `- ^8 |3 F$ l5 s. |' N4 V) D# r
arc_coord.arc_center[2]=point_sel[2];: c  u* J. ~  I9 o
arc_coord.start_angle = 0;5 O/ A! X: O* J" K6 k0 b
arc_coord.end_angle = 360.0 * DEGRA;! S! d* t3 b. z% ]
arc_coord.matrix_tag = mtxid;
8 g+ G, p$ ?1 N7 }" O arc_coord.radius = 20;$ U6 r* @. a) w. g
% m6 O* T- o1 K4 ?/ f
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));- n: ]$ Z- y7 ]5 a% |: r1 f& [
    UF_MODL_create_list(&objects);, A+ F/ z" E" {
    UF_CALL(UF_MODL_put_list_item(objects,arc));
7 O+ M- h) ^+ W3 f* T8 @& j' x  U5 s4 _4 _. ]$ ~: x. }
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);; ?: U. G! |( ], C0 k
if (response == UF_UI_OK )$ j9 D9 w4 Y5 h+ x& R8 ~
{  C9 q- L6 K( r  A
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
8 A! z3 K9 }1 t- x( m }
4 O7 i% o4 _, ^- [2 u+ X else) E! w  u* `) t6 Z; P: s2 A$ K# h# H
{
+ G' g) _, Y' ^) F) Z8 S: X  return;- z0 c1 w" a0 Q8 D
}( w9 ?; e4 _/ G$ }
goto l10;
& I+ U( j: q3 s/ o3 B6 P3 Z9 p
0 \1 M0 B) d- ]0 p7 _    /* Terminate the API environment */  |8 U& l  |5 Y+ d& d
    UF_CALL(UF_terminate());! n7 T1 x  @7 ]+ P
}5 N3 @6 ]! ^) M+ g. l# k# ~
/*****************************************************************************! v8 x2 X6 D/ @
**  Utilities3 M: [* o* L0 s4 h1 g
*****************************************************************************/3 q; j& d8 C# y; m$ ]
/* Unload Handler3 K( a, D: A8 E2 O% s( e4 u
**     This function specifies when to unload your application from Unigraphics.
9 f+ p! r* [7 j* Y. u# M5 [' U**     If your application registers a callback (from a MenuScript item or a
: O4 J; @2 {4 ?  \! C/ ]**     User Defined Object for example), this function MUST return
7 a" E: s$ F/ a( b% A8 [**     "UF_UNLOAD_UG_TERMINATE". */
3 g% T1 b# I8 ?# Nextern int ufusr_ask_unload( void )
' w5 S3 z3 |/ y* b3 a{
& G2 O4 y+ Z! l$ e' e    return( UF_UNLOAD_IMMEDIATELY );
9 S, o6 Z7 j/ A5 R6 _. a}
& o9 G9 L# Z$ q0 |" v) j' g
: V! k5 |8 R7 {" j7 A- x2 K" E6 K2 {8 C1 L- Z) h

  P- D! _6 R9 R& P' G

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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
' K$ p5 M% G, I9 _- ^
$ T3 k; C1 r! |+ h  f4 F你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换1 d0 P/ S3 _8 O+ w, f, u
0 Q% O7 `$ i' a& j# {; S* |' g) A( \
这个你需要多试试,首先把你通过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);                              
- z: ]! g9 W, F, y  H% \. i5 P+ T5 gUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   + j4 A; Y6 c7 ]) n3 I
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
3 d: W( u. u% PUF_MTX3_x_vec(matrix_values,x_vec);                  + E# F3 ]. ?. G. k& Y) r
UF_MTX3_y_vec(matrix_values,y_vec);- \$ U8 ^6 z+ E
UF_MTX3_z_vec(matrix_values,z_vec);7 D1 M) A" H! ]
UF_MTX3_initialize(x_vec,y_vec,mtx);               0 t6 _4 V" K" K# Q# O/ L
UF_CSYS_create_matrix(mtx,&mtxid);% y2 K/ k7 S3 S4 D1 z5 M2 b+ o* \
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
0 J2 n) w5 u9 qUF_CSYS_set_wcs(csys);  ' P* {% e- Y+ X
& t3 p" p& [  L3 [

6 g6 {5 z: ~" x) \2 I. ~这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联6 u! m7 W5 q# \- [% s: p
5 w& K/ T) p' p* R
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了