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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。; b# f% L- U7 v1 e+ ^
    #include <stdio.h>( E3 D- A5 k3 V/ w" H$ p
#include <stdarg.h>
$ |' c: W2 f: K- @6 s#include <uf.h>5 R% n$ Q  ^/ Z% S
#include <uf_ui.h>
+ g2 @' ?9 l# S#include <uf_curve.h>
. U+ }8 A% u* V1 H) L#include <uf_modl.h>
8 C# P4 a% a6 p' G5 s#include <uf_mtx.h>
7 S8 X" S# j$ H, H7 T3 @#include <uf_csys.h>
2 G8 ]) Z+ x. A6 Y) w  _) k+ p- `
static void ECHO(char *format, ...)+ Z; D# v& K5 }3 |  H
{
/ z& @5 G2 [7 s. Y4 m0 Q    char msg[UF_UI_MAX_STRING_LEN+1];& }# N: P2 `7 n
    va_list args;- z; {! i8 S9 L1 `9 q& d
    va_start(args, format);& Z/ p; `& ?7 d7 s  |
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);4 I+ q% G$ _0 Y- D3 j1 Q6 x& S$ N
    va_end(args);& \2 I- t2 ~# p! r) X
    UF_UI_open_listing_window();
  t% q' f, h. a2 Y, P* `' n2 c    UF_UI_write_listing_window(msg);# u/ c7 y# s! z0 {% H
    UF_print_syslog(msg, FALSE);) e/ I# I# `. b" F
}" |( N/ N$ D. |/ I, M
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))9 u* k/ w+ Y7 i! f) O
static int report_error( char *file, int line, char *call, int irc)* {+ m3 u# K, d8 ?5 g
{
, c6 w& X! b( ?+ B8 X    if (irc)! @' B  ]# e8 N, i  k/ H
    {( l# f* `, d- Z) ^
        char err[133];
. H3 |. Z6 K# D) f2 r+ t$ X        UF_get_fail_message(irc, err);
( E. ]  ?7 {" v5 E% d$ J  F* }        ECHO("*** ERROR code %d at line %d in %s:\n",5 k) _5 L, o$ j, t* f4 J! ?6 }/ T
            irc, line, file);
+ O$ g7 a4 J& @& _$ [. ?$ Z4 Q: O5 i        ECHO("+++ %s\n", err);% H% n2 N$ v; q( v! D5 p$ b
        ECHO("%s;\n", call);
0 ]% z0 m, K) X$ F    }
- p1 K/ c8 v: e9 e, m- Z+ q. f    return(irc);
3 H' D  i, K  Q5 J}
, }9 H, n  N( Q  x
: v2 a# w$ K9 e/*****************************************************************************
9 b+ }9 E9 q; \0 P: g9 U9 S**  Activation Methods
! }% h) I  J7 N& `*****************************************************************************/
- {& x& w, o# m0 ^/*  Explicit Activation) x" x9 s# u! _, [; Z& b
**      This entry point is used to activate the application explicitly, as in
1 E8 _; [  ]7 I**      "File->Execute UG/Open->User Function..." */# w) w. t% B7 M" X
6 e5 @: h4 D7 \  H( o% N2 u, F
5 }" @  E( j- r; q& }5 S
tag_t oldwcs = null_tag;& e1 f# x" @; L, t# S3 ]! K; g
double origin [3] = {0,0,0};1 t& l+ C5 H; t' q
tag_t csys = null_tag;
! r1 u; ]$ X( a2 o% ^! I- y/ stag_t  matrix_id; 5 G% z4 c. e7 P$ j: [
double csys_origin [3] ;9 w" v& X8 n- _7 ?4 u. ]. {" H
double matrix_values [9] ;
5 |: I1 y& f1 \; B! @9 r: Q, k$ d; U  Xdouble x_vec [3];' l) S3 i" g7 w8 j2 v
double y_vec [3];5 ?" v% }7 x# Z% I
double z_vec [3];
" l. b) v5 M" N4 m5 y( I9 Ddouble mtx [9];
" X  z4 n- q4 x* ]2 _tag_t  mtxid = null_tag;
1 i7 y, |, M7 Mtag_t arc = null_tag;7 F! w- E8 x( c! I- B: Y% k$ f
UF_CURVE_arc_t  arc_coord;
$ Q% b8 P( z4 e7 A6 J5 H) v& sdouble origincenter [3] = {0,0,0};8 s5 `+ U. F, c! a3 @8 r
uf_list_p_t objects;0 p  y% Q: F+ n
char  *taper_angle = "0";6 \3 q- |+ r/ [
char * limit [ 2 ] = {"0","60"};
3 r: m% Y7 n- h+ Y) X) qdouble point [3]  = {0,0,0};8 k3 Z- j! T# P7 ]+ y7 s" a
//double direction [ 3 ] = {0,0,1};& g3 c2 p! ?: J0 z  Z2 R% o0 i

