|
leaf
发表于 2014-11-26 07:50:53
tag_t newPartTag = NULL_TAG;' M! C) f5 f8 H
tag_t cylTag = NULL_TAG;
/ F6 Y& X9 J6 @0 Y* }2 y tag_t bodyTag = NULL_TAG;
2 Y% f" W' j1 J: k: e4 u double cylOrigin[3] = {20, 30, 40};
" m+ }! _0 ~( F! D/ G char cylDiam[256] = "50";2 D3 b& L$ h4 g$ b0 n2 |* v
double cylDirection[3] = {0, 0 ,1};
* i3 j# N# |" Z double height = 60; c1 x: p% ?' f* P" n
1 e' l# ^; l# f5 o3 H
" V* ]# x; t) m5 O8 @/ {# j. S char cylHeight[256];
5 h( }" }& {6 C9 H/ I) {, s sprintf_s(cylHeight, sizeof(cylHeight), "%f", height);7 q- z( x- N+ ^1 _, p. J- W$ k) `8 o
//创建part7 z4 ^1 E# @3 u, q! S' N
UF_CALL(UF_PART_new("D:\\leaf.part", 1, &newPartTag));
. {$ }; N$ x9 b: t; [* F# r //创建圆柱$ m; V$ B+ {! m( ], a
UF_CALL(UF_MODL_create_cyl1(UF_NULLSIGN, cylOrigin, cylHeight, cylDiam, cylDirection, &cylTag));
: P9 d5 u0 U) J9 y6 T1 x //获取圆柱特征所在的体4 t* k" x9 ]1 v
UF_CALL(UF_MODL_ask_feat_body(cylTag,&bodyTag));# u) w( Z5 a6 O
//获取体上的边
5 g$ S$ q7 Q+ u uf_list_p_t edge_list ;
5 a3 j' S9 H S UF_CALL(UF_MODL_ask_body_edges(bodyTag, &edge_list));3 g. S+ e7 M" i x. J
//得到边的数量- ^2 n7 q0 i" i$ `9 w
int edgeCount = 0;& K& K( y' i/ j2 f3 j: [1 `6 p
UF_CALL(UF_MODL_ask_list_count(edge_list, &edgeCount));5 K/ E+ c Y6 g. d- ]& p, l
//打印边的数量
: f' p/ L$ \) \5 M, k4 x. O# E char cCount[256];) s; @5 y, f% m) l0 l
sprintf_s(cCount, sizeof(cCount), "cylinder实体上的边的数量:%d", edgeCount);
5 Q2 A+ G5 d* U& E: T uc1601(cCount, 1);( s* x3 `! B W+ {8 S! @2 n% L
! `/ D& \0 `2 m3 ] int error;
: Q8 r7 N3 x& z double (*point_coords)[3];
* c. G& {& e- b$ @5 O- A; G0 u9 Q point_coords= (double (*)[3]) UF_allocate_memory(edgeCount * sizeof(double [3]), &error );
# L" u/ g8 b6 a/ w //获取圆柱的上两条边的圆心% K# J4 U! b# I9 \
int i = 0;
g0 k1 d5 F- H9 }9 B tag_t curveOriginTag = NULL_TAG;
$ A: [1 c. h0 L8 A/ W( y: i for (i; i < edgeCount; i++)7 w! Y) t: z7 a% r- x
{3 {5 I/ P7 g; v/ R: n; `. v& c2 M
UF_CALL(UF_MODL_ask_list_item(edge_list, i, &curveOriginTag));
# m, |0 j( d& j- g) d4 z; u UF_CALL(UF_CURVE_ask_centroid(curveOriginTag, point_coords[i]));8 n9 |- N& O3 y' c z$ E, {3 S
}
% I7 y6 }2 F% y4 ~+ E$ |) y //将圆心存放到直线起始点的链表中' D' F2 t. r1 y {# Z2 T: H; h
UF_CURVE_line_p_t line_coords;
+ n- D* E% c2 K line_coords= (UF_CURVE_line_p_t ) UF_allocate_memory(edgeCount * sizeof(double [3]), &error );$ t6 ]$ T: a i' C5 }
line_coords->start_point[0] = point_coords[0][0];
5 v) D% X' U1 m3 p. D1 x4 A line_coords->start_point[1] = point_coords[0][1];
* ~! @4 [2 u: _( v5 S, O line_coords->start_point[2] = point_coords[0][2];) a' D0 w& h, R
line_coords->end_point[0] = point_coords[1][0];
/ y: v. j, p& ` line_coords->end_point[1] = point_coords[1][1]; ~: n: c' Y% L2 d ?
line_coords->end_point[2] = point_coords[1][2];, C, v7 P6 _, r; J& ]
0 G& H- @4 q- P1 x( x tag_t lineTag = NULL_TAG;+ ^2 w" @3 m4 a3 h. \
5 {3 m* u9 v* N //创建直线5 H2 \" E1 k5 A: W: z
UF_CALL(UF_CURVE_create_line(line_coords, &lineTag));
w2 ?) s- c, [3 G# f& n
1 |4 V0 U+ G6 ~4 N+ }# m. ]& O! ] //打印直线的端点
$ u. q* b! I2 I4 W2 t" D char msg[256];' M' U9 X1 A( I# y
sprintf_s(msg, sizeof(msg), "创建的直线的起点是:%f、%f、%f,\n终点是:%f、%f、%f.",
$ A ^8 ^( G+ ?& l$ \! s line_coords->start_point[0],
% q# }8 q+ x# b) C5 F6 a line_coords->start_point[1],
. U8 {, {7 G; U1 p+ D line_coords->start_point[2],- N# P: O3 u7 y" Z( Y& n& a6 p/ [
line_coords->end_point[0],
' ~7 g/ V h: G) X! K6 f9 l6 o line_coords->end_point[1],
/ G6 v7 g9 q4 y k5 h2 u0 } line_coords->end_point[2]);+ n3 r8 l1 L) v
UF_CALL(UF_UI_open_listing_window());
# x9 G2 M1 G5 S& G8 X: r UF_CALL(UF_UI_write_listing_window(msg));8 ~, U0 j. I6 {" Z+ l8 Y
//UF_CALL(UF_UI_close_listing_window());+ \6 \3 y$ G/ t8 A8 t, l1 E3 I' J
t( k9 [% c8 k+ R9 ^6 y* n& M //释放动态内存
% r! J9 B6 C4 V$ R( O UF_MODL_delete_list(&edge_list);" W/ d* b9 X0 U, T
UF_free(point_coords);
" S; k0 F- c$ x( g; i7 T) M UF_free(line_coords);8 {7 G9 f$ g& e K/ L
& O, j% O5 \3 Q UF_PART_save();1 p- i& z: ?( m8 f7 Y* H
UF_PART_close_all(); |
评分
-
查看全部评分
|