|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
3 t+ N' X9 D" x' D$ D& f#include <uf.h>
5 h- O2 j7 B/ O, C' [' _7 S; |#include <uf_ui.h>
l2 P# r, R3 P6 x% j#include <uf_exit.h>3 p9 q1 k5 r5 B+ a! y- m
5 j- _; r, x/ p! g9 n: H#include <stdio.h># Q7 x0 [: B! J" X7 Y
#include <uf.h>, _5 O& G( j! [) |$ ^
#include <uf_ui.h>
; H# b: t( g7 A( S. m# m. C, H0 C#include <uf_exit.h>( Q) @- a. I! S* o% M G( H! l
#include "uf_layer.h"
! U% ^( e" P0 E( W3 R; F' Y#include <stdio.h>
" c+ M! [- ]( N" O! `0 c#include <uf.h>
5 N& ]+ I& e! j# P5 M#include <uf_modl.h>" ^8 S$ X# F9 v( H5 v7 |" p1 f
#include <uf_curve.h>
+ [" P( Z+ v9 C( T# ?' r- D#include <uf_csys.h>) y: P5 ~1 D5 N: f+ w$ U$ s& D
#include <uf_object_types.h>
; o. k3 H' ^! K' ]0 O#include <uf_ui.h>4 z/ d. [+ G+ b* F% p! {2 T
#include <uf_part.h>
: \) j" U( `) A$ e4 N7 L* H#include "uf_obj.h"4 I+ F% y, |% e9 u
#include "math.h"" V( B5 f: o8 j4 x7 C; Q
, q! E4 _$ L9 Lstatic int init_proc(UF_UI_selection_p_t select,void* user_data)0 [& C) J) N$ |7 _/ N" K6 F% ?
{# [. b: ?. y" T* L: {5 u* a
int num_triples = 2; //只选择一种类型
0 z' P( J- o) I6 A UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
( c/ Z' j( X' F% w# _ UF_bounded_plane_subtype,1,0};5 s4 s. |/ n5 Z! H% B
if((UF_UI_set_sel_mask(select,
# g) p. W# |3 G# p% s; i UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
8 `8 z2 [! P2 Y num_triples, mask_triples)) == 0)
: s& K- T" o0 a$ R( b2 C {9 k( G7 A, ~6 f0 M5 @4 f
return (UF_UI_SEL_SUCCESS);
$ V% C$ v- i5 U, S9 P }
$ z4 Y+ W5 g& Z( e: f8 ]* ` else
4 o( J3 u- X9 g' L7 m {2 u3 m! ?& D% m) o3 M5 [; `( M; `
return (UF_UI_SEL_FAILURE);6 S+ f3 {0 H! Q3 t% w
}
F+ U% G8 u" k}
/ ^) K4 Q: s0 I$ z0 r3 U& u- D) Y
7 a5 H" Z* U, p4 L2 l s: K' o6 E9 H( E, g( {0 x
static void Create_Center(void)- \ l7 O/ L0 {9 t0 p/ c9 x
{& u( W9 Z( F$ t; y1 ?: m' q
tag_t user_wcs;( H o( }" S& D- _4 I5 y/ v
UF_CSYS_ask_wcs(&user_wcs);# p& P1 E; f5 b6 }! S; E6 a
char cue[] = "简简单单:请选择单个平面";! D4 Y1 Q! Z" E
char title[] = "简简单单:对象选择对话框"; r: T6 G; S- N# K1 N. I4 q$ G2 ^
int response=0;
, n) r k7 W$ K, ]6 p5 `" \# E tag_t object;9 W4 ?( D3 p0 L4 x7 _3 H
int count=0;* f- }, p( k* Q6 s" H. r1 f
double cursor[3];5 P! m7 K/ X/ [. K( W% p
tag_t view;& S& J: `% v }9 x
l10:
+ T3 ~1 k7 e8 h( k- A UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);- \: S( f' B$ d, C8 e2 }! h6 ^
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10/ H# \% a( w) w) H6 Y# e' V, x
if(response==UF_UI_CANCEL) return; //如果点取消就退出5 K6 x- \9 V0 T6 J5 _3 L
UF_DISP_set_highlight(object,0); //取消高亮显示( J( s9 f B0 w( A3 |
% P5 j% l" B6 r+ G$ o, s5 L
int type;" [0 f# l% M( W+ q
double point[3],dir_z[3], box[6];
* z: \8 u% n$ Q& W8 y/ H double radius,rad_data;
& R% ]$ p1 D- j- v; H int norm_dir;
! W4 K4 r" Q% N9 y UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir); //得到面的法向norm_dir,+1为正向,-1为负向" L- V3 g4 ?+ w, M$ f! k# L
% f9 P; H$ r5 |) x5 l2 ~
1 q6 M: j. A8 y# X' | tag_t matrix_id;
( R! c, \4 K# q; d% t tag_t csys_id;
9 U) [8 y: G4 ` double matrix_values[9];
, [% a/ a+ O! a, Z2 [- ?+ ~' K UF_CSYS_ask_matrix_of_object (object,&matrix_id); //得到面的矩阵ID/ h. z: D: a% q0 w
UF_CSYS_ask_matrix_values(matrix_id,matrix_values); //赋值给matrix_values% _6 }& g1 W+ f O
if(norm_dir<0) //判断面的法向是否相反, b8 D" m! Z4 Y! V- z, k; z
{
2 I: a& n) \& \& L$ d& { matrix_values[3]=-matrix_values[3];# e5 Z) j, c |6 \+ a8 Q. _# r1 T
matrix_values[4]=-matrix_values[4];
- W" i8 Y+ I+ F4 D( k matrix_values[5]=-matrix_values[5];0 n, k* }- n, }, m! U* ^
matrix_values[6]=-matrix_values[6];
' G8 v7 P i8 f) n6 ] matrix_values[7]=-matrix_values[7];5 b8 b6 |5 y5 H8 L* d t r
matrix_values[8]=-matrix_values[8];
4 f% h7 J- {, g6 A- [) y UF_CSYS_create_matrix(matrix_values,&matrix_id);& d# ?! h8 ^8 Q' r! ~- d/ S
}
! `0 W$ o- Y( b8 [ UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
- `* v# a" D9 w2 R C9 e( I5 F* r UF_CSYS_set_wcs(csys_id); //设置面的坐标系(位置不一定精确,可以通过后面修正)5 J2 C1 [' c. j! d+ H) l4 j: x
UF_CSYS_set_wcs_display(0); //不显示坐标系(解决显示移动)& T- M! D7 X% G
9 `* x' D k! v1 _/ f6 I
double boundingbox[6];2 n/ W, f1 C1 _& o T
double boundingbox2[3][3];
0 P v8 _7 h" A1 r2 S. G double boundingbox3[6];
$ }8 o3 B6 m9 Q, X6 X' O T6 N UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);* m) ^! P. _4 t$ I' [0 V
% W% k2 Z/ C3 P( v% X if(type ==UF_cylinder_subtype)
7 B# N+ S* Y) i3 d" o) T4 [* W {1 _! C4 X d/ z/ ~4 O6 r9 k
double cyl1_pt[3];
% S5 o, P. P% E- x tag_t cyl_line,cyl_pt;' Y3 w9 U$ _; v
UF_CURVE_line_t cyl1_line_coords;8 w7 ^- r$ t! R/ i9 O. p8 G5 m
double WCS_pt[3];$ @1 a9 F* L( B) |/ o# B3 { w
UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt); //绝对坐标转wcs
! j6 X# x% B, A UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt); //绝对坐标转wcs! [7 ` u/ \) ^/ C5 ^
cyl1_pt[2] = WCS_pt[2];% b" [% k7 R0 T5 U' R- w
- Q9 \7 ~# e$ g6 W( i cyl1_line_coords.start_point[0] = cyl1_pt[0];. R/ v" v# @. F, z
cyl1_line_coords.start_point[1] = cyl1_pt[1];
. g# W, X" Y' f cyl1_line_coords.start_point[2] = cyl1_pt[2];
: `+ D6 e- Y9 n* I! z+ O
" T, L9 F' X; U, D1 x8 B4 K* C cyl1_line_coords.end_point[0] = cyl1_pt[0];
) F$ v& W/ W9 O( I( d( C cyl1_line_coords.end_point[1] = cyl1_pt[1];
3 J0 _: N7 r# p3 o- y: F* F1 d0 L& F cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];. D0 T+ N/ W9 V/ ^
" ? q# K' E/ T" G9 Q9 T UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标" N) u, V6 R6 h7 |
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标( E+ n9 b, f/ N' K
# x/ n& i9 I7 y4 g+ e UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
( D+ u/ \+ F* r( I5 X- `3 t UF_OBJ_set_color(cyl_line,186);
! k M3 V1 y a, A, u! N UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE); //设置线型
3 b) s* ]4 p2 j; _6 u3 N! E0 P: ~# {$ D
UF_CSYS_set_wcs(user_wcs);
3 b; \4 O" X( f- k( Y- } UF_CSYS_set_wcs_display(1); //显示坐标系(解决显示移动)
7 B: g* U/ C, f! g: Z% U: m% M( L, z
goto l10;4 I$ }2 M- R# w* ^' }# y
}
* ?- X/ ]/ G4 U# D4 V! i/ e5 A! j% \* `" V5 F
" W/ e4 Y: |: b+ f# f/ J7 R- Y3 d double WCS_pt[3],center_pt[3];
% G1 y; T1 j( O' o1 I' E tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
2 A& M Y+ s; A% Q UF_CURVE_line_t Xline_coords,Yline_coords;, V4 [/ e9 C% E5 D! u& J1 g. G. z
UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt); //绝对坐标转wcs
) g( b' D- h5 k1 ^/ x0 {
% Q$ F7 K) h" u! u, O3 v9 Y center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
9 d6 }3 I: U3 C7 Y6 h% L' N8 H6 K+ L center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;7 J$ G5 D. }0 ]9 o* s
center_pt[2] = WCS_pt[2];
3 K7 o' m' h" g7 }7 F& Z& H- D. `
8 ^7 o0 q, ~: r3 m& k$ V. J( p- g+ @0 v% E
Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2; //X方向wcs的值+面X方向的大小1/2
9 E3 h! K7 g( Z ?9 X* u. d Xline_coords.start_point[1] = WCS_pt[1];; ~( E4 p3 _7 J; i
Xline_coords.start_point[2] = WCS_pt[2];
8 @5 h6 W4 l" s( ^: q UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标. c6 }8 S! L3 s$ Z
// UF_CURVE_create_point(Xline_coords.start_point,&xp1);% J" W; e/ Z7 C) }; g _- a) s/ ?
K1 |! V. f- q% @ Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2; //X方向wcs的值+面X方向的大小1/2
0 F' } A5 ~6 H# f Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]; //Y方向wcs的值+面Y方向的大小" i8 Y: e$ `: P" _4 {
Xline_coords.end_point[2] = WCS_pt[2];6 o3 u8 S9 e7 f9 z8 ]; e
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标9 q( @* ]+ l/ I4 q
// UF_CURVE_create_point(Xline_coords.end_point,&xp2);
) I# z, `* m; d! B! z* k
1 w& v' Y& o* U* |# T9 n j( R% P Yline_coords.start_point[0] = WCS_pt[0];
" ^" r" t& r! f Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;7 C! [+ p0 D# q' X
Yline_coords.start_point[2] = WCS_pt[2];/ Y7 w4 J- w, f7 g+ J& x, c1 m% s2 r
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
I) W# Z5 S) Y. ~// UF_CURVE_create_point(Yline_coords.start_point,&yp1);
* L1 y& Z4 B5 a2 R* H9 i9 N
: b# e) g1 S4 `$ I) L# |) @ Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]; //X方向wcs的值+面X方向的大小
: j1 }; m+ \0 U; J Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;% d$ Q9 \* E @) B( d
Yline_coords.end_point[2] = WCS_pt[2];
/ |7 a* `+ U- O5 R* Z W; z( | UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标. d, |7 n/ I3 @; @& M* \ z
// UF_CURVE_create_point(Yline_coords.end_point,&yp2);
) W2 ~& a( \. s+ U6 I9 {$ y + s) N: ^: g3 m
UF_CURVE_create_line(&Xline_coords,&Xline); //创建中心线: y+ m/ h5 Y% b( w
UF_CURVE_create_line(&Yline_coords,&Yline);
( H) ?" X; r0 ?; j" H UF_OBJ_set_color(Xline,186); //设置颜色
g. d1 \! C$ s L- ]* O UF_OBJ_set_color(Yline,186);- E8 o! U5 D$ |7 Q; h3 U
UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE); //设置线型
* ]0 k8 z) m9 D# V UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE); //设置线型9 k2 K: |+ X8 f4 o: S3 _3 z, A6 M
% z5 _5 _5 N/ T& k
UF_CSYS_set_wcs(user_wcs);
( d' y1 Z" q/ ]/ n) Z UF_CSYS_set_wcs_display(1); //显示坐标系(解决显示移动)$ d0 p: M6 D% a$ o( b
goto l10;* j' N3 M0 ^- {/ V6 Y& @/ g5 v
5 _8 @* q( A! y7 R% a
} b: I3 _% d( R
1 \4 @4 o3 _/ x7 v" j' _extern DllExport void ufusr( char *parm, int *returnCode, int rlen ). V- [3 C6 @- \" D& K4 m
{
; s, s8 e) Y1 X! L; L* G% X: b; E /* Initialize the API environment */
$ h; z1 q9 T% s r% }1 P if( UF_initialize() )
; v3 t/ s. y7 i6 t {% ]% i; `) a3 A0 r
return;' f: I+ N$ L* z) f% {* X
}3 z0 K# i% C- J$ h+ E' _+ ? p# ?
8 H) T8 f3 i( |2 c/ ]; A
Create_Center();4 }6 f2 ^- \! E9 ?0 d, g
" F4 O" X: Q$ C/ G1 h Q6 ` UF_terminate();
+ S: ~) m- G6 H1 y8 G' K) c}
# u* p! K. Q6 s6 }2 L$ Z3 X9 |" g3 {% O
* {9 G' s& F" J& f. {8 J0 W
extern int ufusr_ask_unload( void )9 I/ `' {* Q& P9 K' w' L
{
, G" h$ e3 j2 r& | return( UF_UNLOAD_IMMEDIATELY );- ] u/ M5 f) A; [, g4 _
}
- k6 i( q' |- k# I* k! d, q! Q/ [8 J- O0 _
9 |- V7 {0 j7 T. ^1 m0 B x% m- K X, A8 T6 v
' W# T5 o% M( R. Z Y0 p4 b |
-
|