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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。, i7 h3 n  J( I
    #include <stdio.h>
, W/ E9 o% q, S' M/ U+ p8 \. S#include <stdarg.h>. E4 i2 Z8 u% ~/ h- Y' Y: _" M
#include <uf.h>9 x! |; A  W0 u, r
#include <uf_ui.h>
$ F0 D/ D7 v2 }5 |$ K# `#include <uf_curve.h>; K5 K  k4 e4 J
#include <uf_modl.h>
+ N, a1 g* v5 d+ z5 V' ~% i#include <uf_mtx.h>
9 S- a. r+ J7 `6 D  O; ?) q#include <uf_csys.h>, Q( H$ X0 P. c" v

$ @0 C0 x: v2 G, J% v9 Jstatic void ECHO(char *format, ...)
% X: y* k* l# }, g, t4 G{( q) F9 x4 D4 K
    char msg[UF_UI_MAX_STRING_LEN+1];# h4 v& h& Z. t  n7 Z( H
    va_list args;* y4 W# e  \6 O  y$ Y) M
    va_start(args, format);) V, t# R+ P5 i! \- `* F+ P
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
& V2 t0 ^( \, d4 G+ h. q, O; j$ S# I3 p    va_end(args);8 K( s3 C: D- L& }
    UF_UI_open_listing_window();
! Y% F6 X+ ^  ^, {    UF_UI_write_listing_window(msg);
* ~$ ]4 p6 Y  P5 b* _% A9 O    UF_print_syslog(msg, FALSE);
0 x0 ?& u* m; j' s. ^}
- Z" l8 F6 \- v4 a& V& J#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
! Q! w7 W, ?6 U* u4 }/ b- Fstatic int report_error( char *file, int line, char *call, int irc)
- a4 L$ m- i/ {& G! Z# B$ Z$ n2 ~{
. m& h0 h% ]1 n* [& |/ }    if (irc)
" x# H  [# c! F6 `    {4 p, k4 z: e; X3 `2 u
        char err[133];
