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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
, A; F3 b; N8 F) m: M    #include <stdio.h>
! ]6 M6 K; k# B" X#include <stdarg.h>
8 q& T- x. ?+ Q$ @/ a, h. ~) x#include <uf.h>0 w( y9 K# m: n/ o! {: B% a
#include <uf_ui.h>" J8 y( l" H9 k! k+ C. w3 a; D
#include <uf_curve.h>
; R( T9 ~4 a& Z9 Y4 W; v#include <uf_modl.h>* h4 F, E/ _! C4 Q: p3 }$ t
#include <uf_mtx.h>
; l% h- x* j2 k0 W+ ^8 J#include <uf_csys.h>9 |0 m5 P* r) B! x

$ M1 [; ?  o  v5 D4 H* cstatic void ECHO(char *format, ...)
0 {* f" d/ M4 u1 \7 X{' n4 I# c1 z% b7 G: `, h5 L
    char msg[UF_UI_MAX_STRING_LEN+1];) R0 [" _+ z, {* V
    va_list args;8 d  D) r8 k( A
    va_start(args, format);* J! C  f1 {# n! B  Z& n" K6 U
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);+ j8 i- W& o: q" B* l! X
    va_end(args);
+ W' ^5 c# \! c/ J; n0 \. B+ V* ?    UF_UI_open_listing_window();: x( B. ?& x9 H7 Z+ |3 b
    UF_UI_write_listing_window(msg);5 d: s1 |3 L% x1 u( I; e% q
    UF_print_syslog(msg, FALSE);
/ B) E3 e& S( Z}- \4 [" \9 N3 ~1 E
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
9 I# r! d1 B! ^" A, y# }static int report_error( char *file, int line, char *call, int irc)
* n0 F+ G5 s4 k- i8 r' y{! l! C  s( ~8 c4 l
    if (irc)% o1 P* A# s9 W3 @) p0 e  ?
    {
7 U$ z7 j# r# W2 b9 c        char err[133];
5 n* x, i+ k9 ]( |- J' H        UF_get_fail_message(irc, err);% a* r, M# Z$ g$ ?9 ?$ K$ m
        ECHO("*** ERROR code %d at line %d in %s:\n",
2 X5 W! ^" k  g/ C, j; g" ~! L            irc, line, file);
4 H" f" h5 ?8 h! P7 W9 n        ECHO("+++ %s\n", err);" l8 M% F. N" D) e1 y0 F% J
        ECHO("%s;\n", call);1 ~8 G' l, s1 V. I! F+ N+ @) `3 @" N& X
    }
+ m) y5 Z0 Q+ F' h0 `5 S    return(irc);' {8 g3 [: g* G% ]8 ~( S8 T" w
}) z% P2 K  T# p2 N0 b% \

& q# D" }% w: }$ x3 W$ E( }& v/*****************************************************************************1 f( ?( o! h+ ]  H" I1 M+ e
**  Activation Methods
9 o/ D( Y! b0 U7 \*****************************************************************************/
2 t: B% u3 x8 ^& s5 P/*  Explicit Activation
  R8 Q1 Y3 x. c/ n' b+ y9 o**      This entry point is used to activate the application explicitly, as in- e6 t7 l7 S- y
**      "File->Execute UG/Open->User Function..." */
& }  {' @) X1 u4 I. s) v. l3 f
( ]5 E2 `4 w" d' N  _3 C6 i+ W: U, F. f% Q) Y; U% d
tag_t oldwcs = null_tag;% [& i( h; y. C# M
double origin [3] = {0,0,0};: o5 J5 q4 G3 j( X
tag_t csys = null_tag;2 K* K% I0 n1 E
tag_t  matrix_id;
$ h' f9 a1 \  o2 Wdouble csys_origin [3] ;
8 J: j9 [$ }2 I$ r6 P- f) p4 bdouble matrix_values [9] ;
6 d8 V3 ~7 x* Z- l. l# cdouble x_vec [3];4 Y$ t7 C( p1 [  d% n% V; ~
double y_vec [3];+ |7 \5 }& m( o1 v5 ]: x
double z_vec [3];; y' ?# M' z/ r7 |1 I2 C
double mtx [9];3 V$ y7 J" M1 \& N
tag_t  mtxid = null_tag;1 d2 k1 I% s5 }  n4 t4 w9 Y
tag_t arc = null_tag;! o! T5 ^5 {) a% ?8 {9 {6 G9 y) Z
UF_CURVE_arc_t  arc_coord;! ~& G3 S5 d/ G' R  d
double origincenter [3] = {0,0,0};
% j/ E3 q" f9 I1 m5 A; Luf_list_p_t objects;
, s! v; }% @, E% Echar  *taper_angle = "0";. c; i8 X( R2 ?4 L, B" _
char * limit [ 2 ] = {"0","60"};
1 ^  C% y7 A9 P' Cdouble point [3]  = {0,0,0};& V$ R# \2 i, ?7 a+ K
//double direction [ 3 ] = {0,0,1};1 e- j' v# G! b3 I0 u% M! S

/ }. W: q4 P. v- p# m9 v5 Xuf_list_p_t features;
) ^# f' o' U* X+ J0 Achar * message = "vector";* l# P" S, E; }/ w2 t
int  mode = UF_UI_INFERRED ;
: G/ r+ U) a' ^+ Y  g; e2 W7 s. ^double direction [3];
$ d& W5 L. @8 T* Y# U4 Jdouble origin [3];
- n& m5 a) r7 W1 s- D; N, Fint response;
8 l% C5 l/ G# T2 j7 uchar * cue ="point";
4 ?$ s# b2 t5 q: X7 K$ n) g6 h( wint mode_sel [ 2 ] = {1,0};
; C$ S9 ~& o2 |. v. _int point_display_mode = 1;5 P5 q' \* Y8 n
double point_sel [3]; 4 a4 G2 B( F; \9 o
//double outputpoint[3];
8 [* F6 i" F* e8 ]& Q4 k0 W' d- e6 l7 L; Q
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )* @4 k  j* s; W! O" z% `8 o
{
7 c4 g& I, u7 g0 E) a4 z    /* Initialize the API environment */
: D* E( S; t$ `, T# U+ V0 v    if( UF_CALL(UF_initialize()) ) % ?; _; [! ]" x2 g& A
    {' V0 W1 G1 O, q2 h
        /* Failed to initialize */- \$ `, X8 v" z( ^
        return;
+ c6 Q$ l" i* X* n" ~$ _    }: h, v% c0 I0 j* v3 w) e
   
9 t, t' J- L  @; o# J5 q    /* TODO: Add your application code here */
& p0 Y5 L2 ?: J% W* S* m
, ?# t9 N  G9 y& W! c UF_CSYS_ask_wcs(&oldwcs);                               5 b& i) o8 e" X) j  m
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   $ n- o0 G2 X7 E5 l3 e3 x. U0 U2 x3 s+ d" T, a
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ! R; D" \' [  @! }# I
UF_MTX3_x_vec(matrix_values,x_vec);                  
& c2 |9 S! T% I' k  y( a UF_MTX3_y_vec(matrix_values,y_vec);
) Q' ^6 a1 j; Z3 R UF_MTX3_z_vec(matrix_values,z_vec);, d, L9 j% x% J# ~9 m* @
UF_MTX3_initialize(x_vec,y_vec,mtx);               
! s. H8 x) U9 {+ r& I2 o1 U UF_CSYS_create_matrix(mtx,&mtxid);# {. l& U, x  y3 i5 D
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    ) t5 u' t! F6 G: Z, ~7 U2 g8 o# ~
UF_CSYS_set_wcs(csys);  7 y' X4 [& P; A# d3 s' L" m) O
' s: u8 T  h6 _& I+ J
# `# I3 L1 j. L! p- n( R, D* I
l10:
9 s) O% v5 l7 N    uc1616(cue,mode_sel,point_display_mode,point_sel);
( B' k" Z( N# l. n$ F# W //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
' C" l$ `6 |/ H9 g  q' d
5 N5 Q8 k3 g' L2 m# r arc_coord.arc_center[0]=point_sel[0]; 8 m) m4 Z0 h* i
arc_coord.arc_center[1]=point_sel[1]; ) i& H3 r) `/ X) W
arc_coord.arc_center[2]=point_sel[2];
4 ^$ x& g) [7 u! i. D arc_coord.start_angle = 0;
; R- k% U0 J  p! m# w arc_coord.end_angle = 360.0 * DEGRA;; Y. ~7 @+ Z; i# t0 B) V- x- f, P
arc_coord.matrix_tag = mtxid;0 q. m8 Y' r/ d) Y! K! z# h% K9 c1 O6 w
arc_coord.radius = 20;
# m7 I" G: B# ^ , J, |+ c' J, R. q
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
' v, ~$ y- O# ?' u% ~0 C5 l5 H  x    UF_MODL_create_list(&objects);
. ?, E: |! R0 i! |  X+ P% }    UF_CALL(UF_MODL_put_list_item(objects,arc));
# J$ |. X& ]6 U2 _1 U
1 s) g# A" U0 A( @ UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
  m" c" e% J, U% p0 | if (response == UF_UI_OK )
2 c8 t; z9 p* K9 a {
4 B! \3 K+ d' K' l$ p! o  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
* p8 E2 Y2 |6 m. W }
% Z  [8 p3 ^. f7 h4 j else
% @/ z# L2 A# x+ x7 W" [ {
4 [9 e. z- K+ w: v2 V/ Y4 [. _  return;( |% Z! l3 R1 p* e
}9 i: g, |. H; K" x  w
goto l10;
$ N: T+ c* e0 M; _3 e+ T/ }, V7 d" U* g$ u
    /* Terminate the API environment */) Z  Y, g7 k* G* f" Z4 e, Z& G" Y
    UF_CALL(UF_terminate());
* P% [- u4 h8 ?2 }) ~}
( J# `2 `6 L0 x( v( u- T/*****************************************************************************
/ a6 r/ Y* l  j! E* b) E( n**  Utilities
, B& l) o: l1 z1 o2 Q$ O6 g*****************************************************************************/
2 {  P4 v+ ]3 B; [9 w/* Unload Handler
0 m& ]8 b5 V& k: T**     This function specifies when to unload your application from Unigraphics.
- o1 x  y( ~, ?0 R0 `$ i: b**     If your application registers a callback (from a MenuScript item or a
# K1 c) m1 q3 m. M**     User Defined Object for example), this function MUST return* H& R7 n, C5 S2 i8 @
**     "UF_UNLOAD_UG_TERMINATE". */: O) X$ }! z- g' V2 t, K
extern int ufusr_ask_unload( void ). a: _, B* J- g( ]* x
{7 q% f! C2 K3 n* c  O! @
    return( UF_UNLOAD_IMMEDIATELY );
( a$ O" ~" }, S8 c. P2 P$ a}
+ A& z: G  e5 G) g% v4 l9 \2 e8 k' x' Q" j. W' W

