PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

[复制链接]

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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
: M# U* F$ w, A# C6 x3 ^    #include <stdio.h>8 [, V1 Y" [$ m2 x
#include <stdarg.h>
4 Q+ L; D% t/ n( Y6 r2 @#include <uf.h>) l: o- ], c+ @: m, {  E
#include <uf_ui.h>
/ e' h" b% F3 Q. D! I. Z2 v#include <uf_curve.h>, P' a4 C- L/ y; y& [% L2 V% g
#include <uf_modl.h>
* R( d. G2 G8 `: u4 M) Q: t. N#include <uf_mtx.h>+ F3 r2 k: }( h) U7 V/ e
#include <uf_csys.h>* w  X& h7 l+ I5 [/ F' K
3 ^! J; `" Q( S6 w
static void ECHO(char *format, ...)
7 g" T  u- l& L* S. j! {{. u# N9 Q6 q: G. b* t
    char msg[UF_UI_MAX_STRING_LEN+1];
/ _- L5 K: k# }6 d    va_list args;
/ ]( t; b6 {4 M2 M    va_start(args, format);
5 x. j: P; o8 I4 X  f6 e2 L3 V; D' T    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);) }9 p! U6 l: W4 [" J9 K
    va_end(args);
2 j; a3 ]1 {! ^2 m, `( Y    UF_UI_open_listing_window();
, A. N) ^( y3 ?- ?: u    UF_UI_write_listing_window(msg);! s; T4 T+ |  [  W9 K- J2 E+ |
    UF_print_syslog(msg, FALSE);
, i# q5 r- e! T}
& ], t- x! b/ k8 D. x2 s* f#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
0 [$ m$ R- o! ]static int report_error( char *file, int line, char *call, int irc)
/ ?) V5 [" Q( \2 _1 ~{+ V$ W( j6 |1 `. u: ]
    if (irc)# ^# P% b2 h0 I5 c& Y% @% `
    {, j0 R* X4 C7 h: [
        char err[133];& n& k" V, c$ |
        UF_get_fail_message(irc, err);1 U+ F9 J# q7 m5 t" _
        ECHO("*** ERROR code %d at line %d in %s:\n",
" E$ K5 P' t/ [            irc, line, file);% T$ v; f( Y3 B8 `) c
        ECHO("+++ %s\n", err);
: A- r8 Y3 ^4 I2 B5 c; G6 g; k        ECHO("%s;\n", call);2 U7 Y. n7 g% P  y& Q# b
    }
0 v" ^1 ^  B$ @' k! h( C8 f: w  L    return(irc);
- j) o, @! U4 s( Q% |- X* l5 o+ t}
0 I. ?1 R$ E' o8 b: e" N8 X6 I3 i
1 q0 X" u% @. o5 e1 _- w; |) \( u/*****************************************************************************; g8 c$ r' w& `' ?# e' F
**  Activation Methods3 _2 K4 u  V! L& y4 Q# e! z- u
*****************************************************************************// [$ [; @8 v' a3 ~* ^. g
/*  Explicit Activation( A% o3 X4 Q" s+ u& {
**      This entry point is used to activate the application explicitly, as in, W( X, ~+ s4 k* H8 C: w$ @4 ]
**      "File->Execute UG/Open->User Function..." */
8 ?. I$ M4 {; y  _5 j  w
6 u. [. x/ b7 }, C/ g0 h  h
: R3 R9 ?) t. }1 e3 B% Ftag_t oldwcs = null_tag;
, ]& S6 V2 B0 x3 N6 Bdouble origin [3] = {0,0,0};4 T1 g+ k- j" d0 C: e
tag_t csys = null_tag;
1 \% e# g, l* S! R& F- o0 ]tag_t  matrix_id; $ Q1 u: q2 Q2 x5 U! Q) ]
double csys_origin [3] ;" s% V) v4 Y4 R. n
double matrix_values [9] ;- v/ z, a$ L/ H& x6 i# k9 N- `
double x_vec [3];5 Y+ |+ ?0 q) L. R# h# }, T8 Q6 N
double y_vec [3];
4 C7 e2 Y: x) ], V1 i1 wdouble z_vec [3];
6 f8 Z0 f0 J7 T! ddouble mtx [9];# N& i! u* G. n" t# x" Q
tag_t  mtxid = null_tag;& {7 h3 H0 z+ V' b, r9 [
tag_t arc = null_tag;5 E/ y& R& q8 K: c! I% d
UF_CURVE_arc_t  arc_coord;
. ]; r5 [/ O& a; C& Cdouble origincenter [3] = {0,0,0};/ W! V& K" Q, w# s
uf_list_p_t objects;0 D' Z# F1 ^) a+ o7 j2 S
char  *taper_angle = "0";7 R0 o7 H( a7 L2 W
char * limit [ 2 ] = {"0","60"};
+ Z7 f, F' G2 ^/ H% ?, edouble point [3]  = {0,0,0};6 d9 i; i6 X% f- }; `. P' G3 N( h
//double direction [ 3 ] = {0,0,1};8 \4 d. y6 G% h3 J

) l# p3 z0 a9 o% Auf_list_p_t features;
+ ^5 {( |6 A. x. nchar * message = "vector";
7 _6 z( O* X; j6 U; t, z- xint  mode = UF_UI_INFERRED ;
' i. n; q5 u( C! n: v( D6 Adouble direction [3];
5 ]9 X) g, U- N6 i5 W: Fdouble origin [3];) o, |  O$ b% J3 O- B0 Y% Z
int response;
( G1 E% V) ]' s  S5 echar * cue ="point";
, a  s# h& C! ]% ?( b/ Aint mode_sel [ 2 ] = {1,0};
; H. F$ a2 y) W. ^4 D! X6 Y- @int point_display_mode = 1;
  w7 a# I( W# k" c5 `% x- Bdouble point_sel [3]; & Y' n2 Y) q7 H
