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 4274 2

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。' ?7 \1 Q0 i" j  Z2 r
    #include <stdio.h>
" E* [1 F+ x7 c#include <stdarg.h>
/ [* B6 _1 Q; q4 p8 H) q#include <uf.h>
, F0 K" H8 X7 h& L% ], `#include <uf_ui.h>
1 s4 o9 ^6 R' }' \#include <uf_curve.h>2 D( Z  Q' A, J8 }4 z+ C1 ~3 @, @
#include <uf_modl.h>
' k. B' Q" I# s#include <uf_mtx.h>
, A! `' z/ O4 P3 Y7 {* a- E#include <uf_csys.h>3 A! I, s7 O" E: r6 }3 H6 k3 n
9 U. e8 B% M& c; y
static void ECHO(char *format, ...)( a0 t) e0 Z) I  S8 e. C# r  \
{
6 ]) N6 Q) j# O& ?' X    char msg[UF_UI_MAX_STRING_LEN+1];" k; `/ t* \2 d( y+ O, d( y" @) a
    va_list args;, T4 d! J0 g  d2 A* b. m0 j2 Y' T
    va_start(args, format);. Y  G8 x+ k3 {+ X% t9 z* x
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);- F7 {' ?2 q) O3 G" F( z
    va_end(args);
2 E3 H# K: B9 ~& S    UF_UI_open_listing_window();
- T1 a. Z; M' h! k# z+ _, q, ?    UF_UI_write_listing_window(msg);- L/ z3 a' `7 m$ B7 K
    UF_print_syslog(msg, FALSE);# U% g! @/ _4 J# Z) a) r6 A+ w
}- ]! F" U" z( j0 C0 s+ ^
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))% t' b* P, x9 N5 {% r
static int report_error( char *file, int line, char *call, int irc)1 I' a, b3 l" n* ]0 {
{) R- b) `4 B/ h2 ^9 J* b7 L
    if (irc)
$ }6 B* l2 r+ M( y% {    {
: l/ E; |7 O4 A9 Z        char err[133];
4 Y! G8 x, M6 ?* |7 t* I0 a  G# w0 J: `        UF_get_fail_message(irc, err);
$ r9 |; H  r4 q& L1 y) H! d        ECHO("*** ERROR code %d at line %d in %s:\n",
: B  f3 D- R+ Z9 N4 x. T            irc, line, file);! K% W+ W3 f7 W0 _+ \
        ECHO("+++ %s\n", err);
- A; U: M) ?! f' ^6 W. Q' |        ECHO("%s;\n", call);
# O1 ~. ~7 }# H0 O    }
* J7 k8 b2 l2 Y4 U! ^0 Y    return(irc);3 f7 z0 r! N+ R. W; y( H
}
& X. [! G. F) ^1 _& ^4 j7 ]) a2 h0 m/ c) S- o' [& O" x
/*****************************************************************************- O( @% o; q* S, ]3 }/ i) b
**  Activation Methods
& ]3 o5 s! D* |, |0 T( z*****************************************************************************/
. V5 B0 @  \- Y# T* m% T7 }/*  Explicit Activation  h9 V( V+ x: N$ c8 Z4 M4 M; x
**      This entry point is used to activate the application explicitly, as in7 }6 E% q5 ~& |1 H" V; c
**      "File->Execute UG/Open->User Function..." */7 F* t9 v* z. v) g
( p. _* ^6 w1 I8 ~. _

, \& i  h( r3 w9 ~! ?" ]tag_t oldwcs = null_tag;
4 p& o; l/ q1 sdouble origin [3] = {0,0,0};% o" w/ ~0 Q6 T# \3 \/ z. q$ d
tag_t csys = null_tag;4 O: B" u, W% G' \* r& l
tag_t  matrix_id; ' [7 q/ C1 ?  A+ m; k5 p/ G! O
double csys_origin [3] ;: F1 ^# R" j8 @% z- T% F- z
double matrix_values [9] ;0 k+ x, I5 [1 Q' U' ^
double x_vec [3];, B6 \3 v; H% R
double y_vec [3];2 m" e+ k; r. ?
double z_vec [3];: l2 q' Q9 [( h! \2 s5 s. M% ^
double mtx [9];- o( w! {2 m0 B" ?2 I) |
tag_t  mtxid = null_tag;1 ?. \: ^  Q0 B
tag_t arc = null_tag;
, ?& z9 \9 J5 e0 C1 d% xUF_CURVE_arc_t  arc_coord;7 \5 Z1 j2 U5 j) H
double origincenter [3] = {0,0,0};
+ J3 a8 o( w. S4 V. R  Wuf_list_p_t objects;
7 V! i' }& i5 l3 H* o- H1 M% A* tchar  *taper_angle = "0";
% u, i2 l3 Y& f, {6 W1 Q) qchar * limit [ 2 ] = {"0","60"};% `  d% {- e4 d
double point [3]  = {0,0,0};7 w, G4 w& L' B# \0 a  ?% d
//double direction [ 3 ] = {0,0,1};9 T, |) r" f6 H& K7 {$ ~

( w5 {9 d2 e7 u) X6 q" n$ j( j. E% buf_list_p_t features;8 d) {; y. Z. y% [7 R* j0 T
char * message = "vector";
. N' b# V% @, C5 v4 a' w! s) qint  mode = UF_UI_INFERRED ;1 T. k; O' N7 G  g; g! j
double direction [3];   x# F5 h6 m% K; [; X; v" Q# D
double origin [3];# m0 R7 x7 \; y$ g5 ~4 q: ]
int response;' o' k+ w2 a2 r: U2 \
char * cue ="point";
5 X( m) C! H0 `int mode_sel [ 2 ] = {1,0};
% B: @8 ^) X7 _int point_display_mode = 1;/ a6 @1 ]- S" m, o
double point_sel [3];   f5 H1 m9 k9 G2 ~# s# J4 Z7 b7 j
//double outputpoint[3];4 Z6 b  h' |0 O0 |# o/ d6 N( w
: }9 G5 |& F9 P8 _7 a$ n
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
, I+ F, y: [1 w+ V9 z6 H% d{/ [* o7 |  ?! ]0 A1 W( t/ X
    /* Initialize the API environment */
; x; r$ r* J! b8 D# E( X    if( UF_CALL(UF_initialize()) )
7 U+ ^' D8 A4 \1 o+ Y+ b- g$ D    {8 S+ A$ C7 A# f, ?; n6 I& x6 G
        /* Failed to initialize */
( X4 F% N$ M# [) L8 J2 m5 e        return;7 _+ k! P% B, I! g* X
    }: Z' M# u  B8 q2 N1 |$ X' ^
   
7 s' [  u2 Q3 Z- `; h    /* TODO: Add your application code here */
! B7 Y& g. H7 q. k" v) S
6 g" O3 S1 e; S' k* x UF_CSYS_ask_wcs(&oldwcs);                               8 s. a" [* o) O; C) L1 I  p
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
) m, @. a8 l) P' u5 G) G) g( T UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    / G3 {( ^! t/ I" H/ f' V
UF_MTX3_x_vec(matrix_values,x_vec);                  
5 I  o/ Q0 |4 }; S UF_MTX3_y_vec(matrix_values,y_vec);
7 {- \* Z* O! Q9 U6 G UF_MTX3_z_vec(matrix_values,z_vec);3 o5 z8 ^5 M! p6 P  Q
UF_MTX3_initialize(x_vec,y_vec,mtx);               8 A0 }" ~1 T7 I% x5 @+ l8 L
UF_CSYS_create_matrix(mtx,&mtxid);
+ |  |4 B4 i: }$ E( } UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
9 B9 t! A9 T8 K/ s& w" q) G UF_CSYS_set_wcs(csys);  
9 Q' M  W8 I2 A/ v6 M& Y
, J  M# R9 _  A8 s1 T# X$ W. [0 M, }% V4 z
l10:  m- c2 q( K$ `$ c: @3 s8 p
    uc1616(cue,mode_sel,point_display_mode,point_sel);
9 g( e3 u! s) y" h- p1 a$ K //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
7 L/ z" u9 Z. _! q0 S! d' V; F, C1 E! V  Q1 B4 X1 j6 J( N/ ~
arc_coord.arc_center[0]=point_sel[0];
7 \% W+ `3 q3 \* c: s2 j arc_coord.arc_center[1]=point_sel[1];
/ R, o1 f% S! O! p arc_coord.arc_center[2]=point_sel[2];
2 L$ d& P+ e( k1 T7 n; h arc_coord.start_angle = 0;
! ~+ L' }3 g9 L1 u4 p arc_coord.end_angle = 360.0 * DEGRA;
; b* N+ e7 F; {6 K6 M& R5 h1 A% s arc_coord.matrix_tag = mtxid;
5 C6 ]6 @0 x" U1 C0 P' |. y arc_coord.radius = 20;$ X2 J5 @0 g. q3 t9 Y% u0 @
5 U4 t% l# c, q) g
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
" \1 P5 M/ ]4 _    UF_MODL_create_list(&objects);( C& d2 u, r4 o  C+ c$ T; Q) n
    UF_CALL(UF_MODL_put_list_item(objects,arc));& O  S8 [8 |, W" r0 _5 T
2 J5 J3 G; \1 n9 f
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
7 E5 F9 G$ y2 R7 I if (response == UF_UI_OK )
0 J3 Y7 M1 s& y) b0 [9 e {, n$ ?* H( H) @9 X- S( o0 N
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));  @4 G, b/ e8 p; N! M  @! u1 J( @
}
! d* W, v) a5 {  E else8 U& j( N" E5 C6 _5 _  j5 [
{
% p# u5 Z8 A5 N  return;
3 A2 q+ J; P0 F$ { }7 g5 l* X, U, U
goto l10;
1 c4 B/ O3 n/ |. `. ^0 X1 {* }! G0 n3 ]: F! h  w
    /* Terminate the API environment */8 \3 a( K& _" B* q& m6 C4 m
    UF_CALL(UF_terminate());
8 I* O  r; n3 S( m# o5 m$ s}
/ e! D* \+ }6 ^; g8 K: A3 ~/*****************************************************************************% k2 z! s8 }0 C1 w2 g! u3 ]
**  Utilities
& `4 ]; I: R; M*****************************************************************************/
2 h; ?8 K9 k5 O3 v6 J1 H' Z( f/ G9 \8 p/* Unload Handler
% [- R3 E! j* M# V: b**     This function specifies when to unload your application from Unigraphics.
+ X/ p, A& i  s% J**     If your application registers a callback (from a MenuScript item or a4 ~  ?7 Q0 \, e" @' Y1 z- J9 K
**     User Defined Object for example), this function MUST return/ \2 R9 a4 G1 v8 m0 M
**     "UF_UNLOAD_UG_TERMINATE". */) q/ D4 ^5 o/ v+ f5 Y' |
extern int ufusr_ask_unload( void )+ t/ v$ y+ Y# g  \) B  s, e
{
$ T7 E" y. A. Y2 U    return( UF_UNLOAD_IMMEDIATELY );, T% K6 T& z+ t5 n, C& ?" x, K
}
7 f& f8 b) [& ]; A+ f5 d; ~* L  F  j+ a9 h1 a# [" g) Y+ z
) Z9 w: g- H" b9 Y3 }
8 H; f. J/ B2 l8 a7 o

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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
& D+ p0 P4 A  L
7 L% k2 g; ]) l" m: C你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换1 c) w' [' ]! _( t$ v7 i: e. _

2 p& N) M( R: K2 h. N- M/ Q这个你需要多试试,首先把你通过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);                              
( d  Q: d- e6 k7 g5 b% {% z! K: ^, Y1 pUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   8 {& W3 _$ q* u6 i  s
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    $ ^* Z8 t" A. E# g) J. G
UF_MTX3_x_vec(matrix_values,x_vec);                  9 @, ?$ m# |6 {1 @" _# B
UF_MTX3_y_vec(matrix_values,y_vec);
9 s* k: v/ G8 m) e% w3 U$ EUF_MTX3_z_vec(matrix_values,z_vec);
" _# T1 M4 A" E! T! JUF_MTX3_initialize(x_vec,y_vec,mtx);               
9 q; P, T9 B" X& t  b) KUF_CSYS_create_matrix(mtx,&mtxid);. L9 o) h  n& b$ v" v
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
. f2 g% P: B% Y3 V$ @2 }3 S5 QUF_CSYS_set_wcs(csys);  7 W& T9 d; n. k+ h* ~, P
* h& i$ t  F" r3 u& c- x
) C$ p* }$ ~7 T( b8 G% a# \2 n* w
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
7 H$ l+ l6 W0 f* G7 j( X, t  e8 y! p/ |- o; K% E% W; k
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了