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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。9 x0 `# S, E# i$ T6 d
    #include <stdio.h>
& w6 l2 P3 k( V4 Q- q9 K#include <stdarg.h>/ l" o$ f: ~" {% T8 T6 b/ n
#include <uf.h>! ?' T" h6 T8 F3 o7 v
#include <uf_ui.h>
( e/ ?+ M. f3 K6 ~  a& C1 U/ s#include <uf_curve.h>+ }" Q3 T7 }) @' e
#include <uf_modl.h>* R3 _. W5 T6 b7 q7 g
#include <uf_mtx.h>
# K3 r* e% P9 k' L' V2 `#include <uf_csys.h>9 B1 v# ?& z) X6 v

& n9 U/ {$ V4 o! v6 Cstatic void ECHO(char *format, ...)
1 e! N  O5 M7 @: l+ B. F7 o: P! k7 K  R& Z0 q{
" e3 Q2 }, A& {; a; d7 y    char msg[UF_UI_MAX_STRING_LEN+1];  Y0 E# G; A/ Z- S
    va_list args;
% E% Q1 T) T4 F9 L    va_start(args, format);
( A1 T: [! u6 ?' `9 Y, L    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
4 L; |" v. @- n& L; \$ h" w    va_end(args);
* R( l* s; J. K: }. }- S    UF_UI_open_listing_window();; m' C" F# W1 F
    UF_UI_write_listing_window(msg);, Y# K( V7 g& c6 s
    UF_print_syslog(msg, FALSE);
: }# G2 j4 e/ m5 B. _}* f6 Z5 K( q( Z! a" R
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))# W) T3 b+ @( L. P8 n
static int report_error( char *file, int line, char *call, int irc)
% }; n* _. \4 S! w{& q  O+ P; Z# J- ~( y
    if (irc)
! h% N1 h8 y* g; c7 a    {7 D: C5 C+ Y4 d$ S: a  Q; C) [# P2 H
        char err[133];
5 k+ V0 i0 t0 ]  ?0 }+ A$ x, U9 X* r        UF_get_fail_message(irc, err);' w& Q1 i' c9 i8 I
        ECHO("*** ERROR code %d at line %d in %s:\n"," ?+ D% d# [# E) z5 v
            irc, line, file);
! y2 k- _3 H, W4 j        ECHO("+++ %s\n", err);- A+ y" a# z: l
        ECHO("%s;\n", call);
