|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
, A/ |# K/ H' H* \
#include <uf.h>
; h8 s# u! T- V/ S' t& n' w#include <uf_ui.h>
' ]# I' ^: b* M- |+ x' S#include <uf_exit.h>
( |9 J; Z) D5 p; i3 }6 J( S. A0 u
0 n# h) d) y" @! s7 ]) ?% E#include <stdio.h>
1 E% S8 r; U% z# `) ^#include <uf.h>
6 a1 x6 j4 y/ U# p; F#include <uf_ui.h>$ G n3 x4 S& O" O
#include <uf_exit.h>
7 o9 M. o0 M: O9 z; s0 A8 M* {" x#include "uf_layer.h"4 r& s! j, l: z8 t6 q, E
#include <stdio.h>
G6 ]& J3 c0 A X#include <uf.h>0 }" e+ O1 @. U: L+ @! F5 s# j0 Y
#include <uf_modl.h>: K2 p- A7 M4 E3 C, }, _
#include <uf_curve.h>% p/ s, l* [- G K
#include <uf_csys.h>
% k" \' r5 g8 X: H#include <uf_object_types.h>
* h. m* k5 X. y4 U#include <uf_ui.h>2 t" W/ D% Z$ l. a! Y( y
#include <uf_part.h>3 J& Y6 O1 l% O- O6 U1 \# G
#include "uf_obj.h"
) K- ^. l, J1 M$ O8 J#include "math.h"4 @1 J# J5 ~$ q. q. N
' D9 f, B" y5 }8 Nstatic int init_proc(UF_UI_selection_p_t select,void* user_data), E% g. s4 m0 z; A, s
{- H) m: g$ P, k- e; N) a
int num_triples = 2; //只选择一种类型: p- Y7 ?; \/ }- m5 {% z) _5 O4 E* @
UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,; Y* \5 [; @! N* k0 e
UF_bounded_plane_subtype,1,0};
$ I9 E1 [" ?; T4 \! H A1 F if((UF_UI_set_sel_mask(select,
. u _+ b7 u. B9 W UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,7 l* V, r2 ~% Y/ i, T
num_triples, mask_triples)) == 0); k4 s% }# J# C: P
{
4 |6 a4 ^5 a6 s( r8 o return (UF_UI_SEL_SUCCESS);$ B7 Z# I6 b2 t7 K# g$ J) m
}: v, @3 S1 b8 T7 ?
else+ a- W# [: C [
{( E6 P6 i, h8 U$ x3 r; n
return (UF_UI_SEL_FAILURE);6 A% `1 |. N9 g2 i% \% D/ d$ q
}
+ `$ L+ c4 m9 S0 S' H}5 E; n8 H1 m0 W% u# L
; b5 ]( g$ ?" V" b
R4 p8 C3 a" R7 ]: a% kstatic void Create_Center(void)2 @* \5 n7 F- D4 c. R9 k8 U
{% z9 h1 z1 t, t) F
tag_t user_wcs;
8 T4 M5 {+ r1 X# E3 i" t7 R- T* y0 q1 J UF_CSYS_ask_wcs(&user_wcs);- C: u1 T! O2 {4 {; M4 h
char cue[] = "简简单单:请选择单个平面";
3 [ u' r3 ^' a9 o, b7 d7 C char title[] = "简简单单:对象选择对话框";& q0 J2 z# r- @- g* ]. _
int response=0;
' [8 E+ X D3 l) |- ] tag_t object;
, C& i6 R8 U( a' K3 i# S+ v3 j. S int count=0;1 u3 r9 D% H+ M. ?$ C: _
double cursor[3];7 W5 Q3 C" `+ Q& [4 c) u" n; F# q
tag_t view;
5 `' o9 S9 Q" p5 u* z) D. hl10:
" l0 ~: h) a5 w: O1 o( D8 W. Y UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
/ G/ M5 ~5 `$ _4 V- P if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
- }8 u! C3 t) ?# y8 U# P if(response==UF_UI_CANCEL) return; //如果点取消就退出/ b1 a6 E. v& N
UF_DISP_set_highlight(object,0); //取消高亮显示
5 j; v; x: G' `* _( D
2 p$ ~( W* [# Y int type;
' _, b: s/ E- U" @ double point[3],dir_z[3], box[6];% n# G( }/ G5 q2 Z: I5 Z/ Y1 v
double radius,rad_data;
1 a6 m) y5 H8 V6 P" s r. q+ a int norm_dir;6 |8 T/ @/ d6 F6 T
UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir); //得到面的法向norm_dir,+1为正向,-1为负向1 B* T! }0 x6 S0 g
" U3 h) `/ x/ z6 z* y$ D' D2 u* w) `( d# [$ p( f9 W$ V. @
tag_t matrix_id;
8 o3 }- P1 s% O: A7 g tag_t csys_id;6 u" V1 J" v5 H# Q, _9 S
double matrix_values[9];, J$ G# H& X+ `1 j6 a" n* z
UF_CSYS_ask_matrix_of_object (object,&matrix_id); //得到面的矩阵ID
4 {! q( p9 A. ^7 Q& X UF_CSYS_ask_matrix_values(matrix_id,matrix_values); //赋值给matrix_values& t: C5 s7 s6 j! }4 A
if(norm_dir<0) //判断面的法向是否相反
5 d' {! i3 X- c4 B# o/ J- l3 C3 b- J/ r$ w {* O+ \( h) k7 Z5 a% [
matrix_values[3]=-matrix_values[3];- z9 C7 \5 n2 g7 @( \) j: F i+ b; t
matrix_values[4]=-matrix_values[4];
& G2 l7 _; g$ e$ ^% C) O" x matrix_values[5]=-matrix_values[5];; K7 h2 ?+ D# E5 G- [$ G
matrix_values[6]=-matrix_values[6];) j% @& ]5 {" B/ v: m8 C4 }* j" l
matrix_values[7]=-matrix_values[7];
+ ^6 o; u3 ^# j5 p$ }' p matrix_values[8]=-matrix_values[8];; X1 [4 Z1 I" I8 f5 [& `4 y
UF_CSYS_create_matrix(matrix_values,&matrix_id);
- j3 l5 \1 _/ u# ^+ n0 v }
* [6 f4 Q' _/ p% E3 ~ UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);8 E/ G) V2 C: r: t; i3 ]
UF_CSYS_set_wcs(csys_id); //设置面的坐标系(位置不一定精确,可以通过后面修正)
3 b8 S" Z( F- X- d0 w- M0 Q8 m UF_CSYS_set_wcs_display(0); //不显示坐标系(解决显示移动)7 e6 b. X& `. u. ~# U+ O
4 V9 l% [+ }" d5 D/ ^1 W8 r double boundingbox[6];
4 d% N' \8 P" k: z! M/ p double boundingbox2[3][3];
" q$ Q* R" L$ ^) ^2 t double boundingbox3[6];" }) \# H) |7 U O: z- n& L
UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
7 N; R5 J% ]/ h6 O' j' m$ e
( e" G+ N7 y9 p3 ~5 Z6 s5 h% c5 Y Q if(type ==UF_cylinder_subtype)
8 r" h, k& Z; `. ~ {# M8 x0 `0 @9 u$ E1 A
double cyl1_pt[3];& k7 p4 a( j8 s/ A
tag_t cyl_line,cyl_pt;
9 G# i1 }! j- L {& ] UF_CURVE_line_t cyl1_line_coords;
) x5 q! R! \4 G1 Y6 x* Z. d double WCS_pt[3];
0 I! E6 L& c. M( F' g' N& s UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt); //绝对坐标转wcs
2 t+ |3 F1 u& ~# x3 l UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt); //绝对坐标转wcs
* _; q$ m( ]4 C; v* j! D, g cyl1_pt[2] = WCS_pt[2];
/ v) q; h0 x2 Z) S0 v
9 B! A' @+ J7 G! o7 `7 m$ \7 @! s% Y cyl1_line_coords.start_point[0] = cyl1_pt[0];
! w9 d* `1 v H$ P cyl1_line_coords.start_point[1] = cyl1_pt[1];" x5 r5 [9 S2 r, g; E% z# w& {
cyl1_line_coords.start_point[2] = cyl1_pt[2];0 h% B3 f6 g: c9 ?) B
! s" J9 U: o$ \3 o! S
cyl1_line_coords.end_point[0] = cyl1_pt[0];4 A7 u |8 o6 L* G' ~5 y1 T
cyl1_line_coords.end_point[1] = cyl1_pt[1];9 n h) t7 h) Z: e9 y: s7 y$ I
cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
. d& `" n0 g+ G5 `4 N) A" Y* K8 S9 o7 @2 @
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
0 R% L/ T0 D7 @5 U; k5 i3 a) I UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
4 R; ]) Y/ X# X4 z5 J* l , Q6 E. t) z( c
UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
& O( m, D$ |! n5 P7 q5 o! E6 d, i UF_OBJ_set_color(cyl_line,186);
7 s3 J) }% y# e$ I UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE); //设置线型/ V! i. e1 s2 w7 v
& |$ U; i. a( X& m1 {# m8 c$ H1 T
UF_CSYS_set_wcs(user_wcs); Q: g, }4 x) {0 }% _7 H2 t( Z
UF_CSYS_set_wcs_display(1); //显示坐标系(解决显示移动)
! P- |7 s: w4 X6 w9 `2 \8 j% B+ c% b; C/ S
goto l10;
0 R4 Z) H& h: Y @" t }
- g p. ?" ?7 j+ m" F, `; N. ^2 f
D S" V B1 Q7 C, I1 u% |0 [' x- f7 H, W& |/ e4 A+ M& P9 }- t/ o. y7 g
double WCS_pt[3],center_pt[3];
5 K4 c/ H/ s# n5 i; G* { tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;5 f/ `1 w0 q7 ?0 ~! _" J# w
UF_CURVE_line_t Xline_coords,Yline_coords;
6 k$ ?% I; G' I! O UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt); //绝对坐标转wcs ^2 ?0 V: k# A
1 R/ E. X" [" p
center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
$ \9 ]: D0 F$ w; ~ center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
: v/ J1 t/ b' K$ X9 v, n, P3 r; f0 m& c5 h center_pt[2] = WCS_pt[2];
c& M7 u" V6 s& j% F# R8 n3 v2 D( n0 W" L
; Z. B* W+ S% h( I) l8 B4 ~
Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2; //X方向wcs的值+面X方向的大小1/2
6 D w' Q7 x* e Xline_coords.start_point[1] = WCS_pt[1];
: {8 N' }0 R/ o7 B0 U; b+ c% s Xline_coords.start_point[2] = WCS_pt[2];9 z% N6 p8 `- h$ X, t2 W
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标- {6 P9 n0 b, [ d/ N
// UF_CURVE_create_point(Xline_coords.start_point,&xp1);
5 t2 a- @, ? Y2 P5 S$ P
6 h% ~) L% B8 I8 r Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2; //X方向wcs的值+面X方向的大小1/2
* ~7 u1 y7 d/ ~+ a% i4 L Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]; //Y方向wcs的值+面Y方向的大小5 U$ U( I$ g2 J' U
Xline_coords.end_point[2] = WCS_pt[2];! @# n) X9 z) ]* P+ Y
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标( a1 ~' n! @) r8 L o
// UF_CURVE_create_point(Xline_coords.end_point,&xp2);0 w& [& |) W# ~& i/ h( ]
0 s5 V# n8 D3 |7 R' B ^ \- a Yline_coords.start_point[0] = WCS_pt[0];( e% y9 a* I( p' s& T4 y
Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
8 e; i# I# _- [+ X3 t( b Yline_coords.start_point[2] = WCS_pt[2];( i! \7 }7 c4 k# e
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标7 m2 k8 w+ x, X' w0 ^6 f
// UF_CURVE_create_point(Yline_coords.start_point,&yp1);) |; }8 Y6 t! }
; K1 W) F6 e3 `& z
Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]; //X方向wcs的值+面X方向的大小7 S7 K" B K7 r- ]
Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;( ]6 a* g& Y2 h
Yline_coords.end_point[2] = WCS_pt[2];5 Z8 _7 y! k x0 M. w
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标8 A% K* G" f: ^4 O
// UF_CURVE_create_point(Yline_coords.end_point,&yp2);" k; s$ W v% R7 b' E# `
2 k' ], z _3 M9 x5 A6 O
UF_CURVE_create_line(&Xline_coords,&Xline); //创建中心线
' B1 i4 {2 F+ S2 J& x& _ UF_CURVE_create_line(&Yline_coords,&Yline);
! D/ R1 R A2 w! c4 b; O UF_OBJ_set_color(Xline,186); //设置颜色+ z) v1 y) m/ Z$ x, j0 n
UF_OBJ_set_color(Yline,186);
/ B5 K; `0 H- h; |! w0 Y7 Y UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE); //设置线型" Y3 U2 Y6 d& R/ E. [2 }+ O G
UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE); //设置线型; N- D/ F; H, t% v1 J8 L# [! f
6 T+ ]8 Z& e7 j P' O: a UF_CSYS_set_wcs(user_wcs);: q* h7 P+ S0 k% l$ ?
UF_CSYS_set_wcs_display(1); //显示坐标系(解决显示移动)
( Y, M0 P5 `, L8 M goto l10;4 _+ Q" b) f) X# Q( Q7 E% ?
0 V* S9 d8 M8 J0 Q5 K7 B- R7 D}
1 ^& ]0 d5 A# |% u# m+ G* a+ W* r: A$ U5 Q. c* u4 z
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
/ b8 h) ?4 k# D{, w: e3 R* R, Q; |. J) g
/* Initialize the API environment */
3 Z! w! _; @1 P6 x" D8 b if( UF_initialize() )& R9 I, O/ g2 U/ G6 V& \
{
. ? I9 s, O& Z return;
2 ~7 w' y" g, Z- X& B/ P }
! e" Q9 U* C+ Q, P% |. u$ Y0 H+ Q+ H5 n6 Q& _" K
Create_Center();6 s; ~! t4 C" T" k% g
: t' o" L: B4 a( w9 g0 e: X7 D
UF_terminate();
7 V* Q* N6 J8 X}
+ G; k& y9 y# \% R5 J+ N9 J: i- l7 i
8 f$ z4 E7 ~7 U4 ]" M" v7 \
extern int ufusr_ask_unload( void )
) v- J* w( q. M. N, n{
) I( @- N& O% N8 N return( UF_UNLOAD_IMMEDIATELY );# H& N" y. r2 Z
}/ Q+ T. p/ p3 |" {! J- L
5 `/ o/ @. h9 M) S) Z$ t
1 n' Y% E6 l B9 L' C) q5 z2 X2 ]$ D0 M
2 @! X, ~- m- a; H e; _ |
-
|