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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。! d  m7 {/ r; m# t
    #include <stdio.h>
4 g' a0 k! h* t- R" v, {#include <stdarg.h>
5 ^! y$ _7 m1 i1 T& }#include <uf.h>! g# i" {4 S$ n1 g- q- N1 e
#include <uf_ui.h>1 V! U$ D& ]& j; ?  P2 f
#include <uf_curve.h>) r3 U6 a% h. J
#include <uf_modl.h>
3 r8 m1 q7 e+ Y  i& y8 F+ I7 x#include <uf_mtx.h># Y" U0 w# W# R( [, A8 e
#include <uf_csys.h>) i, n# d: I4 p: C& j

8 f. \. }- x5 j6 v; U& Fstatic void ECHO(char *format, ...)0 n/ n5 }/ d2 p) g6 V5 X
{$ g/ b0 G1 Q( n' ?
    char msg[UF_UI_MAX_STRING_LEN+1];
% V# Y( h% p% c7 Y% q2 e( q    va_list args;  [) X2 T3 h1 s2 d6 H
    va_start(args, format);
- k! f2 M% j1 U6 Q  f# q    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);' T0 r- ]9 b6 r; S1 m
    va_end(args);
4 e. o" h1 w( e    UF_UI_open_listing_window();+ u0 e, g: A" A! b5 T; @5 W* |! [& N% g
    UF_UI_write_listing_window(msg);
  R+ `& o: q! c; {0 v; r; {    UF_print_syslog(msg, FALSE);5 Y# Y$ u( _, l$ r* o  b
}
( H! |1 i, W2 D1 e# o. `6 l9 ~0 j' z#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))) B; }" @3 K3 B; T8 w
static int report_error( char *file, int line, char *call, int irc)
! b7 I# V5 W! U# B$ |; }{
6 q# W, I8 m; E0 R2 g3 r    if (irc)" N% F  A$ W& W$ N& N
    {
' H; R6 s* [% M6 ]6 P8 f        char err[133];
# A+ R! }  h, Z$ \, B1 t        UF_get_fail_message(irc, err);
! |. S) v6 \+ U; e5 h3 p# o        ECHO("*** ERROR code %d at line %d in %s:\n",
$ ?7 W: E/ u( ^1 c2 N            irc, line, file);
. P7 E* o  F% ]0 M% T5 e$ x* d9 C' C        ECHO("+++ %s\n", err);
5 q6 H9 j3 _- F4 y9 X0 ~        ECHO("%s;\n", call);7 }1 D8 X5 E( f3 W( S+ C! |
    }
6 k9 A8 N  m8 W; L    return(irc);2 K3 S5 N2 Q) _* m" b' w2 a
}
0 t' y( \9 b# o- ?
3 n8 s6 g/ D' ?* I: x6 z. Q/*****************************************************************************
/ F3 n9 G4 K: U' g**  Activation Methods. g  z  F6 ^1 H' |" k
*****************************************************************************/7 A# U* D) X( i% |0 C) l
/*  Explicit Activation
9 v: ~- S& C) X  p0 V**      This entry point is used to activate the application explicitly, as in$ i, V0 [6 k& c( w6 e( H
**      "File->Execute UG/Open->User Function..." */3 o9 {' e% v+ G- K0 y7 D0 Z; t
8 E7 T1 r6 }0 }& O

