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

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

秋爱 楼主

2015-8-3 10:49:22

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

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

x
       请大家帮忙看看,我做了一个点对话框,选取点的位置后会生成一个圆,之后弹出一个矢量对话框,选好矢量后会拉伸这个圆(因为圆在xy平面最好选z轴正向或负向)。绝对坐标系下是成功的,坐标系也转换了,转动动态坐标系后失败,不在点选取的位置生成圆,圆的位置到处跑。以下是代码,大家帮忙看看。
0 V' Y# r% y, T0 L9 y    #include <stdio.h># T- B1 o2 q: S' K0 r1 y4 ?
#include <stdarg.h># b' c! k! M2 J! J
#include <uf.h># L6 o7 H4 e! @( E# \7 n# j. X
#include <uf_ui.h>! q* J/ `: B) {
#include <uf_curve.h>3 x6 b8 f, D+ v4 _
#include <uf_modl.h>2 U, o8 I' b9 O1 e0 n* w( ]4 A$ [
#include <uf_mtx.h>
( U6 B& W, h4 J' T: _) H7 D% f#include <uf_csys.h>3 u' X* y. D: H

+ i. g8 w* i2 ~# a( G- Q/ ystatic void ECHO(char *format, ...)
0 {. F6 A8 f+ P/ z{
. D& P4 A  V; c0 o3 }    char msg[UF_UI_MAX_STRING_LEN+1];
, ^4 U6 `5 s8 {( Y: K8 D    va_list args;$ D5 ?: G9 q3 w0 R0 @% k
    va_start(args, format);3 u, V6 R) }9 t/ v+ N$ X" ]  n
    vsnprintf_s(msg, sizeof(msg), UF_UI_MAX_STRING_LEN, format, args);' ]5 s/ G( Q$ e+ t* I; R
    va_end(args);
" R. n$ ~* Z) m% z    UF_UI_open_listing_window();
0 Y) h2 w2 y8 J3 y( L3 @    UF_UI_write_listing_window(msg);9 v" E# Q* b+ `& G% g4 t
    UF_print_syslog(msg, FALSE);
, @2 _" i( ^7 F) K. r}# d& D& ~7 X. E- N0 ?
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))! N1 ?. b8 n# U& o- W8 R5 q/ F* N
static int report_error( char *file, int line, char *call, int irc)
! |2 ~* ]0 @' c% N$ M9 K" V* [{7 ]6 w0 u6 E7 J  Q' z: L
    if (irc), B" `* }3 ]" a
    {7 p& }& G6 Y9 T/ p
        char err[133];
