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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。; k3 u! b. x2 s: s' K) L" o# f
    #include <stdio.h>2 y/ }, U" t8 V3 w. Z4 `
#include <stdarg.h>
: P' E+ n# w0 G; e#include <uf.h>; t' n2 Q8 q4 o0 Q+ u( L6 }% b2 E# k
#include <uf_ui.h>
* v2 O7 B' H$ `4 e" T2 K#include <uf_curve.h>
: B. y2 D( ~/ J1 }$ N) }#include <uf_modl.h>9 l# Z& c1 o0 i" g1 a8 `
#include <uf_mtx.h>5 @" ?6 Y- X# z& f$ Q( A. A# W
#include <uf_csys.h>5 m8 J/ u; H7 t7 l6 [
: c6 [  ^5 Y% W
static void ECHO(char *format, ...)
' ~" w# X& ]% y9 s! h: Q& P{
1 G& z2 `* S- G% r    char msg[UF_UI_MAX_STRING_LEN+1];
. n( x& ^$ V2 P7 M2 E    va_list args;# z. I, s3 B' d; {& C5 E# T4 k- O
    va_start(args, format);/ R. |- u" O0 @+ b2 L; e
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);9 V* B; |3 H7 ]9 I- T6 r
    va_end(args);
" A/ z0 i0 ~5 u/ p& i' F1 ~3 d8 w: J' Z    UF_UI_open_listing_window();
! Q9 ^! U0 J* T: [" B' R. N    UF_UI_write_listing_window(msg);
1 \$ z+ e, w6 l6 O- ^: L    UF_print_syslog(msg, FALSE);
6 Z$ [- ]+ ]% @) z% T+ N8 q}/ T$ h% `( x7 P5 f5 M! K  ?4 U
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))3 @* |: [. ]: j. j# ?# q
static int report_error( char *file, int line, char *call, int irc)
8 L/ Z% l' L$ {{( c! N4 q- Y4 [
    if (irc)
1 y. m) f7 @+ `" D    {, c( x5 F- v& [3 j: S# w% Q1 ^3 L
        char err[133];5 J  A3 S5 d% r1 u
        UF_get_fail_message(irc, err);
+ a1 Q# U- V# k6 k5 z0 G        ECHO("*** ERROR code %d at line %d in %s:\n",2 |4 b+ d) y& q9 ~( u3 h1 L
            irc, line, file);5 P: Q# j: {. [
        ECHO("+++ %s\n", err);
0 B5 `8 p/ M. b# j5 g/ w        ECHO("%s;\n", call);) Y, H- i6 C, G$ [
    }
$ C  j/ j/ s1 D5 X; c    return(irc);/ l* i: v5 m8 u
}0 j! j/ F' L: E7 }* d9 }