; N( O( _- |2 y* ?6 ytag_t oldwcs = null_tag;+ t: a0 V+ ]4 O$ g
double origin [3] = {0,0,0};
7 [; \# N( c* O% Y3 P* R5 x! {6 ytag_t csys = null_tag;6 {6 N. D- o  y2 w" p2 h
tag_t  matrix_id;
" S3 |1 r) g# Z' x4 ?double csys_origin [3] ;$ K5 k4 r6 @% g! R: V- d
double matrix_values [9] ;5 c/ r) q# ?# H% ~
double x_vec [3];4 F$ q/ @. ?$ `7 n
double y_vec [3];: q) Q9 d8 ^* k4 x- W' \
double z_vec [3];- S  r" t$ c$ @5 }. [) B( @7 @
double mtx [9];4 N9 t6 I0 @+ y0 M" H
tag_t  mtxid = null_tag;  U: \2 P. k* ~9 P+ K8 e
tag_t arc = null_tag;
3 V/ l) r1 P- j7 gUF_CURVE_arc_t  arc_coord;
0 y- N4 p& d5 T/ G$ j, d. e* j: I" D7 Cdouble origincenter [3] = {0,0,0};
) x( w4 B$ i8 t3 }0 muf_list_p_t objects;( Z4 d4 y/ c# F1 m' y' k3 _! z- d
char  *taper_angle = "0";
8 z5 A( t7 M4 [+ m" W) mchar * limit [ 2 ] = {"0","60"};- B$ S2 p5 r. Q3 x9 _4 d% Q
double point [3]  = {0,0,0};
+ G: w! C6 V% C//double direction [ 3 ] = {0,0,1};
0 A- \  x+ O7 s1 Z$ K; |& d# ?
4 k8 L+ I3 y* Nuf_list_p_t features;
2 I$ ], S: }4 l. Z  }9 L: t0 ^9 W& bchar * message = "vector";
& N1 T! i# {- @int  mode = UF_UI_INFERRED ;6 o# D0 `2 Y6 q" A1 s$ \" v
double direction [3];
5 L/ c0 R4 {2 _' N" Y$ w5 @double origin [3];
5 B& h/ X0 j4 `  Q! z' d! N3 Z7 u2 wint response;8 e# m/ M: ~$ _+ d
char * cue ="point";
6 @" S9 C6 u+ Z2 ~& m6 ~int mode_sel [ 2 ] = {1,0};
' ]/ i, `  B& x3 p* ?int point_display_mode = 1;; O5 ]# t) n9 N( @
double point_sel [3];
% E' t4 r5 ]$ c) I6 X! W; q//double outputpoint[3];2 @1 U- h+ Z- g7 @7 g! F9 |
3 Y5 K% E" f, E- y, j
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
. v4 H1 [4 l7 D2 |{
$ d' o8 l# F+ \    /* Initialize the API environment */
4 Z# F! }( N0 v2 T/ i# j$ v% @    if( UF_CALL(UF_initialize()) ) * m6 Z9 R6 E) B
    {
! P4 I; U. G) U; S! E. c        /* Failed to initialize */# g& E  a7 s4 O
        return;
) W% I) j3 y5 u  w+ @5 n% A    }, I+ P9 d0 x$ H0 q8 H* |* S
   
