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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
. o3 k  E8 v' P+ l7 a    #include <stdio.h>
3 N$ W- A5 n, E" ^2 M* m% x, J5 v#include <stdarg.h>
/ x5 i( D: |* b1 i6 q0 ^#include <uf.h>
2 |- p) ]. Y7 u& {7 E$ \#include <uf_ui.h>
$ Z6 c* U" E! M#include <uf_curve.h>' n5 k1 x/ l$ c
#include <uf_modl.h>
9 p' {, ]2 M  Y, s; F#include <uf_mtx.h>
& B# J; K" T1 {4 t4 F#include <uf_csys.h>
4 v7 p& P3 ?2 z/ f
  r5 g& U/ D$ e  m+ r/ Astatic void ECHO(char *format, ...)
4 B9 }9 G  Y8 b  a- H{- i1 f  s. j5 J" h; o% \6 n; U
    char msg[UF_UI_MAX_STRING_LEN+1];& E- p; v0 x; L7 s8 ?
    va_list args;
* Z5 s) L$ p7 q8 L. ?/ d    va_start(args, format);9 g2 l4 I1 s! [& z* K6 x
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
" S" U3 x! X/ z3 S! z    va_end(args);6 r; }) ?  {0 _7 }- e, \
    UF_UI_open_listing_window();: v& r9 @$ Q+ C
    UF_UI_write_listing_window(msg);; e- J' V0 N; h
    UF_print_syslog(msg, FALSE);
2 m: c( D' L! m/ v" r& x}
' W6 y$ |% o% O5 ?' }  W4 T. ]#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
. I3 y- E0 p% B8 |3 o0 Mstatic int report_error( char *file, int line, char *call, int irc)
$ o2 \: U% z5 F; r* m6 Q( f9 r, g" Y{
8 S+ \+ x, c) o; ?' C    if (irc)
9 b" C8 Y0 q4 l    {1 V1 n. {/ l& a0 [6 A. z/ v* j1 B
        char err[133];
- t: @( K/ E1 p2 F        UF_get_fail_message(irc, err);- h2 H8 m* v/ ?: \
        ECHO("*** ERROR code %d at line %d in %s:\n",0 E3 _4 k4 ]6 ~0 Y) k+ n+ T
            irc, line, file);