& h7 M$ V, q5 I+ m% _3 _        UF_get_fail_message(irc, err);+ Z2 H2 v! e/ |9 k% V: u
        ECHO("*** ERROR code %d at line %d in %s:\n",* R$ `9 R' F: |$ @- c
            irc, line, file);' Z' d& x% B) V) I9 ^4 J
        ECHO("+++ %s\n", err);
3 M: L; z( h: a6 M3 O        ECHO("%s;\n", call);
8 L( _; `3 X3 H  h  ^    }
& X- `& b$ _0 ^1 Q    return(irc);; o$ A6 z- v5 V: ~# K
}! x! [) _' ~5 |
2 ~" d, _( u9 R2 w
/*****************************************************************************# w. \! w2 A4 F9 l4 e5 c
**  Activation Methods
/ ?- o/ k# `! y9 F*****************************************************************************/0 l$ I+ q+ F8 ~' `9 i& p: k+ a
/*  Explicit Activation
7 [( Y4 t: t, G8 t' T" v4 m% t! v**      This entry point is used to activate the application explicitly, as in
0 @: W$ o' o% r9 q2 s/ x**      "File->Execute UG/Open->User Function..." */
! H8 w% g; f4 t7 [+ Y1 E( _# I  |* M; K8 r; M) r( N
; t* w4 n) q/ A" M6 Z6 W0 B/ ]! g& g( q" Q6 j
tag_t oldwcs = null_tag;
: X7 a! s8 G  K; [double origin [3] = {0,0,0};% U  z, I2 k& \) W
tag_t csys = null_tag;! g8 O" c! J4 w9 O4 S
tag_t  matrix_id; # y, c* x8 a0 L' e! `
double csys_origin [3] ;
  g# O, C8 ^" t% @double matrix_values [9] ;
1 a5 O& ?  ^' O& n  S  u5 @% p# xdouble x_vec [3];/ d  R1 E0 Y1 v3 l
double y_vec [3];
: K( V4 i4 X# P* Adouble z_vec [3];
. A5 j! ~+ L" ~9 a  H1 }double mtx [9];
2 n# G2 ]: O0 B! K" M, P3 `" Otag_t  mtxid = null_tag;
0 m0 X' i9 k2 ~  D' Ztag_t arc = null_tag;
* |5 }, Q2 r5 @UF_CURVE_arc_t  arc_coord;, D/ q3 @6 i- k5 v2 b
double origincenter [3] = {0,0,0};! E0 q( Y6 B8 k" [* X
uf_list_p_t objects;
1 X6 ]0 O$ p( g0 y% F. pchar  *taper_angle = "0";
8 }* a" [3 c% T# qchar * limit [ 2 ] = {"0","60"};( P9 p+ y- v% m$ l! s. u: y
double point [3]  = {0,0,0};8 t8 M1 d+ |- N( V8 `
//double direction [ 3 ] = {0,0,1};( L( c2 Z, y& c5 V1 n0 g1 h

4 y+ W/ v8 ^% ~6 guf_list_p_t features;
- f7 u! ~# F9 u0 w: H# qchar * message = "vector";
( U1 s5 C8 E8 ~; S1 {int  mode = UF_UI_INFERRED ;
( C" w' r: G1 X  \# gdouble direction [3]; 1 @3 Y$ i: Q# G) v; Q+ q9 t
double origin [3];
* m0 X5 [) f1 z4 u5 T7 O( \8 ]) g5 Hint response;" a. Z$ d/ W9 M0 \# w5 [% B% q
char * cue ="point";
+ {9 F& S. D; a( P4 Zint mode_sel [ 2 ] = {1,0}; 8 I9 z" G- s; M0 h! z
int point_display_mode = 1;
4 }6 v5 j6 I7 Y" b% y; P. _$ Fdouble point_sel [3];
9 V! ?: u% y/ h//double outputpoint[3];  Z+ {" w, ]" F) X

5 d- ?* s3 c  z1 f. s5 R" q9 J2 P+ ?extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
) F9 u$ B9 M7 E5 h; e6 Y9 u$ Y; T{
- G! I( Q1 l0 u! ^    /* Initialize the API environment */
) f0 }6 M" x8 u8 b% W. y9 c: X    if( UF_CALL(UF_initialize()) )   _4 G; u% C2 m1 c
    {, q) l4 }  J6 c1 l* O% G4 R
        /* Failed to initialize */
3 w1 Q. o# M: f" u% S' b$ a        return;8 L) a9 w- k8 a! z- F
    }! `, M8 v8 i: K
   
7 F/ m- K* p" J4 h    /* TODO: Add your application code here */' N; _% ]" a6 s) |6 H% Y4 @

* ]" e2 C2 w" E: a2 h; h UF_CSYS_ask_wcs(&oldwcs);                              
8 ~) ^, W3 w8 \( k9 h UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
& t5 w: N! H4 p" D+ @( u2 M5 A# o7 @ UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
. ]% M- n( T8 Z5 N- O UF_MTX3_x_vec(matrix_values,x_vec);                  # B! F) U7 c) S2 D5 F. p5 i
UF_MTX3_y_vec(matrix_values,y_vec);+ {- O9 D# W# b6 c; [1 r# d
UF_MTX3_z_vec(matrix_values,z_vec);
: j" ^. B) U% E1 B( N# L7 B% I3 }: m UF_MTX3_initialize(x_vec,y_vec,mtx);               
3 v# Q' y# [9 U, I; m; Y UF_CSYS_create_matrix(mtx,&mtxid);
) m# L3 v" r" Q' ?& o! Y( Q UF_CSYS_create_csys(csys_origin,mtxid,&csys);    ; x5 A- U0 P  ~5 \/ R0 y4 e+ M" N# h
UF_CSYS_set_wcs(csys);  8 c9 P4 B& I' V5 ?- m
5 c; ]2 F* e- ^( ]0 M4 K& T- F