( e& ?% m( t& r# b1 ^    }
1 l4 E5 f9 O6 ^* _    return(irc);7 F  O; g& [* n4 N* l& ^" I
}
5 y0 ?6 i! a% |4 J6 V7 ?
  }% t- V/ G1 c4 d& h6 U/*****************************************************************************
1 h+ s) j: }8 s7 ~**  Activation Methods
* G  n, r) l& s2 g% l1 Z3 _*****************************************************************************/
7 B% [6 `2 ^5 H& ~# f/*  Explicit Activation
# C* a4 _; d: e5 l**      This entry point is used to activate the application explicitly, as in
+ f- k/ L9 [2 T/ U  J**      "File->Execute UG/Open->User Function..." */
4 y5 }3 e4 C6 P/ r
) ~" D* q+ w! a  {9 z
0 H, m7 c0 w$ {7 Ftag_t oldwcs = null_tag;# e5 p; L1 ?. k6 J$ l
double origin [3] = {0,0,0};
& M0 m$ d! L- l/ e0 ptag_t csys = null_tag;
+ ~' X' o7 H3 D6 Q$ u6 |' I+ otag_t  matrix_id; * Y/ e5 U% f7 }0 o6 q
double csys_origin [3] ;' v  V" ?; T& j# Z, H/ i5 w
double matrix_values [9] ;! m' K2 U+ d; e
double x_vec [3];
0 T% B" `* A" E- Ydouble y_vec [3];
& Z; E* ?/ j( g/ v  O! `double z_vec [3];9 h- N" _8 u$ v
double mtx [9];
, Y; |7 C4 j8 ]8 Gtag_t  mtxid = null_tag;
) r0 v( H3 o5 @6 M" t: btag_t arc = null_tag;
( {7 O* o. m+ }! k  AUF_CURVE_arc_t  arc_coord;
6 l8 B  C1 \1 }! U# k( c$ ^) rdouble origincenter [3] = {0,0,0};. \6 l# @+ C4 l1 E- J
uf_list_p_t objects;
; \' h: |) f# wchar  *taper_angle = "0";+ g' T1 x- u" {2 L1 m
char * limit [ 2 ] = {"0","60"};/ A& `7 Z1 {( G
double point [3]  = {0,0,0};
' a* x9 I, }0 Y6 Q' M- E0 W//double direction [ 3 ] = {0,0,1};
) p5 w$ ?& Z# v* o) s% {8 D
8 E& V" G, W" Q3 U% \0 \" s' duf_list_p_t features;6 Y( n. @8 L; t
char * message = "vector";
' N2 }9 Q0 U" a* ~& z- h+ k8 Nint  mode = UF_UI_INFERRED ;
- Z! j6 K3 j2 g& cdouble direction [3]; & N& ?( r! Q/ p* a$ i& m
double origin [3];: H+ h8 ^, o4 g1 P' l
int response;
$ S" ]4 |2 G2 r" X/ zchar * cue ="point";
4 h3 s# o1 ]; @2 K/ [2 K. i$ yint mode_sel [ 2 ] = {1,0};
" M6 q8 T2 T+ g: }int point_display_mode = 1;- V" Y+ d+ N$ a, e- t
double point_sel [3]; ! d6 F. o# l6 J0 M
//double outputpoint[3];
9 H4 Q) |7 G( P, H/ c% }" r. p4 C& M$ ]
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
, @- c# T8 h6 l# B4 W{
! g- B. \; {' H9 o    /* Initialize the API environment */, J5 t" B; X2 }
    if( UF_CALL(UF_initialize()) )
. \# I- n. O% d6 y" d    {( X3 \- m- ^- q, g1 w5 W
        /* Failed to initialize */
! ?% W9 P# w. `% s& l/ f# x* ?% [        return;
% L6 D. C( f" z9 l- Y( @: E    }" C. V8 _7 g9 E& ?. L+ E9 M+ k
    1 R1 e6 h- n9 x3 Z8 {. X) G
    /* TODO: Add your application code here */- G7 z) J. f; u- ?
6 e0 o5 y0 E" L1 ^' T$ p3 w
UF_CSYS_ask_wcs(&oldwcs);                               1 A7 A6 W  V; w& f5 B0 q* c
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   # Y6 v: m( k: q, i! h; H# G$ s2 T6 Y
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);      N2 F* T2 u7 q/ S* r
UF_MTX3_x_vec(matrix_values,x_vec);                  
3 K- [% I$ i) R- N" _: H% Z UF_MTX3_y_vec(matrix_values,y_vec);; R: Y$ Z) I0 X+ h9 C
UF_MTX3_z_vec(matrix_values,z_vec);
( a0 a6 N8 b. e# U1 ^. [' b  g UF_MTX3_initialize(x_vec,y_vec,mtx);               
4 t$ K# p0 M2 J0 g6 i UF_CSYS_create_matrix(mtx,&mtxid);
! U4 F" l* N5 }; X  q8 N UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
: G% t* P+ L9 Q UF_CSYS_set_wcs(csys);  
& S3 i* k8 D$ k4 r4 E " m4 M* D7 Q$ L4 ]. G- B/ U) J9 Q

4 i+ W8 Y: E$ o6 l" Y) M0 _3 C% hl10:
( F2 ?- Q: ?* N. M$ W    uc1616(cue,mode_sel,point_display_mode,point_sel);: Z' e$ X5 @, U: B8 l9 `0 `
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
1 l. Z5 C/ P- m$ O9 e2 {7 c0 b8 e# g4 D0 f+ H
arc_coord.arc_center[0]=point_sel[0]; 6 m1 K# z. ^4 {; g7 b' s) S
arc_coord.arc_center[1]=point_sel[1]; 4 D  ?0 e" \6 X; v
arc_coord.arc_center[2]=point_sel[2];6 ?; `( C& z1 \) I3 \( g
arc_coord.start_angle = 0;& F$ y; s- R) ]1 `( B* i7 ^: a
arc_coord.end_angle = 360.0 * DEGRA;* E3 U5 p) `9 e' t
arc_coord.matrix_tag = mtxid;
- C& a+ t) j. |8 _+ ?5 k arc_coord.radius = 20;
7 f) K# H" l& h: M
! u0 K/ P  k5 s UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
1 i9 [- u; N' V6 |    UF_MODL_create_list(&objects);3 V% U' }4 ^0 D2 v
    UF_CALL(UF_MODL_put_list_item(objects,arc));% E4 C# J2 B5 G3 C# Y7 D7 t

, Y' m5 y! m: T/ l UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
7 Z9 q5 L' y1 n( D+ } if (response == UF_UI_OK )
- \6 ]2 p: k/ p0 d9 B- |' r {8 y; j8 \5 m: Z0 b  p( v
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));1 @0 b+ y% t$ }# `$ u3 i
}- Q) G" k/ {7 t1 g) B+ j; q
else
3 L5 i, U7 a& _# x1 Q; u$ H {
/ k: G9 r! Y6 k  return;
9 u" l* \. e. ^5 C! t* q1 {- n' U }
4 k& M6 K& r- s) k' B& I6 @( p% m8 o goto l10;
' D6 L% ]; X0 R( W% B
* S& E  }. G+ I( x    /* Terminate the API environment */. t& v# `' R; q7 `  O0 r
    UF_CALL(UF_terminate());- i( \8 C/ e$ M, n, l6 |( I$ O! W
}
8 [0 Y9 R# d  J* p3 m! _/*****************************************************************************
6 Y6 Y( l* V) {: l& s" k; i- s**  Utilities3 B/ f! x" U: J; K5 J- ^" X
*****************************************************************************/
/ o, S, K4 X# Q# d7 F3 m% i' d" b/* Unload Handler
) e* `" L# \9 y" m9 k; w! S**     This function specifies when to unload your application from Unigraphics.8 e9 M" g+ K- F+ u3 u" ^- s
**     If your application registers a callback (from a MenuScript item or a
  A2 q' j( p' d9 @. \4 {- z" E**     User Defined Object for example), this function MUST return$ S1 L1 u& @* i: t  T8 }9 L3 U4 D: ^
**     "UF_UNLOAD_UG_TERMINATE". */
4 G7 x' ?: h1 u+ v2 ]extern int ufusr_ask_unload( void )" M0 O% v% R. q2 p7 g: h
{! y1 Q% k1 P7 r! x- w& s
    return( UF_UNLOAD_IMMEDIATELY );' Q% P1 z" E/ y2 ^3 l5 z: C' J
}
0 w: d: q- O- C: e% _5 k* ]' F  K
" @' C( K2 {: g  p8 @5 A9 X6 |, g# n# `3 Z

0 @4 D/ O, j6 o# o: w6 f

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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
& Y( o' q. i4 d; C4 B1 e0 r3 H8 x% n& S& W: R0 q4 {
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
5 p0 [6 g! l% A% D9 S% h, a( m5 s/ G5 t3 P9 k' ]
这个你需要多试试,首先把你通过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);                              
1 K4 i% K7 O4 `8 [UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
+ ~! h) C! g& B8 S& NUF_CSYS_ask_matrix_values(matrix_id,matrix_values);    % |5 q$ `& a1 h% e: `
UF_MTX3_x_vec(matrix_values,x_vec);                  : ~- c# X$ l* Q2 X
UF_MTX3_y_vec(matrix_values,y_vec);
- n# q! {8 |+ `! \, PUF_MTX3_z_vec(matrix_values,z_vec);
# m: o& T0 B* t" lUF_MTX3_initialize(x_vec,y_vec,mtx);               
; S7 V1 `: i- s, Y5 w; WUF_CSYS_create_matrix(mtx,&mtxid);
# E0 j$ ~: d/ d$ v% Q/ X# Y) L8 iUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
& d" R- |1 {) G. z8 T/ {UF_CSYS_set_wcs(csys);  
: ?, V# I+ q, c3 }4 @/ Z) g
0 k7 a, ?7 w( N7 o- M: V9 [& _$ ]% L; f4 D( I
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联! p; M0 H* R% g0 g% z& C( ~

! ]5 ?3 [: h' X, B5 E# ~; K不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了