PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
5 V2 B: c1 Q. ?0 V  X    #include <stdio.h>/ g' z- Q8 M( R# c6 n
#include <stdarg.h># b$ l7 {( x7 D5 l/ F( n
#include <uf.h>7 p$ x' h* P7 t
#include <uf_ui.h>* X4 l% o; I" P( r6 a3 B) E
#include <uf_curve.h>5 ?) _) T/ U8 i1 D+ o; }2 |4 r
#include <uf_modl.h>
, Q9 {* B( r* G! W* A9 X2 U#include <uf_mtx.h>
' D* `7 Y% M1 G1 M#include <uf_csys.h>' J$ i" S& E: Z, y3 ?# h: f( R
# f( u3 i( U, s7 f# x9 S
static void ECHO(char *format, ...)* g$ s6 D+ p! l' o0 Z6 R
{* [: R& x/ T& U- m3 x! O- f
    char msg[UF_UI_MAX_STRING_LEN+1];' K. f; x! \) x8 a
    va_list args;
  G0 l! A7 f+ c+ v9 O+ f( b: I    va_start(args, format);
% H! K; w6 I5 K' v4 [) P1 W: [    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);7 u2 a8 p- I! b4 n5 p8 F
    va_end(args);5 {6 y- Q4 d: T. D! s0 M
    UF_UI_open_listing_window();
* q! @& Z1 y4 Y9 @3 c( e) d5 x3 |8 S% u    UF_UI_write_listing_window(msg);6 F0 i# Z+ c% ]2 d  o
    UF_print_syslog(msg, FALSE);6 y2 Y" M7 r2 ~) J
}
2 d: P: \5 b; Y2 [. H* \) `#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))0 x1 A+ }! c8 s: \& M  B! h% T
static int report_error( char *file, int line, char *call, int irc)
+ [/ }8 P; {; Z) p7 w{' s, J) e! M: i, X& R5 Q8 a
    if (irc)
6 m3 f9 n  s( z0 W    {
4 X5 U+ N. l7 k; m! F% m        char err[133];# Y- c. B/ D2 Z# T2 X
        UF_get_fail_message(irc, err);3 O  v3 O0 v2 S. W' d" }- B7 k- d8 Q
        ECHO("*** ERROR code %d at line %d in %s:\n",
8 T# C1 \! E0 v* \# W            irc, line, file);) C0 t7 S8 C* \( @# W3 d
        ECHO("+++ %s\n", err);8 T$ s1 ?3 J5 J. q
        ECHO("%s;\n", call);
  b0 H! \3 R: a( s. S/ |  _    }
( ]2 g0 f9 h: I9 F" x* @    return(irc);! Z8 ?( z6 E; E
}) \& V- O4 J3 K: j# L

2 y2 N  }& `9 i. J3 F( T9 C: \2 H2 U/*****************************************************************************. S" _3 x) I4 w- V3 @
**  Activation Methods
# `9 R& ^7 E& g3 a" T( t( `*****************************************************************************/7 s0 _6 x5 `% `* v6 O+ R: U/ C5 m2 e
/*  Explicit Activation
2 i2 m$ d) H- o1 V**      This entry point is used to activate the application explicitly, as in- K* F  M7 X) Z2 v
**      "File->Execute UG/Open->User Function..." */5 E; \$ P, K% p" r" r

) B" U8 F1 D8 E9 L
8 ]2 p" p* v* f& G6 z$ Q$ T$ Ftag_t oldwcs = null_tag;" s4 Q* D& B5 D( S7 M/ L' F2 h: H
double origin [3] = {0,0,0};! R: b$ h  M) e0 ^" s4 ^9 c
tag_t csys = null_tag;' k9 q8 z% a/ w. ~, {* f) k% ~
tag_t  matrix_id;
! D! ~# p4 U( ]- t- Ydouble csys_origin [3] ;
3 U! F, _, y  ?1 M3 G: E# Hdouble matrix_values [9] ;8 ~* Q& h3 @4 g) d' W  u
double x_vec [3];
  O6 e" b# `+ X0 idouble y_vec [3];0 K) S/ g. [% J( C  ]8 p+ I
double z_vec [3];5 f3 r2 x4 P  H4 U" B+ e
double mtx [9];, s! m$ l9 q7 f
tag_t  mtxid = null_tag;4 g' B( w: q/ K" l
tag_t arc = null_tag;
+ P2 Z0 l$ g* H8 W9 a( o( AUF_CURVE_arc_t  arc_coord;7 M+ Q% q5 D8 [9 y  a3 X
double origincenter [3] = {0,0,0};1 z0 f) p% ~, t
uf_list_p_t objects;
) e( I4 w' Y* ?2 i. v8 e9 ichar  *taper_angle = "0";: U0 S2 m( i5 i# Z* ^& w
char * limit [ 2 ] = {"0","60"};0 f' W" Q4 L4 V' O) E
double point [3]  = {0,0,0};/ s+ I% X6 V5 J. z$ `7 V( ^/ L
//double direction [ 3 ] = {0,0,1};
+ P! q6 c+ N3 ?: x' D& V, j4 H  `# z/ i+ c: s
uf_list_p_t features;
4 O1 O% _5 v/ q7 \6 Bchar * message = "vector";4 e# ^( u0 Z& y% L+ n( l. _0 ~  C
int  mode = UF_UI_INFERRED ;# ^$ w  q0 _. K- u* x
double direction [3];
% y  C) k7 `- l9 Z- c" Y+ l( ~' }0 edouble origin [3];
$ ?- z7 q/ r3 R% d7 aint response;
0 I- K% ^. c+ o5 y; v* Uchar * cue ="point";
% y- Q  D& R9 m- l6 `int mode_sel [ 2 ] = {1,0};
2 g. ]8 Y) N5 ~' ]# t0 x1 Fint point_display_mode = 1;
& ]) o  i/ Q  E; X# v  Z/ Ndouble point_sel [3]; 3 V' v8 T# z( E( i2 d; J. N7 O
//double outputpoint[3];! y) L. e8 [! a1 Z+ Y