- K* f$ y$ s2 d1 n        ECHO("+++ %s\n", err);% i+ C3 a! j4 J4 J$ I% a
        ECHO("%s;\n", call);) k  `4 W# q$ x) D- }6 V
    }! i4 K8 {; i+ G
    return(irc);* u& Y6 Z) M  R2 \  v" C
}
+ \4 O$ C, u0 r# s9 H4 v" k& p9 s/ r: R* `& m
/*****************************************************************************
, D' w; p: J! g% u9 B**  Activation Methods0 R' O( M3 a; \" N9 E9 Z$ M
*****************************************************************************/
: O3 [1 I( q! V5 s# o/*  Explicit Activation
: s& Y# W9 ]0 v. t1 C. ?6 g**      This entry point is used to activate the application explicitly, as in/ j8 u, z! b  x% e* t6 E- m( [
**      "File->Execute UG/Open->User Function..." */3 d. p$ F% w8 A) I& A: K
0 m5 c2 r' _' H# g2 c  u1 ?

; j: c  M% P% V' n4 }, dtag_t oldwcs = null_tag;
" J* u8 X' k6 Y* J( w# C1 j' U  hdouble origin [3] = {0,0,0};
% K) A0 s; r: O2 T, qtag_t csys = null_tag;
. E. _" b2 |! Z' I: wtag_t  matrix_id;
$ V. p8 _- B) [9 a- [double csys_origin [3] ;6 c* [  |1 h: P# g5 A7 n
double matrix_values [9] ;1 H% i2 j3 y  q$ ]( a" z
double x_vec [3];
1 P7 H$ e( r' ~+ N; @4 Gdouble y_vec [3];
+ _1 f# h4 [  V3 vdouble z_vec [3];. R; h9 O0 k, R" U' ]
double mtx [9];
0 B3 S8 j/ r. `" J1 Z$ M* H; Htag_t  mtxid = null_tag;* B/ O4 m4 O7 |9 r& x: f
tag_t arc = null_tag;; a9 N1 N2 I- Z' o3 B
UF_CURVE_arc_t  arc_coord;# s' ]1 i- X+ u
double origincenter [3] = {0,0,0};
) m0 E3 E, J, fuf_list_p_t objects;
  |# ~1 a7 `0 C# s# v) _3 |; Zchar  *taper_angle = "0";
, @, f) h6 }! R, Q& ?" b+ Gchar * limit [ 2 ] = {"0","60"};
' z  s! x; S( d1 B# v$ zdouble point [3]  = {0,0,0};! p2 P3 U# v. ?. D/ T" ]4 k4 _* d# s: f  e
//double direction [ 3 ] = {0,0,1};
* `; R2 J3 H" K9 c5 o; x
& _$ b- f. S& {& H+ `% Iuf_list_p_t features;. b2 l/ `+ k+ I4 r  N
char * message = "vector";- V/ C; g, x( ?
int  mode = UF_UI_INFERRED ;
9 P# R8 f2 ~: w; U3 Vdouble direction [3];
% G! \7 @4 Y( z) g( xdouble origin [3];+ c6 K! k/ |3 K1 o
int response;
; I6 L6 J7 j5 M' B8 }+ |; Lchar * cue ="point";2 M7 A, U& i8 Z' D" g0 n+ n
int mode_sel [ 2 ] = {1,0};
& Z6 o6 Q; F3 w1 i$ Q* jint point_display_mode = 1;
" X1 h- d- @0 g. x+ z# g, E8 Cdouble point_sel [3]; 1 |2 m& h4 {* l, r5 s6 v, X1 \1 k$ b
//double outputpoint[3];
! O/ j! _4 ~: t; G4 B; s4 Z2 @$ `9 u# Q4 f$ S5 @" J
extern DllExport void ufusr( char *parm, int *returnCode, int rlen ), }: r; }1 \, g$ n$ g
{
+ F- I* o0 `5 F: C; T    /* Initialize the API environment */& A+ Q" E3 f) A
    if( UF_CALL(UF_initialize()) ) . M- p& w* B. Q3 T( t
    {
- N" [! {  C/ r8 W4 C; ~) ~& p        /* Failed to initialize */2 g) e( }" v# f+ i, T) c
        return;
) t* v3 M2 A; x    }
  \# s$ H, B; Y5 W" k5 ]( K2 J   
. q" _' T; o4 M    /* TODO: Add your application code here */
# ?  t7 G$ s6 B' W$ Y5 ]  S! ~$ m7 j9 R8 D: o/ Q
UF_CSYS_ask_wcs(&oldwcs);                              
' h6 J. o& e! d6 o% n UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
4 L2 g- _. D" W: |7 w UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ! }" x3 E' t# H0 ^( |) [1 J) H7 t
UF_MTX3_x_vec(matrix_values,x_vec);                  5 C7 P+ m6 j% n: ]( t) X
UF_MTX3_y_vec(matrix_values,y_vec);
9 o- u. C2 t; T5 v! S5 B# u: T UF_MTX3_z_vec(matrix_values,z_vec);& t& v+ Y( ?1 F0 g5 {! K& L& J
UF_MTX3_initialize(x_vec,y_vec,mtx);               " N! `  Q% D, z, v: c/ E' ^
UF_CSYS_create_matrix(mtx,&mtxid);
4 T- Q$ U' n: V; u UF_CSYS_create_csys(csys_origin,mtxid,&csys);    / K1 w5 J% V, G; ]
UF_CSYS_set_wcs(csys);  4 W2 p& Z2 ^6 r  r5 [

1 z. k3 E; h/ O) {5 k( W4 L7 F7 a: V- D! d9 {) |
l10:
; D; ?. n3 y7 r' S# I, G    uc1616(cue,mode_sel,point_display_mode,point_sel);2 ~: q9 s! w0 `
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
1 [8 e. A7 s) L) S" J& D. d
0 h% @0 Q7 t4 e" Z% w" x arc_coord.arc_center[0]=point_sel[0];
# y# V* j& _' j2 I  ` arc_coord.arc_center[1]=point_sel[1]; $ c4 j$ z: T& ^2 e
arc_coord.arc_center[2]=point_sel[2];
4 M4 Y" `8 P) D6 t" f; b arc_coord.start_angle = 0;2 \0 Q- }# d( ~; n# D. m7 p
arc_coord.end_angle = 360.0 * DEGRA;7 P* V. P3 q2 b/ n6 k
arc_coord.matrix_tag = mtxid;
5 x# c# n6 l/ |/ h; ^0 u7 i0 o arc_coord.radius = 20;
% B7 S! Q5 y0 w, _, H4 ] * H) \+ o6 G2 R+ p
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
9 H. ^& X, E' i2 I% W. L    UF_MODL_create_list(&objects);1 u; A/ c6 n7 t5 h3 b1 w0 Q8 h4 w
    UF_CALL(UF_MODL_put_list_item(objects,arc));
* x6 }3 P1 r8 g# n" N* d
+ |1 _- `! K7 M3 f UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);! P( T0 j7 E7 C
if (response == UF_UI_OK )
3 m! A1 Y6 E, H# ^ {
; t, q, ~, L% _1 U% |/ g  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));. d5 ]/ n6 T$ e1 ~$ J
}% v8 U- B: F$ `
else1 L. l/ \! L3 U, W" j- h* }0 F
{
8 `/ D# ^, u. m' a  return;
6 |* _3 E1 t: q: c6 ?1 T3 u# f }" a# o$ `" I4 H- \! Y
goto l10;
/ t' n/ T' m. q& H5 E' @! m& }+ l7 r! o" C2 ^( b
    /* Terminate the API environment */( ?( }. ~# \* W: q4 E& f* p
    UF_CALL(UF_terminate());7 ~% ^7 l7 b7 X; \
}0 X5 r+ x. |. W/ n/ z2 ~: v6 B
/*****************************************************************************& G7 E! z7 L; d" o- u5 e
**  Utilities
- P# Z/ V8 t( X+ S*****************************************************************************/% ^1 k7 O+ k) A' ]
/* Unload Handler
5 p1 P' y: V  I9 l**     This function specifies when to unload your application from Unigraphics.' Z3 J" l4 ^2 P! Y2 ^# v
**     If your application registers a callback (from a MenuScript item or a
# L$ \: _9 x# M+ m. Y**     User Defined Object for example), this function MUST return
' K$ h& Q3 w- b% l: d! l% O0 f**     "UF_UNLOAD_UG_TERMINATE". */
0 K0 E# @; N  \- O/ M* f  a& F6 hextern int ufusr_ask_unload( void )
* y2 S0 o; q2 P+ \{
. Q5 Y9 A, f3 k3 l3 ^* b9 E    return( UF_UNLOAD_IMMEDIATELY );* }; N( F! {- `$ G8 s
}
- z: E' E; O+ a" j9 D
; V- ^( I+ p- R% ?" q
- b  W; {6 o3 X! U% N/ |: }5 i2 s

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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# ^: H; p. i# q
  f* w: l/ J7 q8 Z
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换& I& K7 f- I; G' v$ z" ?" l
2 M: U. w& ]5 A# r8 k
这个你需要多试试,首先把你通过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);                              
# G/ K4 W' q& vUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   8 \: G, y& ~* m9 l
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ( {2 }" H  ?1 h" L, Q$ E
UF_MTX3_x_vec(matrix_values,x_vec);                    r" r: f  D) v: F$ f7 R7 ~
UF_MTX3_y_vec(matrix_values,y_vec);' w- T; i& d+ S# E
UF_MTX3_z_vec(matrix_values,z_vec);
6 H2 ?. S9 Q2 w5 SUF_MTX3_initialize(x_vec,y_vec,mtx);               5 N, p9 M# x- `! X  T, z. D/ k7 R
UF_CSYS_create_matrix(mtx,&mtxid);
, r/ n2 d) ~( ^4 H7 w- K9 cUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
2 v, ?1 N6 ]3 ^5 r; G: |* iUF_CSYS_set_wcs(csys);  & l7 u! \! M) ^

! R4 V7 K+ I; i6 [, N
8 j" B$ s9 V7 W. c7 P: R0 r这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
0 e4 {- t0 z/ f) O6 ~4 G" X7 X! s! `# {* T# m
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了