PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。4 t$ Q  |( A4 V7 h- X1 \
    #include <stdio.h>
/ P& Q) T& n4 K: U: b  Z& x#include <stdarg.h>
; k7 E/ {0 Z% b" e3 m#include <uf.h>
; E* [) k2 A2 {#include <uf_ui.h>+ |+ k4 g4 J% ]2 X6 Q; m8 z! U# ~
#include <uf_curve.h>' H4 t9 [4 J8 @- O: w- _
#include <uf_modl.h>% _5 V; k# [! Z; Z  J
#include <uf_mtx.h>! T8 F* p$ v- M; m: c$ }
#include <uf_csys.h>
/ A& k2 }1 g* ?  G7 Q4 Z. H
6 e$ R/ p  p9 ]$ {$ p4 L. p- F- Ystatic void ECHO(char *format, ...)
7 D: r; `0 R( a{, b& o% E, B: y/ b: q
    char msg[UF_UI_MAX_STRING_LEN+1];
4 T& ^2 M  t5 @, V. E) f! {2 b    va_list args;6 ]1 w: X4 h/ Q$ x' s
    va_start(args, format);9 D7 M7 m* L8 A5 Z4 p
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
3 \$ Y. w8 L  H7 d4 T    va_end(args);
0 h% H* p3 ?$ u- k1 k    UF_UI_open_listing_window();# H) S4 [) w* ^6 e
    UF_UI_write_listing_window(msg);' X% M% j4 k; e- ]5 J
    UF_print_syslog(msg, FALSE);
9 s0 `5 A( P' Y8 w% g0 _( {}% B  z- L, P+ y6 ~
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
0 X1 Q5 ]5 Y  G& qstatic int report_error( char *file, int line, char *call, int irc)5 A' J% b% h5 r& b" q9 y8 Z) q
{
7 ]: j6 k$ T" ?% d    if (irc)0 @+ e# o2 v- I, ]
    {' W6 {7 k8 R# G- D, p
        char err[133];
6 K* n+ c; Y2 s        UF_get_fail_message(irc, err);
; n7 J6 K4 x3 V! V9 U  |        ECHO("*** ERROR code %d at line %d in %s:\n",
% p, L/ Z. |6 w. v# [            irc, line, file);: J8 z' C0 `7 u
        ECHO("+++ %s\n", err);
0 s( y/ W1 [7 z  d$ S' w* ^        ECHO("%s;\n", call);
" `! k( g; e! G0 g    }: Z% @; k8 D# P8 C
    return(irc);
% X* P7 @$ i, w; F3 X/ o. N% l! ?3 y}
5 L& o6 S& `5 t% v6 y/ t  r
5 C' p4 H* e1 {% Q; Q/*****************************************************************************+ ?2 f  Y0 s8 s+ E
**  Activation Methods/ F: t5 M4 k5 }! J4 ^
*****************************************************************************/9 }7 J; |) Y; j0 h. A# h
/*  Explicit Activation$ u6 y3 {, b3 u4 f0 W4 K1 @/ H
**      This entry point is used to activate the application explicitly, as in
. ^6 w# C+ \% N- H9 J**      "File->Execute UG/Open->User Function..." */
9 w0 M1 \9 A0 U3 [' L: K9 H$ v( @$ n- A3 q8 v7 A
5 f. z# h- X3 e! o  P0 r
tag_t oldwcs = null_tag;
4 K# `) D( R3 g; L! ?double origin [3] = {0,0,0};
3 W% [: L" @3 {/ i7 S/ d# xtag_t csys = null_tag;! q' v2 ^& K% o
tag_t  matrix_id;
" H' [- k! [, K2 y  E( cdouble csys_origin [3] ;- I0 b& h" g* Q- A1 P8 S  d7 A
double matrix_values [9] ;, S+ B6 m" ]( o8 k$ H: V
double x_vec [3];
- n' [8 c4 `/ Y/ S# tdouble y_vec [3];
# Q  p% R$ Y% a  B$ ldouble z_vec [3];9 ^3 n5 ~0 x+ h3 Z9 K/ j7 Z
double mtx [9];
9 p/ E5 F! f$ B' |tag_t  mtxid = null_tag;% A) q- X% [. i0 C& x; Z' K2 C9 ]
tag_t arc = null_tag;
2 U0 [  W. c( L3 X7 ]& \# x3 FUF_CURVE_arc_t  arc_coord;
4 y' v9 c' {7 o* d* h% @& Vdouble origincenter [3] = {0,0,0};& ~: f4 `4 I) O9 h& N8 C$ J
uf_list_p_t objects;7 X: ~6 u5 P* W1 J) M: u
char  *taper_angle = "0";: k0 \7 C8 w% }" ]5 [
char * limit [ 2 ] = {"0","60"};
: B! |' B) J( o* K, bdouble point [3]  = {0,0,0};
3 e# a) b" y* \' p//double direction [ 3 ] = {0,0,1};3 n! c3 B# O& }& G3 f; }1 `
6 b4 n+ I3 f2 R! ?- M( M
uf_list_p_t features;" `6 @/ A* F. D! V: x3 P& @
char * message = "vector";
5 x+ i- h0 _) ?2 t7 u( Zint  mode = UF_UI_INFERRED ;
/ e4 p. W* x7 U/ j9 Idouble direction [3];
9 m! g) F( {  _) M& b0 Jdouble origin [3];
, ^" }1 R/ W2 Q1 n, U1 h+ Nint response;
" \. h. ?1 K, B, V) V5 Ichar * cue ="point";
( H* @; o/ ^. r" i: g. uint mode_sel [ 2 ] = {1,0}; 6 p' l' @/ J6 {9 x1 I4 t" o4 B# W! p+ ?
int point_display_mode = 1;
' i- @7 L! N# q$ q3 m7 N7 X4 gdouble point_sel [3];
' M$ x1 j0 a' N5 g, D& G//double outputpoint[3];9 E2 L9 t* i* J# S, v4 Z- P5 e

) ]! u' P( L) `% l: [$ Zextern DllExport void ufusr( char *parm, int *returnCode, int rlen ). g& E$ h- N' J
{# f6 u: w) _4 P; T2 |) z6 B7 g) a' W
    /* Initialize the API environment */
4 o" u6 y9 ?" {% r4 r. ~    if( UF_CALL(UF_initialize()) )   V) ?3 s/ Y6 z* B2 d) {
    {! S) M. H' c5 \4 o' K% C& M
        /* Failed to initialize */' ?: q6 K9 p1 @, i
        return;
. Y( Y4 `2 i9 S, }    }7 m1 C  h* ~5 t' b3 A
   
1 T0 W( e3 q; a; z  D    /* TODO: Add your application code here */! ?5 ?9 I: ]/ G, [
5 v$ b& E, a3 e" Q! |
UF_CSYS_ask_wcs(&oldwcs);                              
- K/ k9 ~; _$ r; g" Y; K0 [ UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);     p4 v  L4 E: S2 V8 d  U( e' ^
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    % T6 W+ F$ ], }! ^
UF_MTX3_x_vec(matrix_values,x_vec);                  
, i# o4 O9 s0 Y0 v5 F UF_MTX3_y_vec(matrix_values,y_vec);
6 h1 ^& L9 j4 G+ V2 A UF_MTX3_z_vec(matrix_values,z_vec);2 I8 ?- d" N5 R1 N/ ~, w$ m( q
UF_MTX3_initialize(x_vec,y_vec,mtx);               6 u4 _& s- y0 o1 i' x5 p
UF_CSYS_create_matrix(mtx,&mtxid);: z: {0 G! Z, y; m  z; y
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
" g3 b( K; e+ g! Z7 ` UF_CSYS_set_wcs(csys);  
# f4 @6 E# d0 j0 a # {9 u! H2 m. e9 ~; P% P0 h
# g+ u0 X: {; S5 M0 V; @" o' L
l10:! G- ]* n0 g& C% |
    uc1616(cue,mode_sel,point_display_mode,point_sel);
9 V( A; f. M/ h- K1 z3 b, o' A //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
0 \  L5 \7 F) n) }. X
) y0 c3 q6 ?4 d! O# A arc_coord.arc_center[0]=point_sel[0];
6 T& f$ O$ ^9 |, o& Y+ l% E arc_coord.arc_center[1]=point_sel[1];
: X) ?( G/ F5 `% c. K arc_coord.arc_center[2]=point_sel[2];
8 _. v; I$ E1 W4 |/ c arc_coord.start_angle = 0;
$ A5 @& U3 h( A2 T" ~' y arc_coord.end_angle = 360.0 * DEGRA;! [+ z5 e, G$ r3 n7 ]% p' Z; n8 H
arc_coord.matrix_tag = mtxid;! R& ^. r% C, n5 _$ ?7 f& I8 E
arc_coord.radius = 20;
& \" A& _: b2 }$ P! i
4 U2 `' @+ {$ L UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));  v; M: A! D; M9 g/ ^6 p
    UF_MODL_create_list(&objects);/ e, O+ ^0 J9 e3 c8 z4 [
    UF_CALL(UF_MODL_put_list_item(objects,arc));% C1 {4 z- S. _- @7 f. ]

) W$ a% f7 ~3 e: ?4 `- @& Z UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);7 v/ p0 `2 d$ g* Q( S
if (response == UF_UI_OK )
* G* B6 Y* O6 Z. [0 C* v {) o& j/ v' ~8 Z9 I+ i) C
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));1 ~5 c0 |! `0 B5 t6 v# F# C
}$ y+ S+ l% c$ N/ S
else. [: @& l; l0 a2 w5 H3 F
{# y8 @2 e' o( @, t$ e) W
  return;
% n0 n1 [% A6 R# [0 o7 D) E9 u }
% f( C( I$ n- v goto l10;
& R  {- h( x2 O- }* s
; S/ b5 I' p$ {0 e; O! W( A    /* Terminate the API environment */
9 ?# A! t+ R" W- Y1 p; N    UF_CALL(UF_terminate());
' p& u5 L0 l5 M  x8 ~9 e}9 O0 s! k3 A1 ^& {5 Q
/*****************************************************************************5 D) q! c& c* m- U
**  Utilities
% g9 ]& Q( a4 q5 G, l( b1 w*****************************************************************************/
; m- x3 ?3 k6 z& ~4 |0 [! v4 T/* Unload Handler$ I/ ?5 J' s! W/ A# n
**     This function specifies when to unload your application from Unigraphics.9 ]$ p7 d, n9 u: [
**     If your application registers a callback (from a MenuScript item or a3 N0 T4 j; h! b, Y( W* @  C* p
**     User Defined Object for example), this function MUST return+ e0 F6 Q+ ]/ v
**     "UF_UNLOAD_UG_TERMINATE". */. d3 }8 F  ~7 J- Z0 Y5 ?+ N' m* a
extern int ufusr_ask_unload( void )
" Q" i' F6 F% ~0 p9 f{
  `/ F/ e- {  H9 g7 L) @6 w    return( UF_UNLOAD_IMMEDIATELY );! h7 D1 `* s$ E+ G% Q
}2 I6 @, I/ e: h8 I
, ]; _+ u7 k  d$ E* L, O

  }0 v* F7 Z0 e4 x( e) A5 y! h% U

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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! B! ?: a" Y; e" H3 ~9 x" T% S

6 ^2 W1 l  B# d6 F: \6 V你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换( [$ D: Q& R0 L7 J

6 [4 Q) g; K- S4 A9 z* R- y; ?0 o0 c0 e这个你需要多试试,首先把你通过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);                              
' h4 {; u3 F4 ^# q3 C3 VUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
3 P% Y" r" d6 W; ]( k+ @) EUF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
& A' ^( Y, [4 \( A4 v$ v3 V- WUF_MTX3_x_vec(matrix_values,x_vec);                  
& V* y1 X; j8 S' J, [UF_MTX3_y_vec(matrix_values,y_vec);
% H9 Q# {  F1 SUF_MTX3_z_vec(matrix_values,z_vec);3 s: @( Z$ e' H/ g
UF_MTX3_initialize(x_vec,y_vec,mtx);               9 N/ |4 P; `' f' |
UF_CSYS_create_matrix(mtx,&mtxid);
( a/ b1 V9 u0 n( Y5 R5 p: kUF_CSYS_create_csys(csys_origin,mtxid,&csys);    ) g' v6 G' \( m9 \0 |9 S1 V2 z
UF_CSYS_set_wcs(csys);  
* D5 ?& K9 ?5 _, s: a- f4 g$ G
' h5 C: R' Z  M. S, C5 T3 i% e. `# |' q
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
! |6 m2 |$ c$ B5 K. }2 @) o2 f0 d7 h0 `! B6 z
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了