' c% Z: d: O8 U5 {extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
2 c* K0 z0 Q" Z/ Y. @% x9 r+ d{/ o' a& |. a  A
    /* Initialize the API environment */
- ?: A' [) A$ B, F    if( UF_CALL(UF_initialize()) )
0 N) H8 j9 M$ z9 N4 h    {
$ v" G* M  B. {# m9 m        /* Failed to initialize */+ g9 v  {. x2 Y5 d) j
        return;1 B! Y8 n* A9 {8 A
    }
$ X% R& H! Q5 a0 A+ }: l* |3 x   
) S( K6 K3 q6 ^; R- E, F  a  |    /* TODO: Add your application code here */5 L3 y: V" N5 C8 u( s! e# p8 P

* O% R, S2 y; j+ B% Q; }+ Y7 u UF_CSYS_ask_wcs(&oldwcs);                              
" G% v' g6 x- i* } UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);     j$ g' E9 R8 M8 x2 {
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
6 |9 _8 |2 y7 h8 f- ]4 N UF_MTX3_x_vec(matrix_values,x_vec);                  , o1 o% _# `5 V3 M- s6 M0 g; N5 Y
UF_MTX3_y_vec(matrix_values,y_vec);- J6 Q1 Y! ^6 u$ i/ @( p
UF_MTX3_z_vec(matrix_values,z_vec);
& A; _" K. t6 S5 `# ]! C' c# b UF_MTX3_initialize(x_vec,y_vec,mtx);               
1 \) ~/ b) r5 Q- ^2 T1 N7 _3 Y UF_CSYS_create_matrix(mtx,&mtxid);# s, ^) D* Z3 V" r9 |1 v
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    8 [' a  d8 g& A
UF_CSYS_set_wcs(csys);  ; [* A7 c; d1 u8 d
5 `% J' \- j; {+ Z3 S! E$ K3 I4 x

4 u& l; h/ l: Z, X1 gl10:
! k0 Q) R  C. f1 J    uc1616(cue,mode_sel,point_display_mode,point_sel);
6 h2 F/ r) m/ a( q //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);  m# T7 N* P! G: k; b

# q: f% d% A4 ]% n( ]# y1 p; ^ arc_coord.arc_center[0]=point_sel[0];
' M+ r1 F2 J9 {5 n" Z arc_coord.arc_center[1]=point_sel[1];
8 t9 k' W) C- k3 N% Q arc_coord.arc_center[2]=point_sel[2];
. e% f( U$ S+ h: o arc_coord.start_angle = 0;
. k+ `% b% h" E. j$ k& z6 q arc_coord.end_angle = 360.0 * DEGRA;, j- k+ v8 e$ F: p! M
arc_coord.matrix_tag = mtxid;
! O* v* k' G' @5 _! Z arc_coord.radius = 20;0 ~. E+ f% E5 _* g

4 z! d0 {$ J6 H: z2 X. x UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));0 B  P: B" G$ E% z
    UF_MODL_create_list(&objects);; F+ r4 A6 b# @' y7 y5 a( \# B
    UF_CALL(UF_MODL_put_list_item(objects,arc));
4 D/ ~$ w3 H0 w+ n
  k6 Q5 G$ @0 _9 ?6 }2 P( a- `, [ UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
7 u1 A+ j8 u$ j9 K# h! g; Q1 g0 n8 b+ d if (response == UF_UI_OK )
( ^) d. P; m& |) m" ^ {; U6 X- p0 ~+ v( J4 O% s- ?% g/ _! W
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
. L! X3 c5 f& T! p }* O- E( [, t! ~  @
else
" l) |( Z( z- p5 k/ z8 @2 S {
7 Q/ ?2 I2 r9 O$ @! C& V* E! \  return;* x7 Z1 h7 N/ ]: A
}: U5 E4 ]  O/ }; C" `2 B
goto l10;/ Z) I+ ~) s4 N" D+ W5 S& e
+ e  f- a$ U$ T: Q: W7 u( e
    /* Terminate the API environment */
& p8 \; Z) X8 ]  g5 n# [" z1 D1 \5 t    UF_CALL(UF_terminate());8 U- O  ]/ U3 \1 m! {
}
4 r. C3 ?" p) [4 U/*****************************************************************************
1 a3 ]7 r6 R  t5 D: H( e**  Utilities3 l" c! {9 w  X& \; ~7 T
*****************************************************************************/' W: y+ S' k5 P7 v: d: u
/* Unload Handler
) o* J/ |- j2 g/ n7 ~( s4 f# e**     This function specifies when to unload your application from Unigraphics.0 J& C( `' j' u( U
**     If your application registers a callback (from a MenuScript item or a& d' P3 n5 h# @
**     User Defined Object for example), this function MUST return
3 w: Z2 v6 b* n**     "UF_UNLOAD_UG_TERMINATE". */
/ S/ U; Z' v( n: F7 O( Vextern int ufusr_ask_unload( void )
4 {( ^! |' K. @0 Z% `{
- @7 A, {2 O! w& X- y    return( UF_UNLOAD_IMMEDIATELY );% C3 a, s; t) c0 {9 H4 V( e% L
}1 m/ g% U# A8 q1 d) K4 y

1 I. I9 K: @$ B, I1 K5 n& V! O- Q# W4 [1 W9 X- U* E

! h; c) k: W( Z

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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$ {2 C3 [  |* ~# I& S3 |7 {& ~
8 {5 R  [4 y" Z7 B" v- e
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换/ j! B4 Z: \- ~5 M

  L+ \5 W  m5 u% l$ y这个你需要多试试,首先把你通过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);                               9 y5 T" C0 q9 Z) Z7 u2 v
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
* M" B0 g; H. t0 f& z; u; g5 k/ nUF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ) |8 ?) v. Y' X# ^9 c
UF_MTX3_x_vec(matrix_values,x_vec);                  0 v5 E/ t$ i* O' C$ I
UF_MTX3_y_vec(matrix_values,y_vec);
9 l0 w7 I: u7 w( t, Z' B# zUF_MTX3_z_vec(matrix_values,z_vec);
# H+ u( F) A, _3 y1 A4 UUF_MTX3_initialize(x_vec,y_vec,mtx);               ! p) Z: R! V! s! V: K4 \
UF_CSYS_create_matrix(mtx,&mtxid);! [: s# S' u) Q! a2 }
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    * g2 L, X* y" Q- A9 x" \- ~9 D
UF_CSYS_set_wcs(csys);  
$ s0 s% r1 C6 a
5 v# N7 Y* Z: s5 c5 y% L! P! D# ]* {. g0 @6 ^: ~
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联# o8 p$ K) @; n+ K/ E7 Z4 d
5 j- {2 ~2 m' r: b9 {5 [
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了