- A5 l8 ?  b' H0 d$ @4 Rl10:
, B8 \7 E+ Z# m$ H    uc1616(cue,mode_sel,point_display_mode,point_sel);
) }1 I' @9 _! ~2 I4 `2 Z //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
8 `8 m* `* N( _% m& U# L! s
- Q& E: h* s, \1 {& i6 s arc_coord.arc_center[0]=point_sel[0]; % h- u/ w( ~9 R0 R: _
arc_coord.arc_center[1]=point_sel[1]; 4 ?9 u7 d6 [+ O# F8 _) p9 I& ~4 t
arc_coord.arc_center[2]=point_sel[2];7 Q( q+ {3 ~, t. _5 N
arc_coord.start_angle = 0;
, Q+ ~# |* d. W- n arc_coord.end_angle = 360.0 * DEGRA;
' V7 P' |6 @, H( g+ c' Z, |9 J arc_coord.matrix_tag = mtxid;
) B# l6 q/ X1 ~: M arc_coord.radius = 20;2 k( D# a/ C5 @( Y

( C* s, s  L: i UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));7 E# d" ]4 `% g' \! o% s( ^
    UF_MODL_create_list(&objects);
+ H7 l+ o0 P" O# N& N; ~" `+ k    UF_CALL(UF_MODL_put_list_item(objects,arc));
2 Z5 U" W$ Q; F  O4 a* W! a3 G2 [0 d! K) c3 T# a0 ?
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
9 P- `7 _# o; y  N2 P  c  p5 m5 Z if (response == UF_UI_OK )7 U4 d. X$ }4 \  |% H
{
" X* Z. T2 y. V  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));8 T+ [% Q1 _3 u+ L$ \9 ]
}
. j  V/ \0 m2 C+ @1 Y! h4 N  f else/ D9 [; p* o- V- j0 M/ _
{
. U* R5 a; \/ y7 I9 H# c  return;
  c! W' d& }; H! F1 X }
! e! r8 v; U8 a goto l10;0 r2 ?) y: j- ]! F/ \
' }0 P  z$ d: D" w6 k
    /* Terminate the API environment */
0 g: O8 C; U* P2 r! R    UF_CALL(UF_terminate());
5 A! C7 a  S8 R; S}
" s9 l" I0 K6 z9 M/*****************************************************************************
! `0 |/ G; M( |& D0 r: b**  Utilities
8 X' R  g( }: K, R" \7 e& m*****************************************************************************/
- R2 J2 L) h6 T. M1 c& L/* Unload Handler
( I9 `6 e( {' f7 X. e**     This function specifies when to unload your application from Unigraphics.) I$ D# ^& D4 @& E
**     If your application registers a callback (from a MenuScript item or a( x1 X7 i- R' w: y5 Q
**     User Defined Object for example), this function MUST return2 H2 P$ D! x# n' ~! v$ x
**     "UF_UNLOAD_UG_TERMINATE". */
/ h2 J; d! Y8 n2 R7 o" i9 S) c5 textern int ufusr_ask_unload( void )7 w) E2 p, s! f/ N5 l
{
; {5 O) I  R9 I    return( UF_UNLOAD_IMMEDIATELY );) J/ q; v2 d. l- w  w
}
, d. `+ `2 I1 B) `8 l! z! t0 B7 U$ H1 r: O
5 ~# L+ S) D% A1 y2 d/ X

- j. k6 {4 |& R) 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
* k+ G7 U' U5 ]8 u
1 `7 M: H) U8 y' Y1 W) k4 }! `你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
1 \8 x' {8 J) W% C- X* ^
' A3 s9 ^" U8 J/ X) j这个你需要多试试,首先把你通过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);                              
/ V6 k! d, f3 ^. }8 |) cUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
) C: t* K% O: B5 M* hUF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
& m2 G& t0 r; G3 E3 d  kUF_MTX3_x_vec(matrix_values,x_vec);                  - R9 t& w, J" ?
UF_MTX3_y_vec(matrix_values,y_vec);
) L( x& r* q; ~9 o& @# zUF_MTX3_z_vec(matrix_values,z_vec);
  g, j, c+ ?* j8 K' F2 X+ RUF_MTX3_initialize(x_vec,y_vec,mtx);                 }( l/ H1 ~3 k/ w# S) J
UF_CSYS_create_matrix(mtx,&mtxid);
/ M! f# w- Y7 N: mUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
* J  T, n, ]& H& |  e' gUF_CSYS_set_wcs(csys);  & T. o% U9 W5 g) q2 A/ D

; F- q" ~$ M9 n) r' O! \
. h% I7 m- `4 w4 B5 }! |7 d6 z这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联6 @' u$ M2 q" A

' }9 L' j7 R0 w. V) N8 R; P) C不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了