: r/ t* H6 k" D6 k% E; s6 ]) c: ]        UF_get_fail_message(irc, err);
. U9 O2 l. {0 U. s) d* W        ECHO("*** ERROR code %d at line %d in %s:\n",
" i& \8 t/ ^! f) j            irc, line, file);
" R( q' |2 T3 ]& A; q3 L        ECHO("+++ %s\n", err);8 k4 L- ]2 w( T- Y
        ECHO("%s;\n", call);0 B. N8 ~$ U. ?* y& N4 ?
    }9 m: V8 `) y; f! V/ }: [$ j
    return(irc);
/ L7 T- P" [1 z}
3 B" B4 x! b2 U8 ^0 r" t, X$ I
- Y% D( o* I$ b/*****************************************************************************
* O" g# ~+ r2 S, @" k6 K2 c1 z# u**  Activation Methods
/ d0 i) ~% r  X! ]# X5 `$ W*****************************************************************************/( D; d7 t0 c  K& R; M
/*  Explicit Activation. [3 J. Z& Y2 x7 g6 T! T% n- W
**      This entry point is used to activate the application explicitly, as in
" A, F2 [) W9 m**      "File->Execute UG/Open->User Function..." */
0 q5 ^7 _$ E% S& V& }! G" `" E6 m( _4 ?3 o3 u, b8 u

$ S& |, _" k1 ^9 @tag_t oldwcs = null_tag;
* N& U& H6 b, v6 `double origin [3] = {0,0,0};
1 E; t. r0 Y  m  u% b8 n; |tag_t csys = null_tag;0 c4 Z; f1 l* g9 v/ q
tag_t  matrix_id;
( N. q" L3 Z- w4 rdouble csys_origin [3] ;! B: O& ?7 E2 l0 }
double matrix_values [9] ;4 B. d0 F* @0 P) x# Y3 n* d3 ~
double x_vec [3];/ e4 Y4 W5 W1 S* D' m! ~/ y' l
double y_vec [3];3 ?4 h# u( m3 o; S
double z_vec [3];5 e+ B( h' c8 L& A/ H
double mtx [9];2 D  |  c. n+ f; G$ j3 l& k
tag_t  mtxid = null_tag;
  l# c% X* j! [% ~( c) btag_t arc = null_tag;! ^. H7 h( }' J8 A: X; M* A
UF_CURVE_arc_t  arc_coord;& {2 b0 o. n& {
double origincenter [3] = {0,0,0};; R( S9 x" g% v. Y; U
uf_list_p_t objects;
  J/ }4 _# b8 C2 q- Qchar  *taper_angle = "0";) K# _1 H4 ]3 v$ O3 j
char * limit [ 2 ] = {"0","60"};
) y. d6 t3 D7 i) J9 {# Ddouble point [3]  = {0,0,0};" Q# L& Y+ a3 v6 e- E! D
//double direction [ 3 ] = {0,0,1};& y0 n" }3 G( j% {9 _7 r
9 ]; B. I+ g+ T5 G
uf_list_p_t features;
6 b/ a9 O5 T* q$ e: n4 C' Zchar * message = "vector";* @& `0 ]1 z: Y) p  s3 x
int  mode = UF_UI_INFERRED ;- I5 Z  q# e. L. ^) S) v( p& I
double direction [3]; , e6 L- d  M8 N" Y
double origin [3];
: L  k' |5 H4 W+ Uint response;
* ?# ]! a2 i0 d& y7 Ychar * cue ="point";
- F6 W% k: g/ |7 T: N( T% I, {int mode_sel [ 2 ] = {1,0};
+ J( x2 G4 ~# u, r/ tint point_display_mode = 1;
4 C2 M. S; g; Q' J7 }! ^3 Ndouble point_sel [3]; + p( N6 U8 \5 }4 K
//double outputpoint[3];
9 N6 d' e1 ?: C8 a# k$ `) E9 i- B% L5 s. Z! t
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )  d/ P* t" v1 R5 M, @, k' c: z
{5 R( N  V: j) U/ L4 i. C
    /* Initialize the API environment */, U( C5 \* S4 {: q# |: _! z3 j
    if( UF_CALL(UF_initialize()) ) 3 m& Z) J9 ?$ r& T8 [# a0 _* H
    {: |' f7 y. Q* m6 y, U
        /* Failed to initialize */9 k0 Y, v& x0 O3 Z! {
        return;  c6 K7 X7 C. M* u  {/ Y
    }
) A7 S; o5 x/ B) f: J   
( A, N( q4 T0 g9 V) q    /* TODO: Add your application code here */% h  I5 r6 z% U1 `5 B+ r2 a7 I

& E8 e. A3 K1 A( R2 Y! ? UF_CSYS_ask_wcs(&oldwcs);                              
4 \; R- x7 m8 E* G& K1 p UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   ' [2 N0 d9 M4 f$ w. j1 G; y0 S
UF_CSYS_ask_matrix_values(matrix_id,matrix_values);   
7 ?8 k7 j# T; u5 [) F' \: Y UF_MTX3_x_vec(matrix_values,x_vec);                  5 t& h6 C. f; O
UF_MTX3_y_vec(matrix_values,y_vec);: U  N! u  S& |4 ^
UF_MTX3_z_vec(matrix_values,z_vec);! @; l8 ?2 K. ?5 f
UF_MTX3_initialize(x_vec,y_vec,mtx);               
; X( S1 z. a/ a9 m. B) V  n, ? UF_CSYS_create_matrix(mtx,&mtxid);# k* ~5 E) k  p
UF_CSYS_create_csys(csys_origin,mtxid,&csys);    0 ?* d* y5 k  b! ?" N' p
UF_CSYS_set_wcs(csys);  
0 v$ H+ I8 `9 M, E& S$ F' z   h6 \0 e' W8 h. S0 n" k& a

, T! }+ _! U$ v% y' j, x( dl10:2 C- x. \, L$ c9 M2 d
    uc1616(cue,mode_sel,point_display_mode,point_sel);
8 F8 b2 E6 k' j: l) Y //UF_CSYS_map_point(UF_CSYS_ROOT_COORDS,point_sel,csys,outputpoint);, x4 B7 v6 J! e% y- w0 l: I& N( Z

2 G+ P( l9 W6 D& ^6 M" x arc_coord.arc_center[0]=point_sel[0]; $ u* H+ o; X; [& P$ n- {
arc_coord.arc_center[1]=point_sel[1]; ! _! M8 ]7 ?1 ?  N, M
arc_coord.arc_center[2]=point_sel[2];
2 U3 u+ ~5 l7 `6 x3 f8 o! f. u arc_coord.start_angle = 0;
& n3 J( m+ F' a9 }0 j arc_coord.end_angle = 360.0 * DEGRA;
; L# G& t) @# e5 v3 L arc_coord.matrix_tag = mtxid;# R& M- H; I( s3 m$ i6 f7 O/ p2 W- ]
arc_coord.radius = 20;
  ?- n. m9 }$ |/ U1 o) y% i5 \ & {, X; n1 n& j  @. w' K9 c
UF_CALL(UF_CURVE_create_arc(&arc_coord,&arc));+ K  o, B5 Q. r* X4 x5 R/ o+ e
    UF_MODL_create_list(&objects);  j$ _5 U4 W' @0 l8 q" ]
    UF_CALL(UF_MODL_put_list_item(objects,arc));
' S( S% p: Q& u
& U; t! }, H! L) t* \" Y+ l UF_UI_specify_vector(message,&mode,UF_UI_DISP_NO_VECTOR,direction,origin,&response);8 m- N& J8 ~+ q# g
if (response == UF_UI_OK )
" ^% G9 f5 r  F: h {
% Q5 R) j4 y, C$ Z& t* B+ W  UF_CALL(UF_MODL_create_extruded(objects,taper_angle,limit,point,direction,UF_NULLSIGN,&features));
' b' L) ~: \. p) q: K9 ]* x }8 D  c7 K6 ]: Z9 D  B
else
$ k. h( B, X( W9 S! `0 V {
: R% S3 R% e1 t7 ?; U  return;
$ H0 A6 S* N' T1 u! ^ }
) l- l4 u! G* V* p4 U goto l10;3 [9 c* R, E1 U" X) c" J
1 b& y4 ~+ E$ {7 \* [& H
    /* Terminate the API environment */
) I% O$ W3 z- i) e$ s# d* I- k3 h    UF_CALL(UF_terminate());
  T. }& x  p% ^: o4 n}
. i/ o* j8 @* ]/ t9 W7 D+ g/*****************************************************************************
( R: x9 c! E) C& n**  Utilities
; q2 b' a' r8 i& S*****************************************************************************// l$ q0 V0 _! t) h+ [/ F% r' k  v
/* Unload Handler
, n- ~% l8 P' M+ j3 f9 \- v' }7 Q8 \**     This function specifies when to unload your application from Unigraphics.* K$ p! e/ \3 [+ l- f
**     If your application registers a callback (from a MenuScript item or a. l2 e- D+ \2 q/ }8 K/ P
**     User Defined Object for example), this function MUST return7 G5 H* {% A8 X' G4 M
**     "UF_UNLOAD_UG_TERMINATE". */6 ?) @' @2 ~) [6 L% r( T' a) _8 {
extern int ufusr_ask_unload( void )
$ E( z5 K! Q! V) l2 f* I# S{
& m, G, G# B- T% c2 m* @& {    return( UF_UNLOAD_IMMEDIATELY );
/ O/ i# J* }! u0 Z}
0 D9 l7 a3 D+ |
% V7 B! ^$ ?" d, |" a8 p  j  p2 f( c+ S

6 l& R& C" f4 S) v7 P4 h8 G' G( i& j

绝对坐标系下成功

 绝对坐标系下成功

转动坐标轴

转动坐标轴

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

点的位置在圈出的位置,圆位置不定。
上海点团信息科技有限公司,承接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; T4 ?  J, P( B( P; G( u
! @) H/ g0 ^9 _* t" O# z
你创建的点应该是 绝对坐标系下的,所以需要转换成工作坐标系的再看,另外,通过vector选取的矢量是不是也是绝对坐标系的 也要进行转换* v5 h% U: c0 F( X) e

7 ^/ R! v( v( s' y这个你需要多试试,首先把你通过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);                               # x0 O  R1 k( I8 O+ {
UF_CSYS_ask_csys_info(oldwcs,&matrix_id,csys_origin);   
: }2 A* J; h$ [5 _# bUF_CSYS_ask_matrix_values(matrix_id,matrix_values);    ; N  P  S# b( |/ g* e" f) [4 @$ V, b- `
UF_MTX3_x_vec(matrix_values,x_vec);                  ; f/ l8 U. K3 N4 q
UF_MTX3_y_vec(matrix_values,y_vec);* s/ H' p! l; R
UF_MTX3_z_vec(matrix_values,z_vec);
* @) R: w9 h2 a& MUF_MTX3_initialize(x_vec,y_vec,mtx);               & f3 d3 x: ^9 ^0 |6 D1 y
UF_CSYS_create_matrix(mtx,&mtxid);
. s$ H& t) R1 b# sUF_CSYS_create_csys(csys_origin,mtxid,&csys);   
1 ]; W. K' [9 \' @, u- KUF_CSYS_set_wcs(csys);  
) m1 L9 Q8 u# _; l! `  u" @3 ]& m2 b, _5 G. g
: O# s7 ~. j+ j1 k; ]+ i/ z; ]" q& C
这段代码,没什么意义吧, 你可以看见你创建的csys 并没有跟wcs关联' q! I4 x( b" `3 y7 ?! H' {

8 U) B# L' S0 C' j不需要这些代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了