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

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

[复制链接]

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

7

主题

9

回帖

228

积分

培训VIP会员

积分
228
发表于 2015-8-3 10:49:22 | 显示全部楼层 |阅读模式

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
" {# w* t& i9 x; Z4 c    #include <stdio.h>
- I: m+ `: ~+ U) F, m0 x( [#include <stdarg.h>% I0 u3 Q* j/ q- v9 I; P
#include <uf.h>  V8 c9 v6 |+ L4 V: P, V" P8 h
#include <uf_ui.h>
8 l- Y" O# Z' G#include <uf_curve.h>8 w6 S: ]# B1 c9 Q  Q
#include <uf_modl.h>3 @) t/ E: L7 f- A& ?: z+ B
#include <uf_mtx.h>
; {7 T+ h# a  _% A8 b* O#include <uf_csys.h>' ?! h1 y1 f6 P6 Q+ L4 ]% ^' x, ^
! o0 U% `- t! G2 q1 H5 Y7 ~5 w" B
static void ECHO(char *format, ...)0 H7 G1 {7 w; o
{
! R9 L9 e, a/ }* `7 q$ u9 S    char msg[UF_UI_MAX_STRING_LEN+1];) w9 s# m3 ], s- r
    va_list args;
' d! y* h% g, t  v3 s  Z    va_start(args, format);
% m& k3 t- A6 P- \2 D! w' R    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
$ l+ P; w5 T$ T  J4 r6 c% q    va_end(args);
: A! W+ w/ P% C" M! F    UF_UI_open_listing_window();
- p. i( f/ K$ W# |    UF_UI_write_listing_window(msg);% a9 N8 g$ S' @/ G8 g
    UF_print_syslog(msg, FALSE);
! q* d* e" ^' f$ ]" r8 l% E4 n2 E}
& i, j& }3 V3 U. D1 X- Q#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
* B6 T; F4 k+ P" V' H" X) nstatic int report_error( char *file, int line, char *call, int irc)
0 T' x. }8 A& Y$ I+ U{
# d: D5 Y. u$ X) `    if (irc)' ?" ?+ q. T5 |+ v9 ~# w8 Z
    {  v& Y0 F% J2 i, x% ^+ t" L. |/ L+ L
        char err[133];
  k7 u8 N! P" S* V7 J        UF_get_fail_message(irc, err);; E: J8 f  q  U$ J4 a& |
        ECHO("*** ERROR code %d at line %d in %s:\n",
2 h* }  D" a' J1 T4 |3 o: l# O) e            irc, line, file);* y6 u. a1 w' M2 ~$ }
        ECHO("+++ %s\n", err);/ Z* d9 I& O/ Z* B) }* {5 b( _
        ECHO("%s;\n", call);( ^+ V5 l, v: t  h1 k5 z' s
    }3 x2 ~) T* n! _" h: B$ m# T
    return(irc);, x) L# h- ]  f
}( z6 J, {: J! B9 O4 c
1 c8 H. O, d# z" N" q' r$ l
/*****************************************************************************
6 J# P& d& c3 `4 I8 N* Q- x**  Activation Methods
0 Y" G; E: e& S5 ^; m*****************************************************************************/2 g' _) G$ g5 U  L
/*  Explicit Activation
1 ]0 s& H8 y- ~1 a4 D2 s9 q**      This entry point is used to activate the application explicitly, as in
( f0 e( i: g3 E8 E3 n**      "File->Execute UG/Open->User Function..." */
, W1 T0 x% m' j; x' W
# z6 g6 J% j# q! ^) f$ d
( Q  L' i9 V' {+ I( @4 U, O( |tag_t oldwcs = null_tag;
* C0 j+ o& ~1 D5 }- l( d7 m; Zdouble origin [3] = {0,0,0};
7 i4 U+ T' T7 r) \tag_t csys = null_tag;
2 K. Z" {- o! E$ J6 ltag_t  matrix_id;
% y( A9 y4 E; Z) Q5 odouble csys_origin [3] ;
% Y# M* j! u3 A0 ~! f8 w, Gdouble matrix_values [9] ;
" ?" E# x2 o6 U# b1 R) Jdouble x_vec [3];1 v( D2 H& k6 V) V- n+ W& M# b. N
double y_vec [3];5 j7 E/ P6 u# o) W; P
double z_vec [3];+ u( b2 E6 b7 l! u: b% c7 ]
double mtx [9];8 _9 }6 U2 R& C5 S
tag_t  mtxid = null_tag;; u. v5 G# R9 T& p( U+ d
tag_t arc = null_tag;
6 t% @& T! o6 ]UF_CURVE_arc_t  arc_coord;3 e; }. y* F$ D) j. S4 _0 V. U
double origincenter [3] = {0,0,0};
6 [: A1 m. h) Xuf_list_p_t objects;. }3 V: C5 @8 s8 r
char  *taper_angle = "0";. B: n6 S& A, T
char * limit [ 2 ] = {"0","60"};6 t6 n; v+ T) M/ b, L
double point [3]  = {0,0,0};
, b# Z: B. Y. d8 t7 R5 L//double direction [ 3 ] = {0,0,1};5 b3 t3 \; R6 r7 L& X1 \  o

