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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。2 c. B! v/ F# v# P9 K% ~, b* ?% H$ d
    #include <stdio.h>* D2 B2 H/ `) W$ o( x; y  t7 w* h3 t
#include <stdarg.h>
& ?7 f) T- [- F#include <uf.h>4 i3 n+ Q7 a. J- ~  H
#include <uf_ui.h>! \9 @- w* w. L7 f4 `) V3 a( Z
#include <uf_curve.h>- w1 \" L' W6 r, \
#include <uf_modl.h>
: |% `7 m/ \/ D; e" H#include <uf_mtx.h>
0 I' ?& b2 l/ Q#include <uf_csys.h>( j" r# m( y: {( V! W. l) T# H

- c+ D3 G: d: Lstatic void ECHO(char *format, ...)
& \+ O8 v8 [) w% Y! ~% X{
' D9 W  D  H0 ^" E    char msg[UF_UI_MAX_STRING_LEN+1];0 z! P& s! x+ @
    va_list args;& B; Q6 s6 @4 h% c
    va_start(args, format);0 u+ Q( ^; \' e" m& v0 Y: p9 Y  O
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);) H+ Z* n8 u: N) ]
    va_end(args);9 B% r. }) i& B+ d
    UF_UI_open_listing_window();8 d. G* E5 U/ C5 E
    UF_UI_write_listing_window(msg);
, [0 |2 k5 k( L5 |- P    UF_print_syslog(msg, FALSE);
, D; A8 X+ Z+ X}
# Z" t  T" t. M9 B1 ^4 r* ~#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
* ~1 D- w: r& G; c* Z, Q* Y8 sstatic int report_error( char *file, int line, char *call, int irc)- y/ ]( N0 J9 w" @" d" i/ k4 W) O
{
. W! J% @4 F7 U5 d5 o    if (irc)7 v1 a% @; q( l3 g
    {
- q. _7 ^2 c! E  b1 m) G. B        char err[133];# g; Z! J: F/ N& }" b  w6 q$ H
        UF_get_fail_message(irc, err);: c; c' d" C& D. E- q( q# R5 l
        ECHO("*** ERROR code %d at line %d in %s:\n",& D! F; L% A* ^6 I. {1 `8 P0 T4 m
            irc, line, file);
6 M- _4 r1 R7 i$ q$ S. v        ECHO("+++ %s\n", err);
# Q! G! C( q5 I3 T" Q        ECHO("%s;\n", call);
% X" d- \# _9 ~1 R+ ^+ f% S    }
/ o& B' k  \, w; o    return(irc);1 }  P& T1 T/ ~/ r& ]
}" d; c) [3 J2 v& \. {9 H! V& o, Z

1 y1 i8 V! t7 |3 b6 d/*****************************************************************************
0 Z. x6 m& H6 q7 F**  Activation Methods
! g/ P% @- w  y6 W*****************************************************************************// @* F+ E4 t+ c! Y3 q% b* B
/*  Explicit Activation
( O; S/ N) I: F" G3 u**      This entry point is used to activate the application explicitly, as in! [5 k1 N5 V* T: }
**      "File->Execute UG/Open->User Function..." *// C% K$ W; b; u9 k" Y+ u