. w0 G1 o1 v/ K7 _uf_list_p_t features;1 u+ k0 Q0 W/ {, C9 B' x
char * message = "vector";
* h/ @3 A; u4 G# {1 ~+ f" Aint  mode = UF_UI_INFERRED ;
. m" d7 x$ o0 x$ N2 s7 Y/ C/ v: Z# Odouble direction [3]; 0 ^7 h( `+ Q: k
double origin [3];* V1 a& F6 x7 D3 Q
int response;
% Z3 u4 R, G( v7 g) Cchar * cue ="point";
6 j3 L- ?" K$ r% b' qint mode_sel [ 2 ] = {1,0};
2 L9 P4 Y3 J' Y" J# h, u& Tint point_display_mode = 1;# S' P, O$ U; |. x
double point_sel [3]; ; f3 n+ t6 w9 @! v/ {6 H" B
//double outputpoint[3];
3 v! V( i+ i# ^/ c  `; R, h2 Z) g2 t3 K) r# }
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
- |. I7 D( w9 b8 q: ^$ o) E{; s, _+ x: P0 n! X# z0 o2 `
    /* Initialize the API environment */
" O1 t9 a, v/ a    if( UF_CALL(UF_initialize()) )
" z0 J& @$ B( c9 U' Y  |& @, R- Y    {
1 g( _& v1 x% F/ Z3 C; }        /* Failed to initialize */
3 }9 I% C4 N$ v2 E# Q! y. m/ l        return;0 \( [5 f) b) {
    }6 W- i5 z( X6 f. F, r2 L
    ! E; `" }3 i& \+ K
    /* TODO: Add your application code here */5 b( W) A$ W. x' O

: o3 W1 E" d2 L3 u UF_CSYS_ask_wcs(&oldwcs);                               , H  m4 P2 }. c5 q6 J7 A
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
- E& s: C: t, h" g: l5 v1 [! Y, ` UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    " {5 Q6 k, t7 D& a# c2 Y1 v
UF_MTX3_x_vec(matrix_values,x_vec);                  * T6 }6 d6 `, s( t) L
UF_MTX3_y_vec(matrix_values,y_vec);
" @: B' f: R8 Y! W- b1 I3 o, u1 H UF_MTX3_z_vec(matrix_values,z_vec);
6 e8 M4 p' U8 V3 L. s# H UF_MTX3_initialize(x_vec,y_vec,mtx);               
( r3 F) c/ }% ^- I UF_CSYS_create_matrix(mtx,&mtxid);
0 K7 ^  r- T+ V# B UF_CSYS_create_csys(csys_origin,mtxid,&csys);    ; d' t1 Q( d1 ]: I+ Y( D0 N
UF_CSYS_set_wcs(csys);  ' ?: E7 [3 m3 ~* S, s' C) h

+ t/ I( G3 b" t+ ^: ^" s% S# E' P& G+ E/ |/ c2 ^1 R0 f* v; B
l10:
* s1 L2 e! W, G0 @* a/ \    uc1616(cue,mode_sel,point_display_mode,point_sel);
2 \( D6 n, |; s4 ~1 A. @ //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);4 t. g" _7 B; a* o
" o, d5 q( i" S( O5 d: G0 S
arc_coord.arc_center[0]=point_sel[0]; 4 }3 ~) H. B  r/ q
arc_coord.arc_center[1]=point_sel[1];
& H# q6 J1 i$ x6 s% Z8 Z arc_coord.arc_center[2]=point_sel[2];
* l6 m; o8 ^/ F8 L8 P4 r0 N+ u# d: I" K arc_coord.start_angle = 0;
5 \, k9 I% ]& r7 Z2 D) O% c arc_coord.end_angle = 360.0 * DEGRA;5 Y& T! u3 S* _  b" N8 b
arc_coord.matrix_tag = mtxid;+ X/ b7 N+ h- _4 R/ ]
arc_coord.radius = 20;
6 _4 Q) j7 W& u7 j2 Y$ U! k* b
& R3 E# A' _9 Y4 i  [' w4 r+ A UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));/ M. d3 C! `3 _0 z3 `- }3 W. b
    UF_MODL_create_list(&objects);
4 N1 ~: q$ J% r8 [+ W5 X2 K$ U    UF_CALL(UF_MODL_put_list_item(objects,arc));* s/ c; j0 d2 ^: E6 p$ q5 B6 D/ |
- B4 s0 o6 Y7 f6 t, I+ @
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
2 D& [$ p8 t5 d& U' n" Y if (response == UF_UI_OK )0 O- @; m7 Y* q# y( y& q3 F
{
# t) A! W: K2 |' w& l5 u  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));2 m- b6 C- R" j
}) Y2 G- ~4 `9 e/ P
else
! u4 N/ k% G" D {
# V. ~2 V; N( J% C" i  return;8 I- y. u" E3 @  S0 F  h: ^, c
}
4 D* y% |) [3 H+ I* m, S" L goto l10;# j5 N; K1 c& r8 A5 z8 C* R" O' v
; z  o% G3 ^3 W9 r+ W
    /* Terminate the API environment */% h( s$ z7 D3 s; v0 f- v
    UF_CALL(UF_terminate());' T) O- H# K! V% A* F# f
}/ F1 ?; V! E+ d* j( m" p2 E0 J
/*****************************************************************************. ~: o! ?3 u- N
**  Utilities
- `9 {6 e) ~# _5 w8 |$ d, |*****************************************************************************/
! O) y- u4 A8 f4 L/* Unload Handler- m' _# t+ e! w4 W( y+ Z3 j
**     This function specifies when to unload your application from Unigraphics.
, }- I8 F+ U4 s& q1 ^7 u**     If your application registers a callback (from a MenuScript item or a
# k8 j( T, V0 ]& u8 V' p**     User Defined Object for example), this function MUST return3 Y% \$ x$ c: m0 s8 z+ N. m
**     "UF_UNLOAD_UG_TERMINATE". */* n" s& Y1 ?# h9 D
extern int ufusr_ask_unload( void )% B# j3 |9 X$ R
{* f& F% t' ]2 ?5 X) y
    return( UF_UNLOAD_IMMEDIATELY );
0 S2 o* N8 V( F2 j}8 ~5 S  O/ o  _

9 T4 K+ q( b1 I( D- K3 c$ D) D3 A( l0 v: }- ^8 X4 y% [

! N4 C9 i4 H; N: f! V0 Z5 E

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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
8 L$ y8 H% x# l4 a" h. D  j3 O# Z) B9 c
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
* J' J9 \( R# e! U8 w. n+ |3 y0 y2 g) B* m3 ]! U# l2 O
这个你需要多试试,首先把你通过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);                               * {$ `" j2 Z( s4 s
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
, w. {+ I" L9 @& BUF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
# h; B8 X9 J( _$ H4 D1 fUF_MTX3_x_vec(matrix_values,x_vec);                  
$ k) _$ V/ q! T* c+ G5 jUF_MTX3_y_vec(matrix_values,y_vec);1 T5 ~: O9 T3 u: O
UF_MTX3_z_vec(matrix_values,z_vec);
8 _8 r% ~, u% \" D/ m7 D' O! R; SUF_MTX3_initialize(x_vec,y_vec,mtx);               
4 p4 x. J" _- z/ WUF_CSYS_create_matrix(mtx,&mtxid);* N3 _; k% Z% k* [- }- I4 q7 N
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    ' |: Z0 j# P* v1 }* c  I6 j
UF_CSYS_set_wcs(csys);  2 f+ m3 ^$ t3 w# S0 l
) Y( P% S( V# c2 a0 ]3 V
5 f! e9 T1 P$ V% Q) a" @
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联3 _5 A9 Y2 _: X0 L: b- R+ P

" P1 t! R/ y% s不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了