|
|
发表于 2014-11-26 07:50:53
|
显示全部楼层
tag_t newPartTag = NULL_TAG; n% V- ^8 t; j
tag_t cylTag = NULL_TAG;
# e+ r8 E& p& c7 z- y. _ tag_t bodyTag = NULL_TAG;2 L! f3 M H) d: R
double cylOrigin[3] = {20, 30, 40};
+ F! u5 C1 v# \( `6 A5 Z char cylDiam[256] = "50"; Y! l1 i4 G P4 |* P
double cylDirection[3] = {0, 0 ,1};
2 h" v: o. {7 L9 O3 N, i8 B double height = 60;
; ?: O" k3 I6 w- q * E4 t: Z4 z: V6 Y
7 @" s9 ?+ w. _7 x3 H/ b char cylHeight[256];
. t2 e \: R' G% e sprintf_s(cylHeight, sizeof(cylHeight), "%f", height);
/ G9 H+ |1 ?/ A1 ~8 [4 v& g' U b //创建part+ }* L. k2 d, b, }2 E
UF_CALL(UF_PART_new("D:\\leaf.part", 1, &newPartTag));
3 B- ~) T" O, c: }; U* Y* |, r2 w //创建圆柱6 l1 a, H; o% n
UF_CALL(UF_MODL_create_cyl1(UF_NULLSIGN, cylOrigin, cylHeight, cylDiam, cylDirection, &cylTag));2 H2 t7 L3 C1 i) ?$ v- A! J
//获取圆柱特征所在的体
8 Q7 d1 \* W! s0 P1 F9 J UF_CALL(UF_MODL_ask_feat_body(cylTag,&bodyTag));8 ?! f0 O7 g' e: X1 v
//获取体上的边
6 r1 [' w) J, B; }2 U# m uf_list_p_t edge_list ;
% U: d* a: X4 j, Q* h; f UF_CALL(UF_MODL_ask_body_edges(bodyTag, &edge_list));
( Y" M, c4 V4 r, z5 q$ e: B //得到边的数量
. o; Z9 c% s4 R& b6 X+ n; t$ G int edgeCount = 0;
0 g: G: K! p- T- j/ c% T UF_CALL(UF_MODL_ask_list_count(edge_list, &edgeCount));
- L, J, {; E5 E( Z# }) V //打印边的数量, K4 l: v8 {- _+ E
char cCount[256];/ Z H* t1 e! t* z3 k* X/ h
sprintf_s(cCount, sizeof(cCount), "cylinder实体上的边的数量:%d", edgeCount);& P i" L. z6 \0 |! j
uc1601(cCount, 1);7 o: v# K- u4 p1 j; ~" \+ H+ M
( m! ]% Y$ d% i8 a# S8 e. f
int error;
7 h, I; _# Y: u, V" } double (*point_coords)[3];+ l% H; o' `8 e( a. e
point_coords= (double (*)[3]) UF_allocate_memory(edgeCount * sizeof(double [3]), &error );# ^; U, C) y/ a$ I4 x0 b
//获取圆柱的上两条边的圆心; n8 \" V/ k+ U" @& v
int i = 0;
$ r; T6 W7 O: M% @ tag_t curveOriginTag = NULL_TAG;
* p R' {% a3 z3 o! H# {/ k8 k for (i; i < edgeCount; i++)
# W3 j0 N' W0 p. R, u' S# V {7 B+ m+ w2 N3 B1 e; k! m
UF_CALL(UF_MODL_ask_list_item(edge_list, i, &curveOriginTag));1 x9 w" A# G# D2 T& ?. [+ [3 l0 ~
UF_CALL(UF_CURVE_ask_centroid(curveOriginTag, point_coords[i]));6 \ n6 D( M4 S/ c0 J: E, J( w6 t( P
}
) u& y0 C; u+ B7 s4 i //将圆心存放到直线起始点的链表中; O) e" A" b% X) C
UF_CURVE_line_p_t line_coords;
* j6 p5 ? U" M/ A line_coords= (UF_CURVE_line_p_t ) UF_allocate_memory(edgeCount * sizeof(double [3]), &error );. q9 h9 G3 j7 P) e; i7 G$ [3 Y |) @
line_coords->start_point[0] = point_coords[0][0];+ Z* C* d1 H1 @& L
line_coords->start_point[1] = point_coords[0][1];
$ R+ J3 s$ ~- E. |# L4 L# z8 B1 p line_coords->start_point[2] = point_coords[0][2];
" c% D* x1 ^" A( @: V line_coords->end_point[0] = point_coords[1][0];
& f4 d* c* N$ f- E+ w/ x line_coords->end_point[1] = point_coords[1][1];; J4 A! g+ a- X) s5 b3 o1 a
line_coords->end_point[2] = point_coords[1][2];5 k$ a: s9 j. P6 A& t
: t- L# v2 x- n, g( j
tag_t lineTag = NULL_TAG;
. l' m& ?, [( o4 b* J
7 _8 L% _) z! v+ L- r: L* M //创建直线
1 z3 M7 C2 p9 M, o2 a* G8 H UF_CALL(UF_CURVE_create_line(line_coords, &lineTag));, v: W- U8 C* m8 C0 V
# Y; B, E' C3 X0 ^$ H //打印直线的端点0 Z% E: L$ T9 j2 H0 c
char msg[256];
, \3 U- _9 V: l! z( J+ m sprintf_s(msg, sizeof(msg), "创建的直线的起点是:%f、%f、%f,\n终点是:%f、%f、%f.",
/ @5 E1 x; z8 T; v line_coords->start_point[0],+ n c% ~4 S: s: i# _* [( j: S0 ?
line_coords->start_point[1],) j: n; K- z+ r6 k
line_coords->start_point[2],+ `* Q7 ~# e: p( e' I% X3 ~* x$ V) Z, j
line_coords->end_point[0],
' J ^. k w0 v line_coords->end_point[1],
/ n) F- E6 }- H8 k( p/ R s& R line_coords->end_point[2]);4 r& l9 o' e+ K) I$ F" N
UF_CALL(UF_UI_open_listing_window());
: G& I% N8 J f/ V4 n UF_CALL(UF_UI_write_listing_window(msg));% O; e7 @5 @; g4 k. s# Q
//UF_CALL(UF_UI_close_listing_window());/ y: \) \! X- z/ T' i
' H( ~% l6 c$ t: y" J
//释放动态内存
: m" z4 o' t4 |' U: d3 S UF_MODL_delete_list(&edge_list);
4 v" f+ }3 {2 u* M1 F UF_free(point_coords);
/ B& x% a0 x+ B UF_free(line_coords);
; ~5 o0 f3 K, ]$ t4 Y
# e9 Y3 I/ H0 V8 B UF_PART_save();
x( r* T: Q+ M UF_PART_close_all(); |
评分
-
查看全部评分
|