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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
$ d/ a  s+ L! p, `    #include <stdio.h>4 L4 N0 v/ o; H# V' ]
#include <stdarg.h>2 X& M7 n6 ]" j2 F$ S! B4 B# q
#include <uf.h>9 i; B& t3 T) l" R9 s0 Q5 C4 h8 H6 |
#include <uf_ui.h>5 t9 I( h. r7 l# o) \
#include <uf_curve.h>
- ^3 e4 j$ W+ a+ ], t+ N#include <uf_modl.h>2 l1 G) J+ s* W
#include <uf_mtx.h>* s$ p& v7 A' @- w
#include <uf_csys.h>
3 f0 O# ^# H3 |: O& s% {# @1 Q6 _  W' s# S7 N3 ~
static void ECHO(char *format, ...)
# p6 `" v: w, K/ R3 ^+ ?; X{
( q4 u$ L  P% ]. B: U+ A6 |$ _% Z7 h    char msg[UF_UI_MAX_STRING_LEN+1];
; j* H6 O7 R7 O1 w    va_list args;* G; [) r# \8 s% b
    va_start(args, format);
! n0 O" D1 ]) O    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
) d2 ]$ w& o/ f2 p    va_end(args);
  L$ G& y: {# f7 {: q    UF_UI_open_listing_window();
& q* o* C) o1 O! i    UF_UI_write_listing_window(msg);
* r" w: f2 K, ~9 }0 m, o* c    UF_print_syslog(msg, FALSE);6 ]& w, i& v! O+ s4 ^3 F3 `1 J4 U
}
3 |4 ^  D# b0 G* n$ P) |) X1 b! i#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
" o! M; W" C6 tstatic int report_error( char *file, int line, char *call, int irc)
5 R+ P. z  F* u3 T{
! C  P2 B" A3 u. U: l    if (irc)
6 c! b. T" E* F% N    {
4 m0 M0 C6 Q# G* N( P        char err[133];4 v, s$ Q3 e( R& i8 A$ k- V
        UF_get_fail_message(irc, err);
4 g3 r3 g' T% i        ECHO("*** ERROR code %d at line %d in %s:\n",
8 W0 ?; w3 A* I2 n7 R% I3 }, ?: R            irc, line, file);- I% U- M: [3 o1 d+ P2 h/ a
        ECHO("+++ %s\n", err);5 v4 b( ?  u$ b( g1 m- ?
        ECHO("%s;\n", call);
2 W' Q# Y' y, M5 ]+ _    }. ^% x2 m; ^( d' p$ O2 D
    return(irc);
+ m* K; [( b$ N, O3 ?: T" L2 z# |: O, o}
# _6 Z5 g: y! d& H
* a2 e9 w2 k( G/*****************************************************************************# N4 c) K* t9 a3 K4 ^" j  |' @
**  Activation Methods
9 W% B6 S/ Z5 }*****************************************************************************/
) K/ R) B5 n# H8 k/ V" z/ H; [/*  Explicit Activation
6 a+ a) s8 r2 d' Z**      This entry point is used to activate the application explicitly, as in
: H, E) {3 g* c**      "File->Execute UG/Open->User Function..." */
# Q4 W: ?2 S' _9 _8 W) ?3 H: D
% j1 H! I* D: w% @8 ?# q# `& X$ X2 \+ l) r9 c% d, N( e3 K
tag_t oldwcs = null_tag;
5 r4 H: l4 m# G3 rdouble origin [3] = {0,0,0};
* i( n: j3 |* @tag_t csys = null_tag;
' x1 W) `7 _6 k' C, C& L- @! Itag_t  matrix_id;
: I, X, D7 ?8 Pdouble csys_origin [3] ;
9 f# ?9 k0 o, W/ n! kdouble matrix_values [9] ;
% `" E' k$ k$ k; idouble x_vec [3];
. B, `2 x% _; }9 hdouble y_vec [3];
2 U! z1 z, M  r( D$ b! I2 k  Vdouble z_vec [3];; k4 k8 C6 D3 l
double mtx [9];8 I" z- F$ m" Y( Y
tag_t  mtxid = null_tag;- I* o) \- m7 u, G* I' t
tag_t arc = null_tag;6 @% ~" P# k1 l: q& T& l& k
UF_CURVE_arc_t  arc_coord;
! x$ p  l4 x0 `! _/ U* g+ Hdouble origincenter [3] = {0,0,0};
# J- o  R0 h$ N% S9 C3 @& B* `0 ^uf_list_p_t objects;$ O9 Q! W! R) O* H$ s8 O
char  *taper_angle = "0";; Y1 }! I5 n& d0 ~
char * limit [ 2 ] = {"0","60"};! d1 K3 S& y: `6 w
double point [3]  = {0,0,0};# C7 |  f$ O& I4 T2 e. _& @" P
//double direction [ 3 ] = {0,0,1};
  a% I- O3 f, [0 N  e2 A) ]; S
2 M9 C3 p/ w, W/ J! _4 \" p# Q- c2 Wuf_list_p_t features;2 ?$ u4 ~% ~9 y. y( u; b0 [! @
char * message = "vector";
! m5 Q4 @6 Q  J6 @0 qint  mode = UF_UI_INFERRED ;
5 V5 F% G4 P: [* p9 o; d& p7 ?double direction [3];
; i. r, y9 i  K8 }double origin [3];
* p4 S0 Q8 r0 E1 m5 ~int response;; |+ j% j. J" j* a. b
char * cue ="point";
" [5 m  Q% \9 ^' a1 v$ Dint mode_sel [ 2 ] = {1,0};
6 K% v7 T1 \( x' l, T  tint point_display_mode = 1;" y' L, h' X0 i, @8 Q, _' O
double point_sel [3]; ) H; T" p$ v. z( r4 z( a. f# c
//double outputpoint[3];
" ?1 y( Y% s4 i2 @/ I2 F( j2 j; e2 y* ]* ]" T. l! w
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
" n9 O- c. [3 |+ B) `' d{% N% O* G  c( U$ P  |
    /* Initialize the API environment */
$ u; t. g' l& H) o! |4 D7 _3 ^" Z! |    if( UF_CALL(UF_initialize()) )
) v4 \- @" c" C( U: U8 p: Y/ O; k0 ^5 d    {/ o  k. x" B1 O
        /* Failed to initialize */
* T$ H4 U3 t" a/ R5 m7 m        return;1 s2 L; s. q! R
    }$ X! U* S3 \/ ]. x3 C) }5 C9 O
    " a4 p) r" j/ M4 @& ?2 v- k
    /* TODO: Add your application code here */: z! j; V  g2 s- W
9 k  U, G% R" f4 ~" P+ ~9 V7 W
UF_CSYS_ask_wcs(&oldwcs);                               & I6 B. e: V% o/ ~) Q
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   - B5 @7 q' w- j/ K7 @
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    $ u, w" ~6 p0 |7 r2 K
UF_MTX3_x_vec(matrix_values,x_vec);                  
" G) h* V2 i4 J8 j UF_MTX3_y_vec(matrix_values,y_vec);
& m9 m$ N/ C, g( q UF_MTX3_z_vec(matrix_values,z_vec);# R. t+ D3 q: _* H8 F
UF_MTX3_initialize(x_vec,y_vec,mtx);               
& s3 H. u* Y% U; A9 o UF_CSYS_create_matrix(mtx,&mtxid);# c& g2 u! K/ P
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
; u9 O5 y4 D2 ?7 y, R1 r UF_CSYS_set_wcs(csys);  ; T4 O9 E" I) J, g! f1 C( p

& U) Q5 |7 f  V3 x1 J
7 x" t2 C3 ]$ @" ql10:
# C. v8 C" _: f& a6 j. K    uc1616(cue,mode_sel,point_display_mode,point_sel);
4 L4 i! W! t0 u- }+ a //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
! X! t' ]- X3 J% ~9 x/ s0 C1 l6 |4 ?9 B
arc_coord.arc_center[0]=point_sel[0];
: R% S3 T; o, y6 y- b arc_coord.arc_center[1]=point_sel[1]; 9 v( d0 i7 X1 x6 e" I
arc_coord.arc_center[2]=point_sel[2];
* P" V; k6 N1 N! w$ [# @7 a: E* K1 Q arc_coord.start_angle = 0;
! e( d# j" m* R- B arc_coord.end_angle = 360.0 * DEGRA;
; u! C5 R, w' R arc_coord.matrix_tag = mtxid;
) |8 C! L- i; Y* ^8 v arc_coord.radius = 20;
9 P2 M$ z: n7 h6 @8 v 0 k+ v) ~6 ]  e
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
! P+ p2 K. _1 F; H    UF_MODL_create_list(&objects);# p2 l/ ^* x% D1 e: I' n
    UF_CALL(UF_MODL_put_list_item(objects,arc));+ V1 D6 i5 r; z
7 V' {3 F1 a0 u" `
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);: l7 v) M) @4 [' X3 s4 Q
if (response == UF_UI_OK )
, q5 c9 {( W0 S. a: M& U {; Y: B; ~1 r1 ?% f+ Z
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));' y  \4 s: ~1 q" F, B$ B+ s$ d
}
/ S  m1 Q. p, ^, ?( j: h  s- y' U else
) Y% Y/ }. L  f# {0 h9 B$ q& ~4 d {
2 R( o6 {8 D2 d4 _  return;) A7 o2 a. C8 |4 {9 N6 T: [
}+ C# o/ o- Y4 T1 l0 F: u5 R
goto l10;
. u7 f6 G# {6 j- p
2 Y. P% S6 o7 ]# u: N4 G' `, c# p5 D    /* Terminate the API environment */
; `" f( |, O; Q/ D. G0 |- c    UF_CALL(UF_terminate());
; W6 Z& t: g1 a) r$ e7 T}9 o, o  \$ {+ D! u' [
/*****************************************************************************- |) V* Z$ j' L$ D  _4 v' _$ u
**  Utilities
4 y, q/ [3 }( \6 Z. U( q; h- K*****************************************************************************/
0 x; m" @; ~% q3 {/* Unload Handler
; H9 x0 ^$ Y, `* A. [6 v# W) o**     This function specifies when to unload your application from Unigraphics.; p1 l" M" w7 x, O, j) C. N4 s
**     If your application registers a callback (from a MenuScript item or a
. z( F+ g4 H1 D( K! _**     User Defined Object for example), this function MUST return8 ]5 }/ \( Q7 h( R( a
**     "UF_UNLOAD_UG_TERMINATE". */$ M* @/ b3 D  G( ?; R$ \# J6 Z
extern int ufusr_ask_unload( void )
% l2 r: X# I# c) Y# e{
/ k4 Z8 v: l2 u- _1 Z+ G$ S% p    return( UF_UNLOAD_IMMEDIATELY );
. a' t3 S- K1 y3 v# a. ?}
2 F. d3 n( M1 r! l6 T2 \2 V; p' a+ V& y) T+ M- R
) h/ f( E+ C5 E+ l

, p. r: t5 q% T' `9 i( a! Z; m

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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+ X+ [& v/ I$ ~# v5 n# L
+ W; ]% S6 e, L3 Y
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
. e6 }0 _& w9 J' b7 a
; j9 [6 {+ }# `3 h2 Y% u+ e这个你需要多试试,首先把你通过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);                              
; f, X( P1 N# C' _0 Y) {6 UUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   2 |. p# n' m" t9 m9 m' h. g
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    3 w5 X( {" }2 s. R9 g" U
UF_MTX3_x_vec(matrix_values,x_vec);                  . x# \9 ~; b! r9 F+ _/ D9 ?
UF_MTX3_y_vec(matrix_values,y_vec);
. m4 Z9 }" e& m" M  KUF_MTX3_z_vec(matrix_values,z_vec);% X5 B- l! V, e( {0 P
UF_MTX3_initialize(x_vec,y_vec,mtx);               ) |$ d1 W7 Y' W, I* L- E; {* K1 @
UF_CSYS_create_matrix(mtx,&mtxid);1 o- l) |* R& |0 ~, ]& N' H
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
3 Y$ D& ?8 y8 `; ~UF_CSYS_set_wcs(csys);  3 b# ]  O. f$ G; k
) A: D/ t2 y6 G0 F: A5 w
/ u6 m" Y" Z9 {0 P8 U9 V
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联4 c0 A9 @2 l& Y4 ^) a! @$ E
7 \* c: n  x' r0 X
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了