. ^  M' G0 e4 Z* p2 g7 l9 i8 h. [# e& h& M5 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

你旋转了坐标系,实际上就是更改了wcs0 K1 h7 E% V2 j$ }  f1 j5 ^
/ O0 o  D/ k6 e& ], w2 h
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
  E, Y0 ]& u: t; R9 f  A" J. c; r1 p% v) h5 d
这个你需要多试试,首先把你通过uc1616选择的点坐标打印出来看看,必要的时候去转换,圆弧的生成比较复杂,需要一个支撑平面的,如果是XY平面,也应该是wcs的XY平面,所以看来你都是在绝对坐标系下处理的,把改转换的都转换下,再看!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

admin 发表于 2015-8-3 12:51:57

admin 板凳

2015-8-3 12:51:57

UF_CSYS_ask_wcs(&oldwcs);                               ; K$ n! N( P9 L6 Z: ]' |
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
  K2 o' _$ x8 D6 j: O5 q7 S5 YUF_CSYS_ask_matrix_values(matrix_id,matrix_values);    6 H% g* p* [9 W
UF_MTX3_x_vec(matrix_values,x_vec);                  - y, i& ~* H8 |( Z) S4 P, X
UF_MTX3_y_vec(matrix_values,y_vec);% t. x$ L5 Z2 z& J6 _$ N7 J$ S
UF_MTX3_z_vec(matrix_values,z_vec);8 i8 h5 x9 k$ w
UF_MTX3_initialize(x_vec,y_vec,mtx);               
- e% R! ?, c" @* }1 }UF_CSYS_create_matrix(mtx,&mtxid);
; q  c9 r* [/ e! A. v6 \5 ~# {) Q( XUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
, F) t" e( e! V1 `. f+ [1 v9 XUF_CSYS_set_wcs(csys);  
( q' h- C& I  ]* a' X% Q4 B6 e% }2 U
7 W9 r( z) H5 Y1 \  D' {1 \
' S! Q# R5 l( X# i$ P, h: ~9 B这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联5 b0 P3 d  y: j& i
3 V( I* Z  Y7 }- b/ S
不需要这些代码
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了