PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
7 E! z: b# J& V    #include <stdio.h>3 X' A- {. M( t/ J
#include <stdarg.h>
" x- w  q" m8 \* ~, v) M#include <uf.h>
0 `  g% ~8 B* r) q" [) \2 x#include <uf_ui.h>
- n+ g% K2 X- y8 t- O#include <uf_curve.h>
9 K' i; ^) U! H8 E0 o- y#include <uf_modl.h>
2 ]+ k' Y2 g6 f1 n# x& K' @: ?#include <uf_mtx.h># U: O6 h  W3 U* s6 g
#include <uf_csys.h>
& Z+ t- ]  p' ?: g
0 a0 S3 e& D4 F3 v" ystatic void ECHO(char *format, ...)6 p9 y# G- _! y; H5 P
{; [- f  f1 c4 \! V8 \. s* m7 T
    char msg[UF_UI_MAX_STRING_LEN+1];
+ Z# H$ `# @7 y9 L    va_list args;
0 s5 `% h' G' S    va_start(args, format);9 S# ~, [; i. ~! ]" u% ?9 k
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);5 a; U/ N& n- W; p% G
    va_end(args);% H+ r- N' `- |( ~7 o
    UF_UI_open_listing_window();
  N3 Z8 @* E9 S, k* g    UF_UI_write_listing_window(msg);3 Z: i/ \: U/ c$ R) K$ U
    UF_print_syslog(msg, FALSE);/ ]% c; h8 U4 V* z0 h; A: x
}  x  D2 U. R" _9 G
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X))). `/ l: q. z& u1 A! k# A# X
static int report_error( char *file, int line, char *call, int irc)- G. f' R+ R4 h) O$ P
{1 ], F- X; w# G) C
    if (irc)
; X! q( H. U" F. q% I3 ^    {# M$ B2 b) B' Y4 A0 t% x
        char err[133];
! c' I' i/ d% m3 x$ e        UF_get_fail_message(irc, err);" f5 X5 H- `2 q- H9 P" [5 V' I
        ECHO("*** ERROR code %d at line %d in %s:\n",
, [( Y* E. d" ^! J: V6 g9 ^/ l            irc, line, file);
* k, v) \& M9 w0 G6 d        ECHO("+++ %s\n", err);1 u+ f3 F" j* O# ^. _
        ECHO("%s;\n", call);# G0 B1 G' }( O' G; u- C5 U1 T* h) M
    }# w: g7 X, W) D: ~
    return(irc);
, c7 I; s! w7 \) ^}
( ~" W& Z: C6 d! w& |+ @, v- c6 B- i  o, l" s0 U. q- ?! ]
/*****************************************************************************! l' I  W: a2 S! |/ M# b1 P, C
**  Activation Methods1 K9 S9 n9 W: H
*****************************************************************************/
) H% ^  k+ b& S1 k0 F/*  Explicit Activation
& e* s% T, T# q2 i3 S**      This entry point is used to activate the application explicitly, as in
& z. \& ]" n3 [3 j' p**      "File->Execute UG/Open->User Function..." */, X5 l3 w1 @1 F