5 `' ~% I4 A) c& D6 d+ R/*****************************************************************************# o5 C: ?# H9 V1 Y
**  Activation Methods
/ h' ]3 ?6 b) D- M' F*****************************************************************************/
9 w* y  }3 `+ g" i3 H/*  Explicit Activation
9 E: g& Y9 O8 O**      This entry point is used to activate the application explicitly, as in, L: s$ ~7 @/ X4 H6 X( Y" j4 R! U
**      "File->Execute UG/Open->User Function..." */6 l3 O5 O, i1 g
" w' }) S7 [. R! b* ?' i

6 A5 Z( C1 s# ^  c4 c/ V0 mtag_t oldwcs = null_tag;4 o# j! \7 }5 E! d! F" C
double origin [3] = {0,0,0};3 ?& c# Y$ n0 _2 H& A  U/ _
tag_t csys = null_tag;
3 z8 ]/ ]  B+ y# D) vtag_t  matrix_id;
( l; u' z+ K$ D- F3 ~1 i3 ~2 idouble csys_origin [3] ;
, b/ P  B3 x) E1 Q' \+ Idouble matrix_values [9] ;
9 p6 a( n# G, Mdouble x_vec [3];! s- i0 z6 S( U4 D- s
double y_vec [3];
* w6 o9 t3 ]0 ]& h. Idouble z_vec [3];
. W/ u5 ?; D: e. f2 v1 x8 h3 hdouble mtx [9];
; K0 {4 l$ s0 z0 z% ?. _tag_t  mtxid = null_tag;
9 C0 l: N  k" I2 Mtag_t arc = null_tag;
, |; `* \" r7 w& OUF_CURVE_arc_t  arc_coord;$ }: z3 [2 A; x9 i; Y, ]2 ]
double origincenter [3] = {0,0,0};
0 u( q- m5 q: w5 T' g- H2 r% euf_list_p_t objects;
' [! t3 M  l* o! f& `char  *taper_angle = "0";
6 B6 {2 v/ p  A+ U- H- achar * limit [ 2 ] = {"0","60"};
; D3 k, p% V/ C- {& K3 vdouble point [3]  = {0,0,0};
& y  K9 s$ }, N/ w$ [5 n% W" t//double direction [ 3 ] = {0,0,1};) ?$ v8 [& j. T0 x. ^4 b

7 {5 H1 X: S  Huf_list_p_t features;
3 X. j, j0 m9 ^3 pchar * message = "vector";+ I1 ~3 u" H) }; r2 G1 Y: |
int  mode = UF_UI_INFERRED ;) x0 @& j, F& W1 m& I: Y
double direction [3]; 9 h, D; z- \+ K. }. c* b
double origin [3];( e& d- K  {0 E& v9 p
int response;; U5 X$ `! M- X: s- ^
char * cue ="point";% b7 P7 m; |+ ^& A& l4 W# W" K( V
int mode_sel [ 2 ] = {1,0}; - A" f  M1 Y( F. I
int point_display_mode = 1;
2 [# ~7 ?2 h, a* l& B5 T, n; A  ydouble point_sel [3]; ) i# |6 ?: _! a4 g4 u7 \2 \
//double outputpoint[3];
1 x1 M/ }/ I: r! P
) d/ x" Q# e7 H! K5 s  M1 textern DllExport void ufusr( char *parm, int *returnCode, int rlen )8 s. M3 ?% @! s1 |' i, z) o
{+ N& j1 \+ Z+ L; z* Y0 Y
    /* Initialize the API environment */6 h8 f5 D9 [$ H% ]' k1 ^# [/ T
    if( UF_CALL(UF_initialize()) ) " D/ e) f% j/ E' Y" g- V8 h
    {
3 i9 x/ J0 Q) b) r0 a        /* Failed to initialize */$ p; y$ j$ w. b' {  z
        return;
) [8 A. @4 s6 @, Y, s    }
& u. Y3 A3 P. L! K; U8 r3 b    / w/ R7 U+ e2 T8 X
    /* TODO: Add your application code here */5 r, C! M* K  z( m2 T

' s( _8 m8 _7 D/ m% L UF_CSYS_ask_wcs(&oldwcs);                                 ~! i& c+ ^1 e( f4 ?, [! l
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
% q% K# m7 o! ~  y UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ( n/ T# J! a- u" o1 m7 B: }' u( W
UF_MTX3_x_vec(matrix_values,x_vec);                  
7 T& H# a0 i0 [5 F: A9 a UF_MTX3_y_vec(matrix_values,y_vec);" |) ~, Q; g, H/ T1 l
UF_MTX3_z_vec(matrix_values,z_vec);& ^+ w/ i& {) Q' W/ ?
UF_MTX3_initialize(x_vec,y_vec,mtx);               
$ q0 _3 B% c, _) P# X8 Q4 p UF_CSYS_create_matrix(mtx,&mtxid);( j* a0 w+ G+ j) i/ t
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    8 d' N4 I4 P5 z' A% }6 w, e
UF_CSYS_set_wcs(csys);  6 t' ^' i9 H1 X

5 O, T4 r( Q! O' k: n1 N0 L
5 R7 u" T5 U* b9 d  ?1 y4 ?" ]l10:# D. G" l2 c  h2 `  K
    uc1616(cue,mode_sel,point_display_mode,point_sel);
/ `+ P: }* G! j+ J( ^5 d( I% b //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
( y( d3 R+ O1 a; r  B8 o
$ t% @  {7 x9 f- A( K" W, Y arc_coord.arc_center[0]=point_sel[0];
2 `& U1 _  |" a5 r6 C arc_coord.arc_center[1]=point_sel[1];
& j# Q6 A4 x0 `9 p3 R5 ` arc_coord.arc_center[2]=point_sel[2];
. F9 z1 S" A2 _5 u- G arc_coord.start_angle = 0;
1 ?! |4 x( Y7 v* j' b' o arc_coord.end_angle = 360.0 * DEGRA;
; M6 c, K5 h8 x) t% A. r arc_coord.matrix_tag = mtxid;
  F7 M9 v0 ~- k! Z3 b$ W( c arc_coord.radius = 20;
5 U4 H- F7 Q* l+ R0 |% s: Q 5 V! ]; J) K: L/ [
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
% T* z, r$ p) d% N, ^    UF_MODL_create_list(&objects);
# V4 J1 ?. u" x, k. O) {    UF_CALL(UF_MODL_put_list_item(objects,arc));
, \: L6 S& C. y% E- V& Y
( n2 D: J) T& ?: v UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
; v/ P% s$ S4 j, T if (response == UF_UI_OK )! r8 M2 q/ `/ ]! O  d) {
{
2 c4 V$ N. \. r! T  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));$ c4 w0 ]0 A8 x. m* v
}
  _2 q8 L4 k' T+ [. u else3 L! Z7 d: Y9 y& b  Y
{0 ]! J- l" ?; x
  return;
- q( X- {, V( L( k. d$ S }* b; U- l6 p6 o& W- S1 o  J* q
goto l10;6 n) O/ L8 C6 s- t

4 Z' d9 a  N3 \    /* Terminate the API environment */
% S5 m: q" A' ^; g! ]    UF_CALL(UF_terminate());/ @, B$ Z3 a6 t; c
}/ h2 A8 a: s4 v4 z6 b3 l1 c& Q5 F
/*****************************************************************************
' c( W& w$ h, ]  n/ \( @" a**  Utilities  L2 \# {/ y2 q) Y
*****************************************************************************/
/ t8 C+ |7 B8 N: F* y, ~6 A; F1 k4 `! H6 k/* Unload Handler3 ?2 m; P( R% E: ], @6 ?8 _
**     This function specifies when to unload your application from Unigraphics.
0 p  X; C7 n7 b- Z5 m+ Y**     If your application registers a callback (from a MenuScript item or a- h. C/ C7 S  e1 \2 K
**     User Defined Object for example), this function MUST return' q1 R, V& g2 K- a1 i* S5 f
**     "UF_UNLOAD_UG_TERMINATE". */
+ r4 r5 @7 @5 t* R9 n6 P- ?) v6 Vextern int ufusr_ask_unload( void )- {/ e5 c5 N- e: L
{
4 u# X4 {& l( q* T" ~% \  W    return( UF_UNLOAD_IMMEDIATELY );, J  \3 h5 ^' w9 E$ s
}
$ U/ a7 W% Z6 H6 e1 L  {4 N, d+ h; @/ h- F. @% O$ Y; H' x3 v

  B2 x, E1 s1 N( N" I# |3 i
! p- t* w9 J! Q2 W

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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
5 {! _$ \/ ], v$ C7 G/ b: E. ~1 u" R, ?2 U; w* e
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换' e  P* v, U- o- K) u
! U! r$ g0 A  K( m9 N( T
这个你需要多试试,首先把你通过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);                               1 r3 g) P/ [5 I. N6 o6 Z; ^/ A! ?
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   4 J* `; [* }- ~/ M( c7 O
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    6 e5 E: `9 m$ O% X
UF_MTX3_x_vec(matrix_values,x_vec);                  
- t* n0 J4 r' V  w  x# tUF_MTX3_y_vec(matrix_values,y_vec);
. {( d+ P( y& _UF_MTX3_z_vec(matrix_values,z_vec);( g4 J( L% g! |% Y/ P4 o
UF_MTX3_initialize(x_vec,y_vec,mtx);               
2 `+ d2 ?/ k$ l. s! ?1 DUF_CSYS_create_matrix(mtx,&mtxid);' V3 ^5 L, R" D
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    3 O, L  F  j9 |# H$ V4 U8 o
UF_CSYS_set_wcs(csys);  9 x6 m8 _& A: T' X

& ?( H$ Z, n: N$ w
' Q( Y8 h5 v9 l, F/ r6 [# {' F7 b这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联. l9 ~& H9 e  }. b6 G* Q
6 k8 }5 o( \4 z5 ~0 {9 D: 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二次开发专题模块培训报名开始啦

    我知道了