7 |. P- h) `5 f9 o, Z0 F" s2 u
& o5 Z  u3 k. e! c* mtag_t oldwcs = null_tag;
3 ~. x8 f/ b7 _5 T1 y; t0 idouble origin [3] = {0,0,0};+ l6 i) B  s1 y, y
tag_t csys = null_tag;0 \: n, E1 A: h, Q3 K
tag_t  matrix_id;
5 I% {4 C0 N9 Edouble csys_origin [3] ;9 ?- W% ^1 A. c2 o/ u: K$ z
double matrix_values [9] ;
" K9 Z* E/ d5 R6 ?double x_vec [3];1 |! {: J' {5 v, {5 q
double y_vec [3];! E3 h. P# H& f' ]
double z_vec [3];: Y, j( K; v9 V5 d- a2 I
double mtx [9];
9 l) U- `! ]& t. k; Otag_t  mtxid = null_tag;- P6 l: ?0 K( I6 p" Z. \
tag_t arc = null_tag;
  R0 Q; H: X, ^3 E5 E$ @5 QUF_CURVE_arc_t  arc_coord;
8 T  N4 Q0 l1 adouble origincenter [3] = {0,0,0};
; P" G! p$ u$ K5 [; ^: Fuf_list_p_t objects;
9 l+ T5 m7 g0 I2 A0 r- qchar  *taper_angle = "0";0 {* Z2 v% L, m1 |& V7 r0 K
char * limit [ 2 ] = {"0","60"};
( c6 V: ?3 ?. M% T# u3 @double point [3]  = {0,0,0};' |1 }9 U6 l1 ]
//double direction [ 3 ] = {0,0,1};
7 f" n, P. z; e3 b! i* J
8 D, t9 N$ q% O6 O0 iuf_list_p_t features;
# m% {1 i2 R* A4 |" ?6 hchar * message = "vector";4 D- C6 W) r9 u! R3 d/ [  G. i
int  mode = UF_UI_INFERRED ;
0 J3 C3 ~$ t& y" Y: W; Kdouble direction [3];
7 C: F" k. P9 j% ^2 R1 w/ d8 Y% adouble origin [3];
6 U' {! l7 v, q( Zint response;: K' R9 W8 N  ]; ?6 P# O  ?. {
char * cue ="point";
) `4 {# s- T6 |4 C9 |int mode_sel [ 2 ] = {1,0}; 0 D$ ?3 K7 K5 `
int point_display_mode = 1;
4 r' D% N3 T8 @! V# Odouble point_sel [3];
# N3 n6 d. v- `. c//double outputpoint[3];9 _! p: u! @) A9 l# h

) J7 O% q* P" s1 \extern DllExport void ufusr( char *parm, int *returnCode, int rlen )( e5 V( l! n# F7 I7 |, C7 U# A
{0 H  Q- A' e4 u5 I  U2 j
    /* Initialize the API environment */
  v& U# e* V7 ^8 p5 Z8 a1 Q& k    if( UF_CALL(UF_initialize()) ) ( L! }3 H3 r( ~% s. t3 }
    {
/ e9 ?/ B9 R) _8 F4 S        /* Failed to initialize */
3 t! n3 ?9 o# I. g1 |' j9 _2 W) u        return;
/ s2 I0 U6 |/ W) e( W    }, A5 l, @( y7 P0 l
    0 F4 P3 P6 r6 C# [2 i
    /* TODO: Add your application code here */
' a) S: o7 }; t; K6 P
/ c7 \  x' r1 ^8 N$ x7 I" \ UF_CSYS_ask_wcs(&oldwcs);                               / {& ~* N! ?5 {* O
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   * X6 \2 V$ z( e& c
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ; M( N  t( @  Q5 \- P( I' D
UF_MTX3_x_vec(matrix_values,x_vec);                  + x# H+ }4 Y% z* k0 r. g1 F/ o
UF_MTX3_y_vec(matrix_values,y_vec);# y: H* `2 R: g8 c; b
UF_MTX3_z_vec(matrix_values,z_vec);
0 x! l% Y; F+ _  \+ O) B UF_MTX3_initialize(x_vec,y_vec,mtx);               - U; z/ J- j7 I1 q6 V. c; ^8 e  _
UF_CSYS_create_matrix(mtx,&mtxid);  a, |$ ^) R! M6 i0 ^3 e
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
3 C9 d: |: s9 \) l4 |6 S9 x7 E$ U+ X UF_CSYS_set_wcs(csys);  
& N$ b, o$ ^6 {/ E
* t1 e0 Z; `9 z3 m
+ O: S+ Y0 `% j1 `" U! K! wl10:
6 q0 F  C  E7 K% S0 u( \    uc1616(cue,mode_sel,point_display_mode,point_sel);
/ a, ~- U( Z2 a! S //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);. c9 t1 x0 T# N# d" n0 c* @
$ K( V" C+ s  `6 J
arc_coord.arc_center[0]=point_sel[0]; 5 P& x5 {  N/ t
arc_coord.arc_center[1]=point_sel[1]; + P; X0 N3 ~( e2 Y
arc_coord.arc_center[2]=point_sel[2];" x6 S# D+ @  W5 P6 |
arc_coord.start_angle = 0;, K) t4 e* c+ k  \, _9 @
arc_coord.end_angle = 360.0 * DEGRA;% K, b' M$ y$ P
arc_coord.matrix_tag = mtxid;# v7 c) ~0 n# ^/ @  A
arc_coord.radius = 20;' B5 O8 p: R" `

1 n" Y# t- h! P: P UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
# |* E+ H" J! e: X& Y; b9 I' ^1 }& @    UF_MODL_create_list(&objects);
; |3 N9 @3 E( p- \/ h: v7 e$ X    UF_CALL(UF_MODL_put_list_item(objects,arc));3 m6 U9 f0 I2 l' K  ~; d
7 ]+ i+ a1 Y* o) v
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);( D, G. m; l7 {
if (response == UF_UI_OK ): Z1 D# U0 R7 c% z
{+ Z) ~* n( A) p! q
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));( z( m7 j( Z: u8 J7 D7 \
}, |, G' c1 @, W, f1 E# k6 F7 N1 ?
else% u+ N/ i& I% R! }6 p; F% h
{1 h+ F$ n' N, E+ _, @0 H( A
  return;* [- F0 p& A1 Z( K8 a( x6 A7 k. F
}" _" W4 e: Q8 q
goto l10;' F; k2 f, z0 y8 P" F$ I

9 n( g. h+ l( j7 S, V    /* Terminate the API environment */3 p3 D  k% @$ z9 ~7 q* I3 X3 Z# k
    UF_CALL(UF_terminate());
0 A0 D, v* `8 z}! f$ T% v. I5 x8 Z# z5 Q
/*****************************************************************************. y5 C/ B) k$ d
**  Utilities0 b0 S# ]' e1 p- D7 ~
*****************************************************************************// c  f4 O- }- C; K1 p1 [" |9 l
/* Unload Handler& V7 x+ @- x% @/ _9 p/ u& R" G
**     This function specifies when to unload your application from Unigraphics.( d$ z5 v; v6 p# L* D3 ]
**     If your application registers a callback (from a MenuScript item or a$ ]* ?7 X7 Z: p! d
**     User Defined Object for example), this function MUST return$ m* J( S* t$ u) @6 }
**     "UF_UNLOAD_UG_TERMINATE". */
- T" v0 T7 c. T& v5 V$ u9 Lextern int ufusr_ask_unload( void )
- x; i: Y, @. ?0 P{
- w) z) z' I7 }. @8 o$ V    return( UF_UNLOAD_IMMEDIATELY );
9 M. d& q, n5 w' V: J}
0 B5 o( R" U' a, _' i: N! f+ ^3 Q+ {7 W6 |

* E, h$ R. S) o
# p! R0 Y8 h% u7 |& p7 F) e, p6 n

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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) t, r& d2 D! e& x0 F4 r
+ _7 G+ K) Q! v9 P  o. \3 L
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换. ?. l5 ?0 a+ U6 \1 E" f' `. m; v

& a& e/ ]/ i; ?# P8 U这个你需要多试试,首先把你通过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);                              
% l3 ?! M1 C6 U; w4 lUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
* f1 \% |$ Z. p6 @6 r9 ?UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    , X7 {7 x8 W/ J3 E- T
UF_MTX3_x_vec(matrix_values,x_vec);                    X+ ]1 Z0 v- E. e6 i
UF_MTX3_y_vec(matrix_values,y_vec);
; c1 ~" c7 f1 U0 AUF_MTX3_z_vec(matrix_values,z_vec);  Y3 q7 w9 R) k6 {' f7 v
UF_MTX3_initialize(x_vec,y_vec,mtx);               4 {) M7 k: ]9 X2 I
UF_CSYS_create_matrix(mtx,&mtxid);2 Y% ^) I8 }5 `- _& n
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
- G: U8 z9 ?& z8 I' [  ^UF_CSYS_set_wcs(csys);    \0 g) w- A9 Y/ `

9 i# |" s8 @  N& M
3 u6 {" p1 \8 E- R, q1 |! b这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联6 G9 S2 z2 l) B( }2 n. b) B: [

! l" D" r( S; B* x/ j1 e不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了