//double outputpoint[3];
) A) k7 @( r, ~/ S. A7 `% M5 T+ s9 y+ a  z, ?7 M' I- b
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )* r% ^% ~* @; Z$ n( K1 {0 ~* J
{
: k6 b% c- r1 Z$ w* }3 \' A    /* Initialize the API environment */
+ R) R  s" Z0 s4 s! h    if( UF_CALL(UF_initialize()) ) # ?4 |5 l6 I8 N, p/ \
    {
' R, D2 U# }# }) {% i2 }        /* Failed to initialize */7 N5 u5 u7 o# G5 L
        return;
# Q' t( _  u% K6 _6 \! j- _, a    }0 Q  R# E3 T9 R1 Y
    ' d4 F( B6 w- u1 k
    /* TODO: Add your application code here */
8 @" ~: F" k+ q, G# T3 a0 D
4 A; u( O; \: q# Q  Y4 Z# ~ UF_CSYS_ask_wcs(&oldwcs);                               ' x* S4 ^1 Z# }
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   ' r1 Y9 k) G* X2 q
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
2 ^% S, Y* e, j% c( s UF_MTX3_x_vec(matrix_values,x_vec);                  $ u- {: Z. M* S: \
UF_MTX3_y_vec(matrix_values,y_vec);
; k* [2 E0 t/ y" u/ X8 _# O% Z' `% y UF_MTX3_z_vec(matrix_values,z_vec);0 R+ k5 w& _( V9 E- R5 G; u
UF_MTX3_initialize(x_vec,y_vec,mtx);               1 j5 a2 G5 S4 O& m
UF_CSYS_create_matrix(mtx,&mtxid);
; @: z" t1 W0 f/ y* ^) q4 {, P, T: ~ UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
+ W' {# s1 h8 U- y UF_CSYS_set_wcs(csys);  
$ A8 \, J4 V5 [$ Q4 X $ h9 I/ `1 z4 c6 m  T$ c

) |; c) B) [" ?l10:
' Y; a- U% v. _- e5 t1 m% j  p& t$ u    uc1616(cue,mode_sel,point_display_mode,point_sel);2 ]. C- ?. t8 m- H: R- ^
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);
. M3 h4 y2 i  M: g# ?. h$ R2 w$ x  G0 d" Z( z/ E. k" a
arc_coord.arc_center[0]=point_sel[0];
3 k  s! z; G" \8 }2 r; w+ g: J9 ^ arc_coord.arc_center[1]=point_sel[1];
3 h2 h0 A# {9 {9 z$ ` arc_coord.arc_center[2]=point_sel[2];
* Z- C7 Z- S# c1 i: q$ z. w( V arc_coord.start_angle = 0;
; _9 |; o- x0 S  ^9 g! ]6 T# Q& B arc_coord.end_angle = 360.0 * DEGRA;$ Q! V% p# U: f  j
arc_coord.matrix_tag = mtxid;
* d: k; G, T% _2 @6 {- @# N% J: L arc_coord.radius = 20;, y& r  u$ h* _+ m: o  |) Y
! d) u' m3 E3 c9 e
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));' x9 Y0 l! @. b: b
    UF_MODL_create_list(&objects);
) y7 M0 F, H0 U9 e    UF_CALL(UF_MODL_put_list_item(objects,arc));/ {: |# ?$ O5 R# E  e5 s
1 f0 W/ c6 F7 H+ ]/ D
UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);& Z) G8 l1 K; B& t6 k
if (response == UF_UI_OK )3 g9 h# J" R' w7 K3 `) X
{
9 v* I) [1 l$ K) d7 {  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
2 N8 c5 }4 _6 i }
0 s6 X4 l5 s6 F7 [/ f  c else. A. r8 O6 S. {4 {6 n1 k. R/ {- V
{. j' _% R5 i9 P4 K/ `: P
  return;; i/ r9 M4 T$ S1 q2 z' i& ]& u
}
1 x# W0 P, r6 \; i1 }" g goto l10;3 _" x- _7 @& a6 C& Q

3 B5 j7 m8 \+ V: P0 s1 L    /* Terminate the API environment */" V+ N+ T% ?) V! S$ ?
    UF_CALL(UF_terminate());
2 ^$ d" j  w- }$ ~7 q}
/ T- D0 c& K& z" U0 h; u/*****************************************************************************
" Q- X2 |# [* ?% P" ^" C**  Utilities
9 t, P) w5 i9 e; c& N*****************************************************************************/, Y' v$ ^  A6 n) Z  O) v1 s; ]3 S
/* Unload Handler  ~- `( R+ j, L2 ?$ {
**     This function specifies when to unload your application from Unigraphics.
. E* m* s! Y9 x  P( }3 e* {- \9 R**     If your application registers a callback (from a MenuScript item or a
. d0 X/ [+ Y! K9 z' P: l/ Z, E**     User Defined Object for example), this function MUST return/ t2 a, ]: Y6 z; X
**     "UF_UNLOAD_UG_TERMINATE". */# u( r5 ~! A) h2 L9 S
extern int ufusr_ask_unload( void )( o$ m0 U/ y3 g3 Q; [' |3 }2 q
{3 j3 J+ K: q* n9 o4 I" a8 e
    return( UF_UNLOAD_IMMEDIATELY );
0 s: r" |3 ]. U: I, `( L}
1 a2 z3 X/ e6 x; P8 D* X
  _* T' z+ p0 n' k% G: v" M; @3 d; W: R9 ~, h# c) S1 G7 e
# ^- u  D. c  b; 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

你旋转了坐标系,实际上就是更改了wcs  M/ s' `9 N! D0 p2 ]

4 Q) I& j: W+ Z" ^你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换( q2 y/ B( H4 N. |9 F

# F- i; W& D% m7 t- j% Q这个你需要多试试,首先把你通过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);                               ; ?1 e0 ?( W# S% m( N
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
3 W& g& c* [- e' QUF_CSYS_ask_matrix_values(matrix_id,matrix_values);    1 a& m1 e! q$ ^' Y$ [
UF_MTX3_x_vec(matrix_values,x_vec);                  5 x* B9 R" @4 h5 ~# v
UF_MTX3_y_vec(matrix_values,y_vec);
! I, A0 V: E. T! `UF_MTX3_z_vec(matrix_values,z_vec);  d+ E* f" d, ]/ h. g7 w' ?
UF_MTX3_initialize(x_vec,y_vec,mtx);               9 S4 X' P: u2 a% ^$ o
UF_CSYS_create_matrix(mtx,&mtxid);+ L- ^" P$ H% C: p/ p& P0 R& ^
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    " @2 ?! U, N% {) ~
UF_CSYS_set_wcs(csys);  
+ j2 g& e/ P' O# h$ o3 j; k) O+ {1 N4 j6 c" |* F

, Q" o) H* Z- g这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联
' J2 {( Z6 H" t! H6 \% b. j
, p  ^! p% T: Y9 C2 a不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了