( H' U; h- |& z$ a. w; {9 ]- }. ^% L" B! j" S' N! _/ Q
tag_t oldwcs = null_tag;2 V, ^9 ]# v3 T$ H1 z4 k/ O
double origin [3] = {0,0,0};2 ~7 |5 Q7 f; T' h( _, V3 d7 ~
tag_t csys = null_tag;
6 {& Q8 N; n) [' Z0 F' _6 v: Vtag_t  matrix_id; 9 `! A" q! S( a: A3 S) o
double csys_origin [3] ;
* T2 u+ X. j7 s$ tdouble matrix_values [9] ;
! U$ i) J* `/ W* Q, }) p; p5 z3 gdouble x_vec [3];
$ p1 S$ N7 g6 _: L% `double y_vec [3];
  ^, \' r- X, H9 udouble z_vec [3];
% n4 g$ h# X! }7 Y; Z2 h: H" xdouble mtx [9];
  t4 v; m' |& U" ~tag_t  mtxid = null_tag;
7 c0 h/ d6 O2 z2 btag_t arc = null_tag;3 X5 z% A# e# j* y3 l3 p9 o
UF_CURVE_arc_t  arc_coord;
/ ?' R; E2 q, f) F6 C6 s; ldouble origincenter [3] = {0,0,0};# S  Y3 z  h2 x6 \( o8 f
uf_list_p_t objects;
/ t: x; t3 F4 f) V: Uchar  *taper_angle = "0";
' y  Q1 [, {& gchar * limit [ 2 ] = {"0","60"};3 D8 P5 l. H, y* \, J; N
double point [3]  = {0,0,0};
) H9 d+ j: K0 |7 ]8 m* a5 j- C//double direction [ 3 ] = {0,0,1};( e8 ^# o  x+ W
  x+ O8 c& w* l" T0 M& m9 M( @
uf_list_p_t features;
& \0 ^: V8 [% r2 v0 }3 Ichar * message = "vector";+ n4 d0 p4 I, a( H' Q
int  mode = UF_UI_INFERRED ;
; }+ C& c- }0 Z1 t8 sdouble direction [3]; . }8 D# Y" n0 S. R! |$ h
double origin [3];
- \4 E' r. ]. M$ E7 n4 aint response;8 Q# V3 |; t, J  A. P
char * cue ="point";- M/ n6 F, J/ ~- f; _0 O
int mode_sel [ 2 ] = {1,0}; 5 y4 O7 h7 p  l
int point_display_mode = 1;* k1 _$ X' T& w) l7 y
double point_sel [3]; : q6 e, b8 Q2 B! ^0 e
//double outputpoint[3];
! m8 c4 B, Y" v9 H7 @  q& ^3 @$ I. v( d) q% V+ i2 P! h
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
* Q' D/ Z/ U, t  {8 D6 {: S2 W{
5 t! U4 ~& {. M4 S( [* t    /* Initialize the API environment */
6 v2 O5 a& C! ^" ]0 w    if( UF_CALL(UF_initialize()) ) ; T+ ?7 \! f$ e- r2 _( L/ |6 N& u6 c; \
    {
, C2 F9 g# K; X; w/ O        /* Failed to initialize */; l! J- T. |1 i( a
        return;, {9 n/ Y6 O6 R5 W# l9 ?! z+ m
    }% b4 V# w; {0 w
   
! ]& e# @$ g9 S2 P    /* TODO: Add your application code here */
# x2 y# v. C/ ]" t  f; n8 [, }; d& e* y8 E* J
UF_CSYS_ask_wcs(&oldwcs);                              
5 u! R8 F8 s, K/ \9 f UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   9 |3 z( E: X6 s
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
( G+ P& v: \; a UF_MTX3_x_vec(matrix_values,x_vec);                  ' F- L1 U& H5 m* [. l
UF_MTX3_y_vec(matrix_values,y_vec);7 H' z5 X$ ]! c2 w7 b" K
UF_MTX3_z_vec(matrix_values,z_vec);
5 ?+ |: }1 C% } UF_MTX3_initialize(x_vec,y_vec,mtx);                 G9 u/ V% t; V* ?; u, ^. ?) X2 l
UF_CSYS_create_matrix(mtx,&mtxid);
1 C! ?' p: N, v1 A/ U UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
8 H6 R- p& ?1 j7 e; ~ UF_CSYS_set_wcs(csys);  
, [! v7 G. F) P 3 a0 X. p) j' H# j% g
5 T0 T- e0 \2 ^" Q
l10:2 G9 H4 R7 R( g. M
    uc1616(cue,mode_sel,point_display_mode,point_sel);
* e1 A" m( m! c( q  T+ S //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
) N2 k9 G; b' \; K$ K+ y7 ]
9 {& M+ M" i7 G arc_coord.arc_center[0]=point_sel[0];
' s: C) }# c8 U. a9 p( J arc_coord.arc_center[1]=point_sel[1]; 2 ?  A- A$ H4 Q; T( g2 _! p# x) G
arc_coord.arc_center[2]=point_sel[2];
# g! L  r" S& R7 j% n1 H arc_coord.start_angle = 0;
& W& i9 o% K; W5 ^! N! F1 Y) H arc_coord.end_angle = 360.0 * DEGRA;
$ X: L8 [& J, B, h% y arc_coord.matrix_tag = mtxid;0 Y3 e3 `+ b8 R7 a# w* f/ ]2 @+ y
arc_coord.radius = 20;
& O* d/ ~6 x5 y6 W& m
* |8 x( O. k) w# K UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
1 Q* A% I8 t! r( h8 E3 |+ i    UF_MODL_create_list(&objects);
6 N. o0 F5 }, p- H. l3 H/ w    UF_CALL(UF_MODL_put_list_item(objects,arc));  P3 w: g( Z" h( e5 K

5 T$ F0 v! W! }- U( o UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
. Q5 v" P+ b! K if (response == UF_UI_OK )
+ n0 A# w  _7 U {
$ f; S7 B+ z0 o) W, [& j# K- v" P7 z+ E  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
" ]/ B) M6 P: {# \; Z- K% u, { }0 V% M0 z. W4 Z/ G
else( u2 u$ d/ ^& U% l
{! [+ ?- j% q: C, A
  return;
' V$ ?9 A2 y  s' \9 m. \8 | }
7 w6 F. k: Q0 U" K% X6 c0 q7 H0 o goto l10;- O  Y9 R) o  U* Q5 T8 j

) n. s, P) u# ~7 L! c    /* Terminate the API environment */
) g. `: i9 P0 O    UF_CALL(UF_terminate());
* K4 |  ^5 b% r8 l+ E7 o0 P}' A- t$ ^& A6 p: a; j. N
/*****************************************************************************2 u. [+ p+ P( O
**  Utilities7 A7 f- Q( _/ X/ J) F( R
*****************************************************************************/
" ]2 M; |1 l: z- S/ u7 n& ]2 E/* Unload Handler
( z, \" \# w% z$ e0 s" n9 f**     This function specifies when to unload your application from Unigraphics.
% p, }! `) c* n6 O**     If your application registers a callback (from a MenuScript item or a
2 a3 F1 w, Q+ u  w8 `: f**     User Defined Object for example), this function MUST return
1 X6 |3 Y9 L/ _9 U' @  g5 k7 D**     "UF_UNLOAD_UG_TERMINATE". */
8 L, w0 s+ s3 b' bextern int ufusr_ask_unload( void ), O& f& i% j% J- ^" _
{
: ?8 C0 y5 ?3 v7 M5 }& E    return( UF_UNLOAD_IMMEDIATELY );: n$ a) a" C8 O+ i' z+ t/ V! ^) O
}1 v$ x# q, W5 ]1 z. @0 _
; |5 |+ S  Y( P
; D  n. I! S# f4 P$ S! j
% [1 `  a: S6 K# L3 e% F8 S$ M

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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
1 R% f0 m0 N, F. C. G- u
# F* X3 A5 h' i8 l$ X) G& i" d你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
6 M( H9 G! V: l) J7 m/ f8 f  B6 r! c
  c2 S7 b6 P# v# @6 I2 B" h2 a: H这个你需要多试试,首先把你通过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);                               ( j0 q/ `5 z. B" V9 M3 ], ]& Y" E
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   9 }! `  V! x  D* ]0 e/ x- E
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ( n" w  q9 V/ n) s9 @" @
UF_MTX3_x_vec(matrix_values,x_vec);                  ! ~+ L8 ]* T3 q& r3 |- V
UF_MTX3_y_vec(matrix_values,y_vec);2 {! v1 H1 x7 }: q3 B
UF_MTX3_z_vec(matrix_values,z_vec);
7 d2 S1 \6 a1 D9 jUF_MTX3_initialize(x_vec,y_vec,mtx);               / F& m0 q$ [% S: J7 ?
UF_CSYS_create_matrix(mtx,&mtxid);
! a2 U2 |* K+ D% @* pUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
1 G, ~3 K/ U( U; B. ?1 `) @, fUF_CSYS_set_wcs(csys);  & J; R1 M9 q! Y$ D/ y, S" v
) b2 @& e; U3 C4 S# e6 z
, r5 B9 f5 _/ c+ t2 K4 _
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联. f: j$ U0 e! |& G
4 H' s4 \& i. \7 ]- _# X( }
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了