77范文网 - 专业文章范例文档资料分享平台

UG二次开发(3)

来源:网络收集 时间:2019-06-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

FTN(uf5947)(matrix, &srcObj, &count, ©Flag, &layer,

, p! f* @8 o: | &curveFlag, copyedObj, NULL, &rtState);

& z# }; C' y5 ^1 R' Q' }

n\x& `5 U6 E中的©Flag设定为1,你的rtState可以为0,但对象object却没执行什么操作。

现在我想把我的object进行move(这个对象包含了blend,hole,extrude等特征操作),请问ZZZ兄有什么高招?

& H0 `# b w8 h. \\2 c% t

现在我调试的程序可以对point,curve等进行操作了,但带参数的就不行。

, r1 d0 n+ ~; u5 m\

关于平移的问题,受斑竹的启发,我调试了下面两个函数,同样可以对Object进行平移操作(只能copy

而不能进行move ).

' K4 }( v9 u' j# [+ o\

double Dxyz[3]={50,80,0}; double D_target[16];

/ v. B! C. @1 ^tag_t copy_object_id;

\

4 R) ~2 ^4 n' \\) \\. t FTN(uf5943) (Dxyz,D_target );

FTN(uf5947)(D_target,Object_selected,&one,&two,&zero,&two,©_object_id,NULL,&resp).

现在我调试我的程序发现不能进行move 操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作. uf_list_p_t cmtag; int ug_type,ug_subtype;

: h Q; R) h9 nint N_features;

9 n) a$ H6 J6 i3 Y! S m/ M/ T

) C: J5 m* h4 m% M1 Ki_ret=UF_OBJ_ask_type_and_subtype (*Object_selected,&ug_type,&ug_subtype ); i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object ); i_ret=UF_MODL_ask_body_feats (body_object,&cmtag );

. X( U$ f4 G- [2 e

i_ret=UF_MODL_ask_list_count(cmtag,&N_features);

但进行调试时候.老是cmtag的值为空,请问斑竹对这几个函数熟悉不?

& N1 }3 x/ k8 u4 }$ M ?$ 7 y: |, D. b' ?) R

下面的这张图片是我在交互界面下进行Transform时出来的警告信息.

Knight74 wrote:

9 W; W7 @2 z! f+ s现在我调试我的程序发现不能进行move 操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了

许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作.

! _' X4 A%uf_list_p_t cmtag;

\@ d) G- F8 @- ]

int ug_type,ug_subtype; int N_features;

]% y, R- R( W/ q8 K/ a+ D U

i_ret=UF_OBJ_ask_type_and_subtype (*Object_selected,&ug_type,&ug_subtype ); i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object ); i_ret=UF_MODL_ask_body_feats (body_object,&cmtag ); i_ret=UF_MODL_ask_list_count(cmtag,&N_features);

\Z0 w C1 {' \\& r% T\

但进行调试时候.老是cmtag的值为空,请问斑竹对这几个函数熟悉不?

5 f, e) ~: n! c6 |) m: S* ?9 k

下面的这张图片是我在交互界面下进行Transform时出来的警告信息.

; W: ~$ o. T9 t3 e' d

. @* n- y- N6 ~1 _3 b$ I9 ^

body_object一定要初始化为NULL_TAG.

Knight74 wrote:

\ q0 N0 r2 p) d请问斑竹,知道计算两个object之间的距离函数吗?这个函数可以计算两个object之间的最短距离。 另外,感谢斑竹上面的提醒。今天有时间我把第3中在UG中平移物体的方法写上去。是通过移动特征来移动物体。

求助

$ t+ I) b6 ^8 M& d. k0 E5 u4 H' E! K. K% e3 \\

//-------------------[6] Chamfer 4 edges of block2------------------- uf_list_p_t edge_list1,edge_list2; tag_t chamfer_id,edge;

