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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。& J: v+ R6 L. v5 D" m
    #include <stdio.h>
- Y2 c( w  K4 m8 J) v#include <stdarg.h>
' \) e1 f- ?( X2 x7 K+ V6 c% ?#include <uf.h>
% r& c0 O2 j3 s2 n- u- K8 W#include <uf_ui.h># F, `1 F7 ~" [# A% Q' b4 ~' m$ Y
#include <uf_curve.h>
" |! b  [9 \) R- W#include <uf_modl.h>
' ?* k: J& G# z#include <uf_mtx.h>/ U6 e0 d# H2 |
#include <uf_csys.h>5 D+ N8 S" \6 X
4 H' q0 H9 s. C/ g' e, h
static void ECHO(char *format, ...)
0 y4 S% a0 f! B9 X{9 v* l+ y9 D4 D
    char msg[UF_UI_MAX_STRING_LEN+1];
; B% V5 U" G2 A2 v7 A    va_list args;
* c6 j3 v* c# Y2 V+ b    va_start(args, format);
, W0 Y1 \* k) c( A6 I    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);
! j& ~) P8 a; M! p% M0 o    va_end(args);: I( P! {1 `# t/ L2 {9 c
    UF_UI_open_listing_window();
/ @7 o9 N6 o+ Q' x    UF_UI_write_listing_window(msg);
3 h* Q& Y; s% @) `5 v    UF_print_syslog(msg, FALSE);5 `9 P0 q" ?) |. v4 {. r: G
}
. v7 X: N: C6 F% v3 c$ b#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))$ P- @% d5 ~6 M" Y1 g
static int report_error( char *file, int line, char *call, int irc)) o! o. F& u" R
{
$ S0 z, v( M8 K1 k6 k    if (irc)
7 t9 [& V; K0 o$ h# N( P    {
0 I1 e; M2 S" m+ o) }( [2 |        char err[133];3 o6 c4 e$ O/ o  D
        UF_get_fail_message(irc, err);4 B, a% {1 ~. |
        ECHO("*** ERROR code %d at line %d in %s:\n",5 D/ B# q6 k9 ?- f9 w) m+ \8 Y+ p% c
            irc, line, file);/ L( x8 t' h% E" o5 b
        ECHO("+++ %s\n", err);
1 j3 }8 H; M: W" d( F% A# Y        ECHO("%s;\n", call);
- f. S5 G5 V: H: N1 ^$ z& H6 i    }
! m' t9 m# n% D" h, G, g* z    return(irc);
+ `! K  `# z9 f}0 T2 v. q' [' z

! [, o4 L6 ^( G0 i/ g! l/*****************************************************************************
2 `! Y/ Y7 Y5 N* @, ~**  Activation Methods1 J7 x9 D) k7 L0 I/ S
*****************************************************************************/! }+ P/ `  ]: V+ |; ]
/*  Explicit Activation
: @5 w9 Z6 B  D; \. ~) W**      This entry point is used to activate the application explicitly, as in
2 c2 ^$ x) R/ d3 ^( h0 I$ f) L1 _**      "File->Execute UG/Open->User Function..." */
' p, r( I. Y; {( v! j
4 k* u( z( _8 f4 |
6 G5 l) A; ?2 Q/ @  e4 U+ Qtag_t oldwcs = null_tag;3 g" |4 [+ C: w+ ]: u# @6 I7 C. ~
double origin [3] = {0,0,0};& F" A) M  Z: G" S" C
tag_t csys = null_tag;: B, E4 {" D& v$ _2 k/ `
tag_t  matrix_id;
7 S' ]. i- S1 x1 Y( q& kdouble csys_origin [3] ;- M/ P2 x' @" I2 @6 `* G- S' x
double matrix_values [9] ;
4 e  |2 c4 p3 e; x4 g; m- ^% s+ t) Mdouble x_vec [3];
) {! u; W4 x) w. O0 ]double y_vec [3];
7 [9 E4 o; ]( n' S* a  z9 Gdouble z_vec [3];
% ]9 d5 `1 k/ A- k7 pdouble mtx [9];
9 i+ F8 O8 L" ~3 p  u9 t& b& N4 ytag_t  mtxid = null_tag;
6 [  L8 Z1 t0 F! e$ D# U$ ftag_t arc = null_tag;
6 h2 a4 g: t  h" x8 u+ g* @  R) p. BUF_CURVE_arc_t  arc_coord;
: q5 ^' ^  @4 B0 F/ Zdouble origincenter [3] = {0,0,0};/ B+ `8 J* [' h" j1 [
uf_list_p_t objects;
" a0 B7 ?! z1 ^. A1 dchar  *taper_angle = "0";
9 f) E, ]# S9 D0 ]char * limit [ 2 ] = {"0","60"};
6 o5 J! m4 q( A. Y2 t- m( rdouble point [3]  = {0,0,0};( [: @1 w9 ~& Q2 E
//double direction [ 3 ] = {0,0,1};
- B; E0 `/ S. i/ f! q4 C( E$ k
; K. w  a6 o* Juf_list_p_t features;! N& a, |! M6 r% h; T
char * message = "vector";: f. u3 E5 A5 C- S$ T& j
int  mode = UF_UI_INFERRED ;7 J; O, I7 n: \/ O2 O2 H, m
double direction [3]; 9 l5 B! a) m) a4 ^) r2 Q4 |
double origin [3];2 ?- K% J1 e, R5 I
int response;8 {5 p1 g) }. q/ Z4 S3 B2 O0 w9 i
char * cue ="point";' m  Y6 @7 ^2 G. ?% d  B
int mode_sel [ 2 ] = {1,0};
. s8 a+ c. s7 V& y7 nint point_display_mode = 1;- K7 z7 C% V9 [7 w& t' D4 @- z2 G3 `
double point_sel [3];
0 Z1 a( \1 u( M  c- l# s//double outputpoint[3];9 e- D# h) H$ J' C2 K4 u! Y

; |! F1 Y  e5 j' e6 t6 }# O# Iextern DllExport void ufusr( char *parm, int *returnCode, int rlen )6 W: L  `" x3 c% ?) w2 r
{
8 I5 V/ p2 h, t; N7 r    /* Initialize the API environment */
; G' o& P% j; _7 }# j    if( UF_CALL(UF_initialize()) ) 2 v; L; q) i( X" w2 J  K! u$ g1 E
    {$ m! c5 e, r8 R# x4 m
        /* Failed to initialize */% {- m" A1 ?! U. b+ M
        return;
  E% R7 e) O( i+ P0 o3 V. v# D. `    }; ?! m) s' K: _# t1 Z2 t
    + `1 s5 z6 X, e: y) x' @) Q
    /* TODO: Add your application code here */2 g# L2 h2 u. s0 A- M

; t) G# I7 ?# L1 l. r UF_CSYS_ask_wcs(&oldwcs);                               & B# H, T. f& H# i; t. N4 o
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
: F* _6 J; Y7 k7 [% C6 ~ UF_CSYS_ask_matrix_values(matrix_id,matrix_values);    3 @4 r, t6 h; \- S" m- x4 q. I
UF_MTX3_x_vec(matrix_values,x_vec);                  
5 G4 z; `" n3 {( A- R* W! I UF_MTX3_y_vec(matrix_values,y_vec);
, C8 w: l' V1 m+ c, t0 q; j UF_MTX3_z_vec(matrix_values,z_vec);
- {  b* \: E3 d UF_MTX3_initialize(x_vec,y_vec,mtx);               
, d$ g8 @) F) @* h( D1 }$ i UF_CSYS_create_matrix(mtx,&mtxid);; M$ X3 L: ^2 e! y- X8 Y3 L7 J! a: ]
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
) S3 u# r5 s4 ]: ~8 a; O7 I UF_CSYS_set_wcs(csys);  + k% u" ]& `- U. {1 X

* R8 B$ T4 c( n; U6 @% y, R6 C$ b; n5 E+ [* o" C' ~6 @
l10:/ Y+ l4 C1 m" W$ _! |4 b
    uc1616(cue,mode_sel,point_display_mode,point_sel);8 W6 p/ ]8 }# ?  t- T7 G
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
  ^2 i8 B7 j( X
2 o+ n; _) G: Y7 O( Y arc_coord.arc_center[0]=point_sel[0]; , \. D# E( g2 \  q& B" d7 X. H% P/ \
arc_coord.arc_center[1]=point_sel[1];
1 O& ^/ _1 k) h arc_coord.arc_center[2]=point_sel[2];
+ u1 q' p* k/ g. \8 u2 t arc_coord.start_angle = 0;
! s0 I' _7 j6 l) ]% _& I5 P; u0 K arc_coord.end_angle = 360.0 * DEGRA;
1 V4 U1 e- t; y. p- m5 I8 Z" ~ arc_coord.matrix_tag = mtxid;
) I6 K& f; g9 V9 |7 e+ n arc_coord.radius = 20;
5 V" i0 d8 K; ^. f* {) C / j3 w- ]9 k2 j! |" `7 H7 M
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
5 R3 x# B+ o3 f    UF_MODL_create_list(&objects);
+ o# i* P. @5 |- Z% V8 L- b    UF_CALL(UF_MODL_put_list_item(objects,arc));
& v- `6 A$ y! `+ G; ]. V' U
& K; H. q0 L( H* E UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
$ \" a) f7 x2 r. [  g if (response == UF_UI_OK )/ B- h5 Y' L5 n- n$ F+ _- V8 L2 m
{2 m! f. A" f, t& `" y
  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
( q/ q. z' i* s/ S4 S( r5 E* l }' F: `* A4 Z$ f7 ]4 m6 v
else# D8 f7 G4 u0 |. Z% _( E
{. k3 S: p+ i% _% U
  return;& k1 P7 K. Y8 V7 r. O: ], o$ m
}
+ B) M. l* r# q. M  O8 ] goto l10;7 y6 g9 m0 f7 u$ c- P# M

; [3 H8 C; r( O( j1 E    /* Terminate the API environment */
1 t" [9 A5 F$ D    UF_CALL(UF_terminate());' X% |9 `7 l4 F" c2 m: T) u
}
% c2 E/ H& P) q% @: x% A/*****************************************************************************
/ ~( z% }% [+ x/ a**  Utilities
. L, B8 \5 C( V6 a$ a7 _: R*****************************************************************************/2 j4 k3 H0 O5 Z8 @( s
/* Unload Handler
& @1 o& A1 B1 q3 W, a! a**     This function specifies when to unload your application from Unigraphics.! u& {- i( z4 D* f
**     If your application registers a callback (from a MenuScript item or a
* V3 [) c2 f6 U. i2 Q& y**     User Defined Object for example), this function MUST return
6 \# T$ j$ h5 t**     "UF_UNLOAD_UG_TERMINATE". */
. ^- ^. ?9 @$ j7 xextern int ufusr_ask_unload( void )8 t8 q: _) B. t
{+ N' K% M7 M8 t* K- K) s
    return( UF_UNLOAD_IMMEDIATELY );3 l8 i/ n; [# c4 Z  @  F
}
; Z. t' g. g% E
% R9 g! T( h+ H5 n7 B8 ?, e
( n( m( w1 X8 M5 s; F
* ?/ A0 W/ q8 i9 e' d/ S

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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

你旋转了坐标系,实际上就是更改了wcs6 ]* W5 M% U& V$ x3 u# {

: J# w7 ^: N4 s5 E" U8 v: Z$ S+ p你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
& G0 d% V4 }3 x. q: r! ~7 p4 g$ \( I% s' D6 Z* B+ A+ {
这个你需要多试试,首先把你通过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);                               ( p) E2 d& }  @( J! c  B  ~% a$ b
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   6 O( w% V; F$ K- m
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
8 }$ x2 C$ y8 A9 Q2 I0 v% RUF_MTX3_x_vec(matrix_values,x_vec);                  3 U; I+ z( v7 p' h4 O. z
UF_MTX3_y_vec(matrix_values,y_vec);
  w, i5 U; m1 `9 R0 d6 ~$ \1 DUF_MTX3_z_vec(matrix_values,z_vec);
. n8 E# f7 j7 _, a. \UF_MTX3_initialize(x_vec,y_vec,mtx);               
. v6 X" {& B6 ~UF_CSYS_create_matrix(mtx,&mtxid);5 @& s) H8 U. b" `# M; W# z
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    & n) Z" }% B# V6 D' p4 s
UF_CSYS_set_wcs(csys);  ; T% W5 D% p* S
" o$ E8 m' S% N6 G6 C0 F2 a& C
! ?, I  k6 i" ~
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联" A9 Z9 `/ K6 w" t" G3 A
: U2 ~9 l6 V* J/ k( A& R" t
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了