4 e; d3 F" c: I% x+ Muf_list_p_t features;" T+ P$ h8 Z, S; U* K! }$ A% N
char * message = "vector";$ {) j5 k# ^/ h9 v. i& v( j* c) c# q
int  mode = UF_UI_INFERRED ;
6 W: R" g& ?% T/ ]6 q6 H0 F9 S% ddouble direction [3]; 3 o5 ?1 P' l' }" x3 ~0 S1 {
double origin [3];( f, R) Q" b3 k- ?; J
int response;
6 b" D7 S$ Y+ K% B# jchar * cue ="point";; Y4 D* v  B4 f8 |9 B  P* t
int mode_sel [ 2 ] = {1,0};
' s/ @' k5 Z/ h% I+ yint point_display_mode = 1;$ h! N* x6 r9 B4 r, I/ i8 f1 r5 \! D
double point_sel [3];
5 w2 C; z& X9 l+ N//double outputpoint[3];
& b7 ?7 x3 p* q3 t" u! }
) p% x# I7 A3 B: w; eextern DllExport void ufusr( char *parm, int *returnCode, int rlen )- B. K6 E" R) e% D0 c" o( S" U
{
' B- L) E" i, C    /* Initialize the API environment */! D) E+ V: b+ ]# h
    if( UF_CALL(UF_initialize()) )
0 m0 \4 O) k0 Z. ^+ {    {
- ?# V: \) D& R; y) E        /* Failed to initialize */! f3 B/ E) W" V- p/ x" y# d  U5 {' m+ [
        return;+ n/ M0 f* d* Y7 J) i1 A
    }
) B3 I$ i5 s! U5 C   
$ F" I7 v& i. y. J    /* TODO: Add your application code here */
5 G. _9 C6 |7 f; C& ?* B1 q/ f5 ~
+ \' y6 y' s8 F( D# v UF_CSYS_ask_wcs(&oldwcs);                               ' g. e# w4 c; {. Z$ u: a$ U, s# z
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
" k2 g" `) L" j2 E; i UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    " ]% o# i7 y8 h+ X2 Y1 P  S1 W
UF_MTX3_x_vec(matrix_values,x_vec);                  
! t6 }# ~: O3 K6 @+ }8 C* P UF_MTX3_y_vec(matrix_values,y_vec);5 e/ K! v# z+ g' x$ c9 q& @0 n5 }% K
UF_MTX3_z_vec(matrix_values,z_vec);
/ Q- E+ J$ C; h1 I+ }. y UF_MTX3_initialize(x_vec,y_vec,mtx);               ' B! V! v+ W' P, j3 w
UF_CSYS_create_matrix(mtx,&mtxid);
# ?. d3 R' x& ]. i% W+ n UF_CSYS_create_csys(csys_origin,mtxid,&csys);    , ~1 D# s( |7 o! [4 ?
UF_CSYS_set_wcs(csys);  
' t3 q" }) l. Q8 Y' f4 i* j. P" o
6 j! X& Z, z5 s1 w6 S2 Q- d
1 F  B8 ?2 ?- e, D" K4 {l10:" ]& b% W" I: J5 K
    uc1616(cue,mode_sel,point_display_mode,point_sel);& c5 q# u& r, e7 i; x2 i0 w
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
( ?' I/ D; p4 d4 E8 X# s3 K" t. Z
7 W: [; K0 W7 F2 M0 v) ` arc_coord.arc_center[0]=point_sel[0]; / z2 ~& T. L- Y: D0 D
arc_coord.arc_center[1]=point_sel[1];
; D% d, n( \( ~/ [$ ^( G" ]& T7 u arc_coord.arc_center[2]=point_sel[2];
6 q7 `, J2 R5 v' Y. K arc_coord.start_angle = 0;
7 H# J; V& E5 u  Z) ` arc_coord.end_angle = 360.0 * DEGRA;
! y3 d/ d/ f: i0 v0 F arc_coord.matrix_tag = mtxid;# m2 j- q. _" E$ z0 H* u- Y
arc_coord.radius = 20;: [: q1 u# O, q. t6 w; i2 b

. s( P, P/ H  w7 ], ~ UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
7 c7 @/ a) J  S! }6 M, [    UF_MODL_create_list(&objects);
( j/ B; `: N* N! s  K    UF_CALL(UF_MODL_put_list_item(objects,arc));4 a% B  Z2 u3 a$ M

8 q/ Q& V: V0 M- B9 z& H UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);. v/ e7 q: S) T+ i5 l
if (response == UF_UI_OK )3 r* K6 b$ R7 H8 i/ ^
{
% d) |+ j/ D. L) `  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));/ W7 d+ E* V; n4 o
}
9 A3 ]# f8 L. q7 a else
4 P; r2 b; S+ w0 b( T {: J$ o$ V8 l9 F! v
  return;) N. U: [( N: f# U3 H
}
  e9 Y; _& x: S8 h7 A" r goto l10;
/ q  R" _* I7 k3 ?, y& B
0 W3 O4 A  }* e) h/ A/ \% b; w    /* Terminate the API environment */
* [/ d5 V9 i& v  \3 a    UF_CALL(UF_terminate());) Q1 q/ F9 j: k. p8 e
}
* O! x2 p: o& U# i1 a( A2 C& c3 Q/*****************************************************************************4 h! B: n$ B0 v
**  Utilities/ G$ U( Z/ v+ P% x3 Q5 g5 C5 ^
*****************************************************************************/
1 M# c3 y5 `8 {# Q" h- V# {+ G/* Unload Handler
3 V7 X& q9 Z$ Y% [; B6 \) Q) m1 N**     This function specifies when to unload your application from Unigraphics.
( X$ D4 {, l+ b& b**     If your application registers a callback (from a MenuScript item or a  y' O7 ]% A* C7 r* V- l8 ^7 x5 @' L4 e, b
**     User Defined Object for example), this function MUST return
$ N" O! _$ _+ y) S& ]8 V**     "UF_UNLOAD_UG_TERMINATE". */  G9 b% S. D, ]; t" \8 G
extern int ufusr_ask_unload( void )# ^% P) K( r/ s' M  g9 N/ E/ h  n
{* J9 X2 `1 C, L6 ]( D6 c
    return( UF_UNLOAD_IMMEDIATELY );
6 a9 P; ?4 q# J}
* M2 w: }: O; e$ W- y+ w1 a9 D3 ?: |& q% T
7 j+ `# G" [% M; t# i0 ]/ D
* V8 n  w: g$ j  m

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

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

使用道具 举报

全部回复2

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2015-8-3 12:49:49 | 显示全部楼层
你旋转了坐标系,实际上就是更改了wcs; r" D3 i6 F0 K9 S, w

6 ?8 K( g- }) @" {你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换# b! Z& b2 }1 b8 w, ?; [) I

( p( r* E  w# u% U3 i- P. \这个你需要多试试,首先把你通过uc1616选择的点坐标打印出来看看,必要的时候去转换,圆弧的生成比较复杂,需要一个支撑平面的,如果是XY平面,也应该是wcs的XY平面,所以看来你都是在绝对坐标系下处理的,把改转换的都转换下,再看!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2015-8-3 12:51:57 | 显示全部楼层
UF_CSYS_ask_wcs(&oldwcs);                              
2 T& m" ~! p7 d- N& ]UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
3 a3 p# O4 h+ [4 R2 T# uUF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ) ?$ e0 R0 D( p* ]
UF_MTX3_x_vec(matrix_values,x_vec);                  
, O9 f; v) d+ [( @' BUF_MTX3_y_vec(matrix_values,y_vec);
% v: |8 K7 M* u4 _9 ]3 _UF_MTX3_z_vec(matrix_values,z_vec);& Y3 c) U  P$ ?% t3 j- `
UF_MTX3_initialize(x_vec,y_vec,mtx);               
! D% p: f6 u7 rUF_CSYS_create_matrix(mtx,&mtxid);
7 F" \8 P" n8 TUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
* X; N2 V  d, e0 }; ]0 ^  K& ?UF_CSYS_set_wcs(csys);  
2 R$ L0 O  R. }. e: t
9 j6 T" t( ?% E  F$ U0 o. O1 I3 h& O# h  E
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联6 p( h8 F$ a( ?$ r! H& D" L
% F" e; ?; z' s6 B. z% T" X* 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二次开发专题模块培训报名开始啦

    我知道了