3 l. G7 g5 a+ M9 O    /* TODO: Add your application code here */
7 n  Y0 n/ m+ Y
) Q& g0 J3 ^9 B$ H UF_CSYS_ask_wcs(&oldwcs);                              
* P3 p, r: {+ `  `9 C5 `5 A UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   ( T" y/ L0 v4 t' v
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
  x, {4 e; h1 M8 o+ L UF_MTX3_x_vec(matrix_values,x_vec);                  & J' q5 j5 b" _
UF_MTX3_y_vec(matrix_values,y_vec);
) [4 _( j- z) N0 H3 w( k/ r UF_MTX3_z_vec(matrix_values,z_vec);
4 M; e2 V) F$ ~$ D" G; ~0 f- j2 w- R UF_MTX3_initialize(x_vec,y_vec,mtx);               ) L( ?  r' B, v& |' s
UF_CSYS_create_matrix(mtx,&mtxid);
% K7 c; X( q& H8 ? UF_CSYS_create_csys(csys_origin,mtxid,&csys);    + h2 b1 m1 i9 W
UF_CSYS_set_wcs(csys);  
* L  o- S* Q: `7 W  z- e1 G
/ C5 n7 A! s$ D# x9 s) [) x) j! D2 {
* I- E0 W. A0 s6 ~- o2 Tl10:
! l! e& ]/ M$ D  p1 {& b5 A    uc1616(cue,mode_sel,point_display_mode,point_sel);
  S0 K$ e- M: f4 M. Y //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);( t5 n6 G" ~  Y0 |2 \% d
3 z8 _) f8 n6 F) L" w
arc_coord.arc_center[0]=point_sel[0]; 6 J! }8 v5 U' ~: t2 T- V1 O0 O7 ~
arc_coord.arc_center[1]=point_sel[1];
# m4 T, d4 C- W# F arc_coord.arc_center[2]=point_sel[2];
; T+ n" l2 D: n! S, { arc_coord.start_angle = 0;
7 r% b0 L( w0 H1 j& v6 X arc_coord.end_angle = 360.0 * DEGRA;
( Q  |2 V9 `  \9 t. d  F& y& o/ p3 V arc_coord.matrix_tag = mtxid;& x* c- ?' W/ o6 ]) u
arc_coord.radius = 20;
- d. k- O. K& U4 l$ r( f! {7 @
5 x- M4 {- y3 L9 i5 v1 x' l# n UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));! p9 b6 r4 O' U2 ~& Y
    UF_MODL_create_list(&objects);
, V7 U- m! F" V9 b    UF_CALL(UF_MODL_put_list_item(objects,arc));4 D. C: [0 }( b$ F+ s, {# C

4 o( b& H$ ~) o1 J6 K3 B UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);0 T8 H& P2 \9 g* V
if (response == UF_UI_OK ); `5 x7 N) Q+ }, b/ T
{0 D! h0 m4 |5 T, N
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
( O" L2 j4 _  u! I" S7 h) y }/ W. }; ~  }3 m* T  S; T
else7 e9 y3 t# n# Z, u( n  x
{5 ^0 Q. l( g! F  R" Y$ M8 L
  return;
/ _( X* F8 j7 @9 G' H }
) E( F1 s! r1 Z goto l10;7 a! v- X. Z. |8 i# `: E' A- \

/ Q, t7 M8 ^" M) ?$ `    /* Terminate the API environment */) ]' |4 |3 s# G" V! k: O, _  [3 _
    UF_CALL(UF_terminate());" y! C( @. E% }; R0 r
}
$ I0 d* W) y. t' Z- `- N! f& ^/*****************************************************************************! }8 l7 a- |% h5 I7 |( j" J
**  Utilities
9 U: |% i  z3 ]9 U7 i& R. H2 [  e7 Q*****************************************************************************/
% I2 f3 B8 V" j$ E2 x/* Unload Handler8 n$ t4 i  `: b% L
**     This function specifies when to unload your application from Unigraphics.
/ y1 K; q7 W% s2 W/ z7 j  g**     If your application registers a callback (from a MenuScript item or a
# x5 C; K5 o' w**     User Defined Object for example), this function MUST return
5 y% f4 y' S& n**     "UF_UNLOAD_UG_TERMINATE". */
- a  o" F  ~# V) |extern int ufusr_ask_unload( void ): C4 y, r7 L2 F# R' b
{6 R6 ^; P; B1 H9 V
    return( UF_UNLOAD_IMMEDIATELY );
: h) k0 c3 }: T( J0 ]" o}; a8 W- T2 i0 o
- A* I( T$ c7 R' M3 k. V
+ e# ~2 N6 H- ]) R; w
2 L3 ~$ e; w; t9 _

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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+ E# D2 q$ E
, z7 _, V# G$ t你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
3 z" H: g7 F1 b
0 Y. R" M! q0 p5 ?  `% n这个你需要多试试,首先把你通过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);                              
( a1 I1 n8 y( VUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
2 D# k" S: _% a9 l! m/ z! Q9 yUF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
# E5 P) U, g* N2 _0 EUF_MTX3_x_vec(matrix_values,x_vec);                  
0 X7 P9 u8 R& m  G2 nUF_MTX3_y_vec(matrix_values,y_vec);7 j0 c) b4 I: }* g
UF_MTX3_z_vec(matrix_values,z_vec);2 H, l6 B! o+ ?0 X
UF_MTX3_initialize(x_vec,y_vec,mtx);               
' z8 J( z/ z+ U2 c2 oUF_CSYS_create_matrix(mtx,&mtxid);
7 p- O/ L1 O# E) lUF_CSYS_create_csys(csys_origin,mtxid,&csys);    & V/ g3 r8 A0 }* M+ a8 _7 I! o
UF_CSYS_set_wcs(csys);  6 d0 z' V* L) ]" J1 K$ ~& G  Q
. f; `4 O2 `. t( P- T$ c) p
/ F" ~7 g) t  e
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
/ ^  O/ ?# S/ Q. _( Y6 a* h! B/ i$ F0 k/ `" ~" W9 d0 }
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了