+ E& V R: `4 u! N7 a0 X/ A\

8 C4 R% d2 j4 V, e8 s4 _double end_point[3] = {0, 0,0}; double direction_z[ 3 ]= {0, 0, 1}; int dir_edge;

char * angle1=\

int subtype=1,*is_parallel=NULL;

1 g( W$ D1 {9 n1 Y& l6 W( ~8 A

UF_MODL_create_list(&edge_list1); UF_MODL_create_list(&edge_list2);

UF_MODL_ask_feat_edges (block2, &edge_list1 ); UF_MODL_ask_list_count(edge_list1,&num);

6 M/ w# l& n\! Y9 d3 ]; |% H: }8 ^

for (i=0; i

UF_MODL_ask_list_item(edge_list1,i,&edge);

6 b% w% T$ F\, [0 |% K% B x) l7 G* B3 H* C( r; e+ a

3 e2 ^; N% ]: y1 b. f

9 n% w' f' X# V; a: s UF_MODL_get_curve_edge_direction (end_point,edge,&dir_edge );

UF_VEC3_is_parallel(dir_edge,direction_z,0.0001,&is_parallel); if(is_parallel)

+ s+ J( d4 q- U' x1 c$ ~: F/ ?/ C4 K% R6 K

UF_MODL_put_list_item(edge_list2,edge); }

* h/ r$ k6 c Q0 L/ \\2 l

3 L# F' r) T& O. c* @: X, d UF_MODL_delete_list(&edge_list1);

4 ^\$ ]# H! QUF_MODL_create_chamfer (subtype, \ UF_MODL_delete_list(&edge_list2);

9 ~) z. _; n4 m, N

编译错误:error C2664: 'UF_VEC3_is_parallel' : cannot convert parameter 1 from 'int' to 'const double []' 请问用UF_MODL_get_curve_edge_direction 得到的edge的方向dir_edge是何类型,是不是不能用它得到block边的方向?

extern int UF_MODL_get_curve_edge_direction (double * end_point, tag_t curve_edge_eid, int * direction );

double * end_point Input : The input endpoint

1 R, h W e. m7 T6 u- q0 D; L; a0 J( X. B) t, t$ K6 e8 ~9 m5 K. L- O i7 a l# h6 G; F

3 k4 g\tag_t curve_edge_eid Input : The input curve or edge int * direction Output : Ouput direction

extern void UF_VEC3_is_parallel (const double vec1[ 3 ], const double vec2[ 3 ], double tolerance, int * is_parallel );

const double vec1[ 3 ] Input 3D vector const double vec2[ 3 ] Input 3D vector double tolerance Input tolerance

- k& {' R/ @6 a& S5 d8 P& }, s4 O/ [/ I5 m0 P/ Y9 ^7 ?( R\/ B( d/ b8 y: _# L1 O6 g

int * is_parallel Output = 0 Vectors are not parallel

= 1 Vectors are parallel

\0 r2 i$ a/ H/ o9 Y# _, x. ]% r& p: x: Z. x) p

整型指针变量,取出后在UF_VEC3_is_parallel()]中如何用?得到block边的方向是否有别的函数?

taiga2001 wrote:

/ w; {' Q/ ]8 x, t9 m! A

( U6 o' z/ p; bextern int UF_MODL_get_curve_edge_direction (double * end_point, tag_t curve_edge_eid, int * direction );

N, i1 S) _7 Odouble * end_point Input : The input endpoint tag_t curve_edge_eid Input : The input curve or edge int * direction Output : Ouput direction

extern void UF_VEC3_is_parallel (const double vec1[ 3 ], const double vec2[ 3 ], double tolerance,

6 v( T* ]- z\% H5 S4 A6 h+ A' W\! P%u7 I1 e. W# L5 q2 J

int * is_parallel );

H( V& l/ Q9 ], d3 q* x

$ I T$ z( V5 v+ n4 X+ G, c- ^const double vec1[ 3 ] Input 3D vector

const double vec2[ 3 ] Input 3D vector double tolerance Input tolerance

int * is_parallel Output = 0 Vectors are not parallel

\= 1 Vectors are parallel

0 {) ^8 O4 ~; K整型指针变量,取出后在UF_VEC3_is_parallel()]中如何用?得到block边的方向是否有别的函数?

第一个函数只是用来判断一个点靠近一条曲线的起点还是终点。

2 Y o6 x% H)

第二个函数要求输入两个矢量。

得到边的方向可以,先得到边的端点:用UF_MODL_ask_edge_verts()

-------------------[6] Chamfer 4 edges of block2-------------------

9 t; ]\1 _% A7 V; V$ j( h\

uf_list_p_t edge_list1,edge_list2; tag_t chamfer_id,edge; double point1[ 3 ]; double point2[ 3 ]; char * angle1=\

' \\3 X) h' O$ i/ ~9 a' m; e- f. X( V. |. Q1 W9 C; [1 \\* z }( T# K8 w* I% [0 m% ]5 u4 `$ k$ D) O

int subtype=1;

: T6 L5 b& D% p, O* W

int vertex_count=NULL;

UF_MODL_create_list(&edge_list1);

) L* \\) ^+ x( i7 I. n. U

UF_MODL_create_list(&edge_list2);

UF_MODL_ask_feat_edges (block2, &edge_list1 ); UF_MODL_ask_list_count(edge_list1,&num); for (i=0; i

UF_MODL_ask_list_item(edge_list1,i,&edge);

\& n\4 R: z$ z% Y! O V X1 ^. b* s\

UF_MODL_ask_edge_verts (edge,point1,point2,&vertex_count );

if(fabs(point1[2]-point2[2])>1)

0 V7 d' S& c2 y) c. | UF_MODL_put_list_item(edge_list2,edge); }

UF_MODL_delete_list(&edge_list1);

1 ~\! q% ~/ e5 z U* U. M( S* k8 [( U* C+ ^6 n' w) g

UF_MODL_create_chamfer (subtype, \ UF_MODL_delete_list(&edge_list2);

在UG中move 物体的第三中方法,通过移动特征来移动物体。

2 H c' w' q b5 f5 X' B N# V3 k0 O- \\; D* ?( n

5 J8 s* H5 Y\double real_data[2][12]={0,0,0,1,0,0,0,1,0,0,0,1,50,80,0,1,0,0,0,1,0,0,0,1}; int mode=CSYS_TO_CSYS; int N_features;

! |9 u5 ^5 F3 \\& `, X; {9 D0 X

! N8 q& ^# k7 L( V( R9 K\ char features_num[100]; uf_list_p_t cmtag;

3 Z, L0 v. O# M

i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object ); i_ret=UF_MODL_ask_body_feats (body_object,&cmtag ); i_ret=UF_MODL_ask_list_count(cmtag,&N_features);

! F9 D* z, N, n' O9 c: j# Q# ?, R3 K- d' u1 ?! j( b6 J

i_ret=UF_MODL_move_feature(cmtag,mode,real_data);

斑竹,我下面的程序是希望通过一个点,一个方向创建一个datum axis,我用

$ X( b) U\

7 D- V- h6 H\i_ret=UF_CURVE_ask_point_data (dpoint,Datumpoint);

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库UG二次开发(3)在线全文阅读。

UG二次开发(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/655591.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: