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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。* ?5 b1 H6 N+ {: r/ c' a. c0 I7 \
    #include <stdio.h>7 Z$ p3 x$ Q+ O' N- w6 d
#include <stdarg.h>% X! P/ V# g* b
#include <uf.h>
! n0 P. m  k4 E1 Z# g2 `1 L  M% r#include <uf_ui.h>/ V; y( j) D+ J7 M
#include <uf_curve.h>. g6 j" e( y: n* r
#include <uf_modl.h>% p+ R1 l" D. r) U- u
#include <uf_mtx.h>+ J+ d0 t, `3 G# m  h$ G3 Z
#include <uf_csys.h>/ M( Y  I& {! W1 \8 ]3 y, M# ~0 p
+ y* N, N2 ]! J* }$ z
static void ECHO(char *format, ...)6 g+ A; A/ b. r1 F4 D
{& h  |  P6 l0 g: O9 J9 K& J( B
    char msg[UF_UI_MAX_STRING_LEN+1];6 u' _' j' w  {9 Y, J$ V
    va_list args;. r; I0 v$ H& R, C) s. d: ^9 j
    va_start(args, format);3 ~+ n! w, }5 z5 [/ [3 A, S
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);: c4 d( {3 S; f" f/ }
    va_end(args);8 W2 {7 p  ^( V* U
    UF_UI_open_listing_window();  }4 Q7 I9 B. R- T2 I$ O8 @
    UF_UI_write_listing_window(msg);
" h/ E$ |9 H" R$ J3 F% j% M    UF_print_syslog(msg, FALSE);
/ ^6 t2 F& y6 f' v! `# Z' |% f}9 R7 [: ?/ c: J2 |; `+ ~! w* g5 r
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))4 @+ F. ]: {2 I. {
static int report_error( char *file, int line, char *call, int irc)
9 d. w& d$ D% }. M  y9 K$ h{
3 _) ^% O: c" q2 k, C: l! U    if (irc)6 [) Z* Z3 u: ~  X& \9 ]
    {5 G3 @( ~% A* `3 P7 g
        char err[133];
9 H2 a1 b2 _; H$ M- k8 ^  J  Y        UF_get_fail_message(irc, err);
! q% i- A! Q! |# W  }2 O        ECHO("*** ERROR code %d at line %d in %s:\n",
. O3 Y. L' N; _7 v  k4 E, }# a            irc, line, file);
) h- O( m: `1 ?2 U2 h        ECHO("+++ %s\n", err);. C2 e/ j8 L8 K  i' Y
        ECHO("%s;\n", call);' x. U- I/ e- H- v8 Y
    }" K2 r+ G) _# u4 v* [8 B
    return(irc);
. @" M5 }2 m6 r7 y/ c8 a1 C  ?}( v9 ~3 C  t- z& g

: N! \0 T# X) `7 I1 B, N/*****************************************************************************! b6 W. ~0 g/ e: [0 c( Z! i9 c
**  Activation Methods* g# i( m; K, T: V. z
*****************************************************************************/
+ {9 u; n; |0 p& H) U- b% G7 v/*  Explicit Activation1 N# s2 G3 K, g  Z' a9 a
**      This entry point is used to activate the application explicitly, as in3 A- g( u1 a; W  Q3 I) F
**      "File->Execute UG/Open->User Function..." */2 I: c- r  K9 v$ {
3 ~% N7 b& j3 E: G$ A" v

' L- q8 h8 \) ^0 btag_t oldwcs = null_tag;6 z3 N2 K5 N+ I- I- F
double origin [3] = {0,0,0};% l, j5 j0 N8 b2 i2 F
tag_t csys = null_tag;. T9 e' ?) C/ R: ^- j/ B1 e
tag_t  matrix_id;
% q3 ^- z  C& h2 M# D, tdouble csys_origin [3] ;
+ p, f- ?8 ?, U" Udouble matrix_values [9] ;
5 ~+ d" V9 A: V) W" A2 H. Fdouble x_vec [3];2 B& Z6 C. O% H* g" `4 i6 @
double y_vec [3];
) Y& n. @/ `4 D' v1 V% S5 Ldouble z_vec [3];3 b4 Q# w/ \3 `3 G
double mtx [9];" d4 k9 ]% U3 u, `! x
tag_t  mtxid = null_tag;
9 T9 b: {  S8 o, Dtag_t arc = null_tag;9 J8 `5 v2 H0 s
UF_CURVE_arc_t  arc_coord;
4 z2 H, G) _4 T+ G6 l0 adouble origincenter [3] = {0,0,0};
4 w) }# @! z1 F$ xuf_list_p_t objects;
' V: D8 U& n9 lchar  *taper_angle = "0";' L, U# `4 h2 u2 a8 o
char * limit [ 2 ] = {"0","60"};
1 k% t; b- {; j7 ?# N  tdouble point [3]  = {0,0,0};6 l. I. E7 U, V2 {
//double direction [ 3 ] = {0,0,1};& X' A' V* S% ]5 ?/ @- w9 i

) H4 g- z" |% k$ G+ o8 N2 A" duf_list_p_t features;
5 [9 i+ D1 {( u- f0 R8 Qchar * message = "vector";3 I- C" I6 [, x6 W5 |% N
int  mode = UF_UI_INFERRED ;
: Q9 K% H0 S! N- }- U, \3 j/ Fdouble direction [3];
6 k* H) R! Y. m9 ^$ d6 s' A2 rdouble origin [3];" S) m% Q! N. a: n
int response;
6 a3 V: W  ?$ jchar * cue ="point";) c3 o+ M) o9 ^9 N; D
int mode_sel [ 2 ] = {1,0}; 0 U, ~  U% {  T+ {- R% R6 g; l. Y, }
int point_display_mode = 1;' F2 o, Y; q/ f
double point_sel [3]; 9 c" S" U! \  i' V5 p' }
//double outputpoint[3];
- {, Y3 w/ t* v6 a+ w! Z2 a% W8 ^' |, |5 M8 o
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
0 z1 L$ A3 Z" u{
" \' @7 H0 p  @2 R( Z  F    /* Initialize the API environment */( g- S) s# m; [0 w6 l
    if( UF_CALL(UF_initialize()) )
$ P2 O5 D5 l; X6 W0 a8 \( b! {    {" ]$ o: X' o; U7 \
        /* Failed to initialize */0 y1 d8 q5 m& m, a/ c. p
        return;2 m  `. F- ?& i; d2 F
    }
/ Y* }+ m. w) N( Z    , X; o# a- r2 i$ a; ^: x) f: q( ~: Z
    /* TODO: Add your application code here */' l! |& ^3 D# N/ x% Z8 x, R$ n
. y, h7 s; M8 n
UF_CSYS_ask_wcs(&oldwcs);                              
% i5 U' p3 t( a0 {7 T, s! q UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   0 ?' e) D+ l5 g, \5 _9 f3 d
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
  @5 k$ K1 Y/ C* n UF_MTX3_x_vec(matrix_values,x_vec);                  * W$ A8 o1 J5 G# V5 C
UF_MTX3_y_vec(matrix_values,y_vec);
8 E0 U; a0 M9 ]' u UF_MTX3_z_vec(matrix_values,z_vec);# M, H: m0 h0 N8 {
UF_MTX3_initialize(x_vec,y_vec,mtx);               9 b' p; K  S- s1 D7 H! C* R( @7 q
UF_CSYS_create_matrix(mtx,&mtxid);+ d! V- `2 j" w; L& e! `# q( W
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
& e/ p! l+ y) v- L. u UF_CSYS_set_wcs(csys);  - w( M$ F( d: j3 L% I1 ~' F0 }( G& L
8 m) }0 h. V$ |$ Y) @
- k& c. S2 X, E
l10:  E, u0 P0 M2 d8 t) k
    uc1616(cue,mode_sel,point_display_mode,point_sel);
: t, h$ O4 x: M: U8 l' O //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
/ v  Y. {( X5 c% E4 e6 K9 v! |& o; a) S4 x6 d8 `% v7 X
arc_coord.arc_center[0]=point_sel[0];
" `9 H. Q' @1 h/ x arc_coord.arc_center[1]=point_sel[1]; * `2 S# P+ [1 J* g  q" O
arc_coord.arc_center[2]=point_sel[2];* C3 H. \& C  s
arc_coord.start_angle = 0;
7 f/ }( @4 L. j* W8 E  D arc_coord.end_angle = 360.0 * DEGRA;! N- A3 k% g/ g0 h; a/ k
arc_coord.matrix_tag = mtxid;1 v: |$ C9 z) \* \/ y/ u
arc_coord.radius = 20;
) ]; _  k9 H# ^% O" ^. h6 W8 g; T
' ~' A. s. [, L, b8 z. e; D UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
- v* k. S) N* d+ l3 k7 x( e    UF_MODL_create_list(&objects);. D) j7 K: H8 \2 `- l) M
    UF_CALL(UF_MODL_put_list_item(objects,arc));
2 u. ^" P+ V& K3 d" H" X& R" _- r6 u# w* c; V, W
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);# m+ E) q% R4 [
if (response == UF_UI_OK ): F! W3 `6 K& D' W8 w- d/ j6 ], ~
{6 N: L# c# }. N4 i: Z
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));4 C3 Y: |2 H' x. Y- W, C3 x5 _
}
1 y5 A7 |2 a5 S else0 @) Q( z: h& \/ [$ K
{  Q+ W: i/ ^8 S- j0 f
  return;" L( a* ^1 E" {1 b( @- b
}) p% U) _2 a) E' |1 N! ?* ^" R
goto l10;( o) k8 a0 k5 D7 ~

$ I+ z; `- B  D$ V: r" \2 R. x: o% }    /* Terminate the API environment */
$ E9 P7 C, I4 E8 t& U, o+ s    UF_CALL(UF_terminate());1 @2 q2 B( M! p* u/ N
}
+ X! g2 B4 d/ }$ [! c! k* u/*****************************************************************************
# ]) Y5 ?2 G& @' `1 l$ b**  Utilities
" L, u- p) o/ `9 l) k  @8 H*****************************************************************************/
& _# F4 y$ Y. k5 x/ a/* Unload Handler# ^' M7 F7 L4 k. I8 {9 B0 C4 R$ C- {
**     This function specifies when to unload your application from Unigraphics.: k! Q, {/ P0 m
**     If your application registers a callback (from a MenuScript item or a9 [. M9 H% l. `
**     User Defined Object for example), this function MUST return
# o& x) F" A9 J8 Z+ ^**     "UF_UNLOAD_UG_TERMINATE". */9 Q. j7 R+ [( Q0 a/ _
extern int ufusr_ask_unload( void )8 z. n) J/ Y8 E
{
& D; I- e7 ?, N    return( UF_UNLOAD_IMMEDIATELY );
# j5 q4 d2 L- L( _}
0 p; m# h" |: T% `& {# H- m/ w; U
/ I4 E4 K2 G; w4 r- d, U
$ E+ N4 c; B1 `2 d+ P. t
5 a; S8 N: o+ X: F* s, x6 L+ [

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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+ Q' O8 J- c( _+ x) Q: s7 k- j

( t& T& g/ F4 H4 V+ h你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
5 a+ _& o7 d- l0 ^4 k) W3 |' O' 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);                               ; f7 c* J, @; j7 v4 W
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   & _- ?' J2 s) F
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    % b+ p) q; ?4 b
UF_MTX3_x_vec(matrix_values,x_vec);                  . I; B0 X' ^, f. D+ o
UF_MTX3_y_vec(matrix_values,y_vec);. _$ [  \' N# v
UF_MTX3_z_vec(matrix_values,z_vec);6 F& _3 s3 B6 i) e# P* e! D  A
UF_MTX3_initialize(x_vec,y_vec,mtx);               . n4 O5 U  _3 X
UF_CSYS_create_matrix(mtx,&mtxid);
. o4 r) E+ s+ v6 JUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
3 l1 d8 f" O5 K. E& f8 {UF_CSYS_set_wcs(csys);  
' o1 ~! G! J2 r, @+ R6 d/ z
& U/ O$ m$ e+ ~- v! z' J* Y7 W! s* H- S6 r2 F* i- ]  h
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联+ z7 v/ A1 k9 Y$ g( j( Q

, |$ s. I3 ^% Q2 w  t不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了