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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。8 t6 c# Q, `! S& ?
    #include <stdio.h>
: H0 J6 D. }( w. a, e" r% {#include <stdarg.h>
2 K& a6 ~5 k4 h% [7 O#include <uf.h>5 O6 ?/ W4 w+ b9 d6 g
#include <uf_ui.h>
; C- p8 f8 }) l0 f/ P9 M( F  P#include <uf_curve.h>
$ Q! s( {; Z+ N. z( _$ w#include <uf_modl.h>
3 C' p. j4 `2 h0 s0 X#include <uf_mtx.h>- w1 R, b  Y8 g& O+ g) d# l
#include <uf_csys.h>
; x6 r/ F3 b- f2 {6 T; r4 @! M6 m* R# k* T- m9 Z; U" ~
static void ECHO(char *format, ...)
. d' g4 l/ C' o, g" S, F8 u{$ R# g: ^/ J2 b! S) d5 x& U
    char msg[UF_UI_MAX_STRING_LEN+1];1 {4 |0 F2 I- J% C
    va_list args;
" S+ o) i) j( N6 Q( N    va_start(args, format);* @6 i/ X# c( x: x) s
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);$ C8 T. E1 `/ c* ]# t
    va_end(args);
5 ?+ ?, }0 l# L    UF_UI_open_listing_window();
* \4 k* l- h: ?  m    UF_UI_write_listing_window(msg);
: o/ L8 G. r0 j    UF_print_syslog(msg, FALSE);9 o0 l: g+ ^# o% t  _; }, X
}
! f$ x4 g& G2 C" F! W#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))' \7 a, [! V+ U2 h3 m
static int report_error( char *file, int line, char *call, int irc). b0 W' `- Y: p6 O
{3 q5 B. x& a# m9 B0 m/ u6 {# b) ^
    if (irc)
3 W& X' I, c8 Y+ n+ ~, C( i' _    {
( d3 t. X7 a% i' ^        char err[133];. X1 B; F# @( a: y
        UF_get_fail_message(irc, err);
/ I" S8 m7 g. E6 `        ECHO("*** ERROR code %d at line %d in %s:\n",' x- d. }# e5 |' u" O7 C/ y
            irc, line, file);1 O  z: w. f& h% |
        ECHO("+++ %s\n", err);9 S( A5 L1 D$ f$ j+ ~* p
        ECHO("%s;\n", call);
0 g2 r* K, v% Z: f    }/ t3 v9 C* ^0 U5 `  ]! L' ~
    return(irc);
* Q% _4 J! W, e2 w* Z6 z}1 h" O8 q" M. a

- }# U  p. b# X# y7 t! q/*****************************************************************************$ s+ r/ M. m( \& c
**  Activation Methods: y& g, `- H8 D7 N6 r( i
*****************************************************************************/% T/ N# D1 X/ o5 N5 ?
/*  Explicit Activation- q! M9 x5 I: f
**      This entry point is used to activate the application explicitly, as in
1 w5 u4 h# l& p% T& M; b3 j+ ?**      "File->Execute UG/Open->User Function..." */6 p" Z- C, q$ s8 R3 C, f

' `0 T( f0 b. q3 a% \  F9 Z! h& P3 N0 t- b
tag_t oldwcs = null_tag;! P& _7 S  r! m, B5 b. c3 V
double origin [3] = {0,0,0};
: [" S# U) u# N- j# htag_t csys = null_tag;
( R' ^  \/ W9 C  A9 @- I& ]* Ttag_t  matrix_id;
9 u0 j0 @# Q* m) j8 u! pdouble csys_origin [3] ;9 X$ y* k  [: G3 b4 z, H6 ]1 v
double matrix_values [9] ;/ h& F5 @9 y8 r2 Y5 ^) n6 q- q
double x_vec [3];
. e2 C: z! h) J4 X7 g8 ^  c, w# Cdouble y_vec [3];- P: m7 [' B% I; y. I  }# @
double z_vec [3];1 K, X; S. |5 }- d
double mtx [9];; m! k# I4 G: m
tag_t  mtxid = null_tag;, @5 ~7 G8 l' K; M. _% h/ F/ c5 \
tag_t arc = null_tag;$ _9 G5 h9 V2 s0 V" T; n3 G
UF_CURVE_arc_t  arc_coord;
" ~1 n0 {/ e3 m% [/ bdouble origincenter [3] = {0,0,0};
/ a: w' N* N$ P. x2 |( Juf_list_p_t objects;
3 |& R# }! I! F* M/ s8 N7 Mchar  *taper_angle = "0";
9 x3 j  }) r/ Wchar * limit [ 2 ] = {"0","60"};
( ~, d' D5 D- X& y0 g5 ^7 k2 ^- Zdouble point [3]  = {0,0,0};
7 Q9 l. e& e' m$ ?* ^0 `//double direction [ 3 ] = {0,0,1};2 {# \& a& [: f) S
& W( c- M6 V2 ^/ g: e
uf_list_p_t features;* [& K  T; X9 b, b9 A! b8 s
char * message = "vector";  w, s0 R2 B  e& f0 g
int  mode = UF_UI_INFERRED ;# m: [* r3 q. i# }0 A4 o  J; _* `6 d
double direction [3]; : q; t0 j& [( ~* s/ Z+ P# b7 f
double origin [3];+ A5 L4 h" V9 W& U( L* w
int response;5 c& x! J6 l) Y; W# r" b$ G
char * cue ="point";2 x) A3 ~) h) X, K# u$ i4 K: x
int mode_sel [ 2 ] = {1,0}; * a. P% J/ i2 m% ^
int point_display_mode = 1;
6 I% Y8 ~- |$ e! e8 d: Idouble point_sel [3];
; U: y; N- T& ?0 }7 w//double outputpoint[3];$ J' m6 C: a- s' g$ b$ {

; B  R/ f" r/ N1 E+ ?2 I0 K) aextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
4 q) a; a  }/ D7 t{
! h6 b5 n' C- f3 S2 q! _$ J$ {; Y0 B    /* Initialize the API environment */+ S% W( \8 ~/ Q! N# Q
    if( UF_CALL(UF_initialize()) )
* z  c- M6 N( ^$ p9 l, l    {- l, _, }: R; K, {! M
        /* Failed to initialize */+ i  Q$ U& F7 B* D
        return;9 B  M$ Q8 W2 U, [
    }
- M( R9 E5 F( z1 e- v# O+ ]& ^   
- M/ H2 |+ u* T0 S9 W    /* TODO: Add your application code here */
/ `7 k  }, A  l0 S
( z8 c( Q" K9 Y) V" K/ F1 N UF_CSYS_ask_wcs(&oldwcs);                               5 D, {8 w/ y2 Y8 U6 u4 i
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
( N4 Z5 @$ e' j3 m+ d0 u$ a UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
/ x* Q' R7 j0 u# @ UF_MTX3_x_vec(matrix_values,x_vec);                  ! m2 B" H5 ]( L5 Y9 x
UF_MTX3_y_vec(matrix_values,y_vec);6 a3 u5 n7 r- C
UF_MTX3_z_vec(matrix_values,z_vec);/ }0 S8 \+ S! V* L; {% X8 R7 p% ^$ b
UF_MTX3_initialize(x_vec,y_vec,mtx);               ! p4 A4 k- f9 |6 E0 r' Q
UF_CSYS_create_matrix(mtx,&mtxid);& W$ x0 ^0 @8 d6 p9 l; q$ {2 n
UF_CSYS_create_csys(csys_origin,mtxid,&csys);   
; P6 A- v* u: {! i; n4 @  b! q( X UF_CSYS_set_wcs(csys);  
* }8 E* ~" |" A. I
3 k4 H7 Z- t; }, ~6 c* |" h- j: y& p1 r. V9 \  i; m6 A+ o" A2 Z
l10:
2 o9 x; `3 a3 J  i0 m    uc1616(cue,mode_sel,point_display_mode,point_sel);" J5 {' Q* h9 f7 n
//UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);$ w1 p5 }( D% F( N5 Z, p; @7 L' m
2 {/ M3 h, U* Q4 b( B* [
arc_coord.arc_center[0]=point_sel[0];
4 {7 R6 y2 @  u, w( J  Z& f- _ arc_coord.arc_center[1]=point_sel[1]; $ ]3 m7 m9 y: V& @# }$ l
arc_coord.arc_center[2]=point_sel[2];6 f0 g' A* W  s  I3 m* A0 a
arc_coord.start_angle = 0;
, t* H' W; A* G! H( p7 S arc_coord.end_angle = 360.0 * DEGRA;# K" ?% p. e6 R2 H- I
arc_coord.matrix_tag = mtxid;
+ F" L8 ]2 c! U$ L' U) q3 b arc_coord.radius = 20;1 P" W7 R! v% B5 X5 z# X+ `3 K" x

1 C0 x$ |' y5 M% }- i. t UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));
2 B+ n8 m% D0 Y5 ]( G) y    UF_MODL_create_list(&objects);
4 C, y8 I; i1 k; r7 w( p    UF_CALL(UF_MODL_put_list_item(objects,arc));
# ?* G  f0 g0 f
. [1 t7 n- U, G UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);
6 {% T4 v! O: s) u( u. r" l if (response == UF_UI_OK )$ ]4 `0 Z4 |% t' u) r! V+ t
{
. q) ^0 E. R( W5 ~, j7 m  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));/ v3 O; {0 R, Z& @5 {+ K
}, O6 K/ i( @+ P$ H0 M
else
; z/ _! z" h6 {- }  y {( P& S9 O# I8 Z/ S" [6 N  n2 F2 K4 C
  return;
! I( l" b- d1 }2 R" F9 E }- {5 u, C; ]) ~* e! ?1 p
goto l10;
" V+ C6 Z3 h7 h& b; h: `4 a, i
$ E8 m8 {: o& \    /* Terminate the API environment */
) S6 ]4 p" k% m  t8 @0 m: C    UF_CALL(UF_terminate());
1 d* f+ z1 }9 ~( T% A' D) y}
' f4 f) L+ m1 ^# x- W+ d/*****************************************************************************% Z+ d9 M3 `; ~. M
**  Utilities
" S% _7 e, C- h) \7 a3 ?*****************************************************************************/
' L! b6 m5 [+ B; J: U! G$ X; h/* Unload Handler
' l6 H( r3 Q5 d8 z**     This function specifies when to unload your application from Unigraphics.
, O9 g0 }: ~! x/ E**     If your application registers a callback (from a MenuScript item or a
5 f0 V6 I0 |1 X! u7 G/ W' [**     User Defined Object for example), this function MUST return
, C  }' }  g  F**     "UF_UNLOAD_UG_TERMINATE". */
, k- d* j7 R5 \4 cextern int ufusr_ask_unload( void )( d$ k! j6 |/ I) {# w" R" Q  t
{6 x& p( ?! N5 c6 Q
    return( UF_UNLOAD_IMMEDIATELY );
! a" G7 P& G9 j' G+ i: s}
% C! F- \, y9 ]
0 d1 ]( l. N6 W5 [: b, l# ?% h0 f+ H. j
$ r9 |. [% p/ A5 R& t3 a8 C

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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# v4 y- Y5 w3 R$ l8 {( z( C+ v
  y; l1 I1 T4 D$ P; O
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换
/ l: q7 F/ e* ~* }3 W5 k" _, _
; P3 R8 l+ x5 ~9 z& a5 M2 X2 ^! L这个你需要多试试,首先把你通过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);                              
, C6 G1 s6 N- K. h) eUF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
+ A; ]/ ~! Y% j% H! f& v1 nUF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
; L* O5 E; N5 ^( N# KUF_MTX3_x_vec(matrix_values,x_vec);                  - L" ^6 z% M9 W4 n) G8 f1 X3 z
UF_MTX3_y_vec(matrix_values,y_vec);+ ]) o2 h: b8 n/ k7 d2 U
UF_MTX3_z_vec(matrix_values,z_vec);8 ?  I4 ?$ u. F. m' H
UF_MTX3_initialize(x_vec,y_vec,mtx);               1 r* c$ g2 ]! C6 H8 K" `/ A6 a
UF_CSYS_create_matrix(mtx,&mtxid);& a1 C' t, J$ a
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    6 F6 r4 e' X. m& t( }: W9 m! S
UF_CSYS_set_wcs(csys);  
4 A* d6 q# l+ A) Y# L" @% F! j& ^6 S# x
7 O/ f7 V6 |# {5 |& q
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联0 [! s5 n) U! T4 {
  M" X& y8 J, v, s  L
不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了