PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。, Q3 {2 B1 p" S1 e+ \; D
    #include <stdio.h>
: Z5 \4 L3 j# y#include <stdarg.h>8 b7 b* O1 V/ H4 x7 j" e
#include <uf.h>2 g; O' y0 K# N, ~/ C* h
#include <uf_ui.h>5 }0 G9 \+ {: `+ z7 q" x
#include <uf_curve.h>8 g* o4 ?; K3 |+ j# B' }- s" o
#include <uf_modl.h>
6 p6 {0 R% f6 k, T( R" U. q) e#include <uf_mtx.h>" L0 A+ P+ t" b  k$ U. E; [! {
#include <uf_csys.h>
0 d$ G  K& |/ S. B+ |9 n5 L+ ~3 f' K: E/ P. q( K( a. a
static void ECHO(char *format, ...)4 e, n1 {- e3 w
{
1 c5 |1 s0 P0 l& M+ u$ y! i    char msg[UF_UI_MAX_STRING_LEN+1];
0 u/ k7 g3 w& ~* A2 ]5 g4 S7 X    va_list args;
; S) K. H: S' F6 W    va_start(args, format);
  a/ i% Z8 M  V8 R0 W    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);" A6 e5 M' {# m. q3 M* \
    va_end(args);
, j: g" i$ w% _, v3 a" B, Q    UF_UI_open_listing_window();
% J/ M" `: V5 \. |  l    UF_UI_write_listing_window(msg);1 r* o# f5 x9 O5 m" |) W
    UF_print_syslog(msg, FALSE);
: j, `+ l7 x$ }/ G}
- j% Q9 T, N. I! Z" y( e! k4 r8 ]#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))- G; c/ o- ~$ j; ^; I
static int report_error( char *file, int line, char *call, int irc)
. e1 ~1 H  k0 d' _( }{
! Z& |4 }4 `% M3 T: f/ l    if (irc)
7 \) u* d/ G1 _$ A- k2 t    {* s$ ^! U/ {6 e  K
        char err[133];1 ~/ E7 k$ u) g; J. S& w+ j/ O9 l" }* L8 u
        UF_get_fail_message(irc, err);
( `, f6 I8 E( U4 A+ ]' H        ECHO("*** ERROR code %d at line %d in %s:\n",; h3 X8 y7 q1 U3 t
            irc, line, file);  x1 g  z( J! O3 E$ z1 L5 {
        ECHO("+++ %s\n", err);
$ j: n: S. J# }1 l        ECHO("%s;\n", call);
1 j& h3 r' e* V    }
: ~. _0 l, v7 B    return(irc);1 m/ \( g4 X5 w
}* |1 ?" ]4 C! M* ?
2 |( \' T/ H9 U3 f$ S7 s6 j+ `
/*****************************************************************************
  w  h: I: Q. T4 G2 {% A. Z**  Activation Methods
5 ~1 e0 b! k0 C" @( [*****************************************************************************/( x: l* ^9 F$ Z% H. E
/*  Explicit Activation
# L% ]# q% G6 {/ D. P**      This entry point is used to activate the application explicitly, as in2 Z, W& a1 k: n; H1 C
**      "File->Execute UG/Open->User Function..." */( C* p: [* T1 h8 w. y: m( s

+ h% Y9 h, A( x- T$ g9 T( M) }
tag_t oldwcs = null_tag;
3 L3 N0 T: \) s- m; g% Qdouble origin [3] = {0,0,0};. Y2 V3 S/ P- q* D4 w7 ^! P: Z, x
tag_t csys = null_tag;
1 R5 x" I' q8 [' T. Z8 ^+ qtag_t  matrix_id;
  D  o) I/ ^9 h; k4 R; l0 i* L7 xdouble csys_origin [3] ;
' L5 ~6 J+ ]5 Xdouble matrix_values [9] ;+ o6 q$ c3 L( r: D5 C6 q
double x_vec [3];
+ \; u( o8 U1 X4 r' xdouble y_vec [3];5 R0 k+ H  z' S% V
double z_vec [3];4 ~+ v2 X7 j* n/ h0 P& u
double mtx [9];
8 c! F( h: q1 x6 T' F1 f3 ]1 Xtag_t  mtxid = null_tag;
) w2 f2 N' s- l$ h1 E# r) i8 vtag_t arc = null_tag;
, ^5 P9 Z  z$ @UF_CURVE_arc_t  arc_coord;9 V1 A* g* v& ]( E
double origincenter [3] = {0,0,0};/ n" `  ?8 H2 f1 z
uf_list_p_t objects;
4 ~& O4 p2 P# m2 G$ |% Qchar  *taper_angle = "0";
& q" B, e$ H* o  Schar * limit [ 2 ] = {"0","60"};: z8 l! x+ Z: p' |& g3 e" c# u8 Q
double point [3]  = {0,0,0};
! W* P) _, o3 H+ O" f/ F3 M//double direction [ 3 ] = {0,0,1};
( T2 x- k7 }: K* {: d, R
) O: v" I% u: N# |uf_list_p_t features;$ a8 p" Y% _/ \! b6 |
char * message = "vector";
1 g6 p: A- n  R( `8 M& kint  mode = UF_UI_INFERRED ;# R) q3 r2 T1 f" C' E! Q: r. v' H
double direction [3];
% W2 f1 p7 ]0 b0 C3 }; D! Vdouble origin [3];+ Y! ?1 U- U, z' T( ?
int response;
' i* P+ r5 C+ L5 @0 g2 m/ Jchar * cue ="point";
" Z( S6 {9 }% Lint mode_sel [ 2 ] = {1,0};
6 m2 v: [* w; i2 F$ N/ |4 i/ Bint point_display_mode = 1;
% K7 C/ h& Y: N7 n* ydouble point_sel [3];
1 E; g0 [: q% l0 T//double outputpoint[3];
" n) ]( m9 ^' A
9 P3 x6 u) I' @+ H; ?; ^extern DllExport void ufusr( char *parm, int *returnCode, int rlen )# ^7 w  D4 M+ c
{
; a" _9 X- l4 ?! I2 f    /* Initialize the API environment */: M0 N( {# K6 w
    if( UF_CALL(UF_initialize()) ) / }' H6 Y$ l$ O( U; C
    {
$ {/ K9 V) G1 g: q; o, E. ~        /* Failed to initialize */
3 B  x. R# b. O  p& i  W        return;7 S3 s6 ]; S' s2 L; P
    }
: ?) u7 ]8 Y5 z; C    . @  }( J; C: i0 X% W, n, O. _. `
    /* TODO: Add your application code here */7 O! @2 n/ T8 ~( Q6 y, n

9 x: k( C3 _$ R UF_CSYS_ask_wcs(&oldwcs);                              
0 {% ^9 k- _0 _4 D- J+ C5 l UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
: e  p  X! ]0 ]" ^% i1 T% S! L UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
& y6 T) C8 o, T$ L0 h" v# m UF_MTX3_x_vec(matrix_values,x_vec);                  
+ B! S  {! r8 \" f0 I9 {' R; T' h4 E& R UF_MTX3_y_vec(matrix_values,y_vec);
" f, ~. V2 R% w; \6 E3 V UF_MTX3_z_vec(matrix_values,z_vec);! Z: _' [  f8 N; y+ q0 q
UF_MTX3_initialize(x_vec,y_vec,mtx);               / S6 y+ a" ]/ u' Q6 o: S' n* H: i
UF_CSYS_create_matrix(mtx,&mtxid);# {! [: k5 {7 p8 H+ `/ T
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
8 w8 [% \6 ^. m+ P6 S7 T  g+ h6 @ UF_CSYS_set_wcs(csys);  3 Q) a- p, s! |# T4 _) \
. J$ M8 T8 k- _+ Z
& A; U8 j+ f9 @9 T
l10:5 n% m+ q5 x) \& M( o$ B  T3 T
    uc1616(cue,mode_sel,point_display_mode,point_sel);3 J0 h8 h) Z4 h: F' u0 K; @1 b% K
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
  o! f. V7 Z$ U
9 k2 I/ G# w9 D7 |: H! i6 L$ B arc_coord.arc_center[0]=point_sel[0]; 9 u: j: Z; ?5 s( R
arc_coord.arc_center[1]=point_sel[1];
- R% s7 W5 i) J' U/ k arc_coord.arc_center[2]=point_sel[2];( u, B5 h2 Y) }* U" X3 V
arc_coord.start_angle = 0;
8 U/ W- d2 d' _! d arc_coord.end_angle = 360.0 * DEGRA;
" X- P; l3 `, U* p* G arc_coord.matrix_tag = mtxid;
3 q+ R5 D7 ]; V. m7 b2 d arc_coord.radius = 20;
$ I" E7 e) M- @2 M! c! x1 C! z, ?$ B " P$ @$ F* F% d$ ?3 Q8 L. `
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));4 [! S# k6 H7 M  L; h; e
    UF_MODL_create_list(&objects);
! _6 H& o8 h, W. d+ K- g" {* S    UF_CALL(UF_MODL_put_list_item(objects,arc));
" I% C+ U6 `) I3 Z: l) |: e1 Q6 B6 M+ K. e7 f  W- l" I6 b
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);: U, \* k) ^( x6 _* J1 N
if (response == UF_UI_OK )# d# z0 b: `  C; r
{4 ^! f( p$ ~( V" `: e# s* t5 J
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));( \0 U% ?+ @; F. [8 E$ f7 E" C& ~
}
* @! j  t9 u5 f* C  ? else- G8 B& ~, T9 A8 l
{* n; W% r4 L5 {7 k) G
  return;& Y" T+ E( {, c) R" D( t& x( K
}7 L4 W  n7 G+ V
goto l10;- ~( e0 d: j2 Y5 ]3 N( S
* W) w4 e" F! a6 P% Z- v, N
    /* Terminate the API environment */
9 t/ ~/ ]3 q( i' L    UF_CALL(UF_terminate());. y& j: Q3 L1 e6 C3 t7 I0 Y6 O
}+ C. T0 ^2 M( ^* H; p: N- v
/*****************************************************************************! a3 ~4 }, i' i' h9 E% B5 q
**  Utilities, H5 c. S9 `& ]: O& x
*****************************************************************************/
4 y9 E( \, U: y  Q$ w' p0 Q/* Unload Handler+ ^% Z; C0 B4 e: M& x4 P
**     This function specifies when to unload your application from Unigraphics.
" [/ e5 r" i! _" O! G* B**     If your application registers a callback (from a MenuScript item or a
2 b2 @. T4 Y0 S. X3 J- r7 w) P**     User Defined Object for example), this function MUST return% x3 x# _. U4 Z  h  o8 u$ h' j) G
**     "UF_UNLOAD_UG_TERMINATE". */
( f" R  m9 j* L0 W: A3 b3 V4 ]extern int ufusr_ask_unload( void )
# u" N3 F1 \2 {{) p+ z" ~, `- _1 L
    return( UF_UNLOAD_IMMEDIATELY );4 a0 x  }; y# Y) f; y- ]) L) G
}
/ m/ @& _$ q6 n5 A3 R1 O5 Y% j- \* ]0 ?) F' G9 I
( [% T$ L. I& S4 Y$ K- ?

0 T8 O: w; E( B( V

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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
, N/ y2 @2 G, e* o8 W3 ~* s0 w$ n! E- v& v2 O2 L* d" e- C
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换% H# v5 i0 J" {: r* N" H
! `! B4 P% C' G  V+ X- n4 }0 j# u- n
这个你需要多试试,首先把你通过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* n  _6 }6 k! _9 B: K+ [! U
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   1 E5 R$ x/ J4 H- \" }7 v% l/ V1 n
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    , o4 j& w3 @- }/ ^. m9 G
UF_MTX3_x_vec(matrix_values,x_vec);                  
' p3 e6 D- J# N* L6 C" QUF_MTX3_y_vec(matrix_values,y_vec);
8 [9 ~: K6 I" W+ R1 sUF_MTX3_z_vec(matrix_values,z_vec);
# x9 c1 ~+ ^7 ~+ a: b4 cUF_MTX3_initialize(x_vec,y_vec,mtx);               
/ W$ H+ u. J: {UF_CSYS_create_matrix(mtx,&mtxid);
( k" d% n# c7 C9 M- f; FUF_CSYS_create_csys(csys_origin,mtxid,&csys);    ; M6 }# k0 o3 d" @6 B
UF_CSYS_set_wcs(csys);  
! a* F6 e% ]; D* [" ^* `  I* q
  U4 A. e5 k6 H2 p/ S! q+ c
$ R* h  Z; n9 J1 a/ k" J  |! N这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联, a) T- N, _" m3 O9 T$ x* Z9 I
5 v# A7 B( w$ j* {
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了