|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
2 C# f& r# Q8 M S3 D8 U' p% j) z9 u#include <uf.h>% {' j2 B6 Z8 b4 U' n
#include <uf_ui.h>
) j8 G& I+ g5 q5 ?4 M#include <uf_exit.h>( C3 O$ Y8 X2 v9 y0 }
4 V0 r/ @+ T2 c. x3 @. u. S& s
#include <stdio.h>
" q e8 h: Q2 ]" F5 y#include <uf.h>
; [4 x0 @( H2 U, f#include <uf_ui.h>1 q+ T; o( e" A
#include <uf_exit.h>
* y7 A: K. |" d$ I#include "uf_layer.h"
$ [- p7 H2 L' W" {#include <stdio.h>
& x: Z9 e2 ^; n q7 r) H#include <uf.h>' |: `" x- H. v8 Q
#include <uf_modl.h>3 a h& q6 q" y1 e( v# z
#include <uf_curve.h>
6 U: ?6 o& [. L1 Y% W9 j" V#include <uf_csys.h>
* C% R% l& f! @, b* _#include <uf_object_types.h>0 s8 [1 g3 C3 K% Q( Z3 g9 \# G8 k
#include <uf_ui.h>
0 d/ A+ l- W5 N#include <uf_part.h> |, i, c$ t3 L/ E c
#include "uf_obj.h"
7 c, F8 u1 b6 K; [" n! L6 b#include "math.h"( n1 I' Z# i7 ~) l: G
6 ?9 z/ x; t9 [5 o2 l( l: u9 wstatic int init_proc(UF_UI_selection_p_t select,void* user_data)
. w9 f* P; a6 R5 p6 K{
0 M8 {5 w, b& X3 d$ R z1 | int num_triples = 2; //只选择一种类型
% i. D' E. K- y" y5 r- m UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,6 Z {8 W! r" i# L
UF_bounded_plane_subtype,1,0};+ ]* h& G+ W. P/ }
if((UF_UI_set_sel_mask(select,, l9 t' V) @) r2 r. j* x- u& m- E
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
* E0 n7 B( \+ o num_triples, mask_triples)) == 0)- c j( _, g7 v
{+ G7 u8 E) F- {1 H1 X2 G5 V
return (UF_UI_SEL_SUCCESS);
2 x. O$ {6 U9 }& P }
; J! A! I7 R# a: x3 `+ E5 v else1 D4 c) u+ C; Y; x4 f$ p/ U
{) C+ `4 F+ A' ?/ `: e+ g
return (UF_UI_SEL_FAILURE);! F4 U7 A+ }% p# V8 Q$ n
}
4 j" z5 {* g: }}# P8 V, v/ }% G2 ?
( z2 d1 ]* A3 m* o
f, I0 [- G1 T; C( f vstatic void Create_Center(void)
1 p5 P: u6 A# b" {- V- P$ m{& P ~) {0 y( u$ T3 V
tag_t user_wcs;
( O3 {5 U( T4 X3 X4 f! A$ Q" w- M UF_CSYS_ask_wcs(&user_wcs);1 {" J2 p0 I! I: T+ t5 D" e
char cue[] = "简简单单:请选择单个平面";
! S( K' D4 L; I' I char title[] = "简简单单:对象选择对话框";
" K6 I* D' E) |- V7 p int response=0;
0 e0 \- I6 P p+ [1 [& U. T tag_t object;: w; S% o$ p2 o; d
int count=0;& l1 T K* G% v% H8 @
double cursor[3];0 h' {: U. x- G+ j. W( ~: T( G
tag_t view;4 p9 G& {2 N- |( l8 k
l10:: Y$ ` H( `- f2 W
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);0 I, H' n9 g! G" ]5 `% w* m% a
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10' \, v p" g4 h3 q" L; d7 k
if(response==UF_UI_CANCEL) return; //如果点取消就退出/ d' i# f& C+ p C/ k% D% g
UF_DISP_set_highlight(object,0); //取消高亮显示
, N5 h2 S+ ~; s4 _; z& }7 N8 o- T3 n) U! T$ p1 ?; C+ P1 \
int type;3 H3 f) j0 T9 {, H: x5 V; o
double point[3],dir_z[3], box[6];$ F3 _4 F! z7 k5 Y# `
double radius,rad_data;; J" Y% X) ~: I
int norm_dir;( Y0 J6 M! {7 \/ V; f- |
UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir); //得到面的法向norm_dir,+1为正向,-1为负向
+ F: K" e7 a4 w% v
( h$ j" v- m: y {7 P, ^
& K3 ]/ |5 O9 [+ s$ ^7 R5 e tag_t matrix_id;+ ^ p* H6 m. g% M
tag_t csys_id;: d! ?2 r6 u( ^- @) U I1 k
double matrix_values[9];7 b3 T. U; Y" F( J# U* k
UF_CSYS_ask_matrix_of_object (object,&matrix_id); //得到面的矩阵ID5 ]/ [, D; }# S1 ~1 p
UF_CSYS_ask_matrix_values(matrix_id,matrix_values); //赋值给matrix_values2 s r4 g) [, g, ~( T% V
if(norm_dir<0) //判断面的法向是否相反
% C, ^( r! |: R {
5 b1 E/ `9 k' x9 u1 O I, V matrix_values[3]=-matrix_values[3];
" g8 g+ b4 e, i; n7 w2 b5 j# o: J matrix_values[4]=-matrix_values[4];- R' R' P! \( ]8 n7 G, G# ?
matrix_values[5]=-matrix_values[5];+ }, p- S0 i! i# s
matrix_values[6]=-matrix_values[6];# i9 Y5 h5 q e! x, M
matrix_values[7]=-matrix_values[7];
3 I% z! r5 I7 U. R: f matrix_values[8]=-matrix_values[8];
6 c3 H0 D4 C( R- @1 F5 J, U; R UF_CSYS_create_matrix(matrix_values,&matrix_id);
8 l* U& B/ m7 P2 f }- |* E$ q8 \) O) k- E
UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
4 v0 i' ~) A* {1 M UF_CSYS_set_wcs(csys_id); //设置面的坐标系(位置不一定精确,可以通过后面修正)
: O$ \4 U3 ^9 I5 m0 e UF_CSYS_set_wcs_display(0); //不显示坐标系(解决显示移动)0 [; [0 ]- }( i
d3 f0 G( J' v) U2 r) b
double boundingbox[6];8 ?4 Z- \8 n3 ~- q
double boundingbox2[3][3];
" F. s1 {/ g7 x9 L double boundingbox3[6];
6 w6 D0 [: k. K7 ~: |9 l; w: P9 k UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);/ ?/ ^3 g/ Y9 a" u
# s5 _2 q3 L4 A" m. a- E- G8 [9 L
if(type ==UF_cylinder_subtype)
( b+ {5 C: Q$ W) `, C* @ {
3 @% z- O; j2 O& [) p' O double cyl1_pt[3];3 Z$ Y7 ]8 r4 w8 r
tag_t cyl_line,cyl_pt;
3 C7 R0 a* J; x( t UF_CURVE_line_t cyl1_line_coords;
( A/ ^' B* N/ U2 T( d$ e& l4 ` double WCS_pt[3];- E I9 M4 ^( |9 j7 [
UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt); //绝对坐标转wcs
# ]( `$ k5 M3 A; ]3 s UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt); //绝对坐标转wcs, Z, V( U' w) M4 x8 ^, F3 ?
cyl1_pt[2] = WCS_pt[2];( d$ ~2 R; H3 @4 K
0 v. Q6 W* ?8 v. ^: h& `
cyl1_line_coords.start_point[0] = cyl1_pt[0];
4 u q# w. G; }9 X9 u8 O# T. _ cyl1_line_coords.start_point[1] = cyl1_pt[1];
5 H/ F5 w& s l% R; O& ^- r+ f cyl1_line_coords.start_point[2] = cyl1_pt[2];9 h' W9 T) |9 K( w
* ^0 `" H4 _. ^5 Y1 P4 d- G1 w. Z
cyl1_line_coords.end_point[0] = cyl1_pt[0];) c% S K* z! D( d& K: d& j3 a# R! V/ x
cyl1_line_coords.end_point[1] = cyl1_pt[1];
. C# N5 e! r9 L. j% K: W( u cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];. r0 {7 B1 }6 x+ u5 d4 A
" o' a) d" f( L' i7 x/ p" e- [8 o' h. G UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
1 }) ]* j1 R. r0 f2 g UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
; O7 V; ]0 y7 q: l4 K1 J4 D
1 @( X% w8 w# p0 P4 | UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);; ]! Q W% F$ M6 f+ F
UF_OBJ_set_color(cyl_line,186);
, P7 D3 C* }$ q; V$ c7 N7 b8 A UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE); //设置线型
9 e8 l5 t" W8 J% @; Y: c# X+ |+ R, B2 l8 t+ G2 X
UF_CSYS_set_wcs(user_wcs);
! G& `7 d+ {: D. ^1 Q( q( E UF_CSYS_set_wcs_display(1); //显示坐标系(解决显示移动)0 M. B W5 F( T( s o
" {6 D7 H* o: S- F' W3 H
goto l10;' r) U& u$ U- v4 L$ a( J
}$ r+ J7 K( k: x
c) o- C5 S- d+ g1 `$ J$ T' E3 D; F) x& f% Y$ `* T. H
double WCS_pt[3],center_pt[3];2 o9 k+ P S5 G4 J+ {, G
tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;6 ~, @/ x8 ]5 X& `6 L0 I1 S
UF_CURVE_line_t Xline_coords,Yline_coords;
4 Q+ t0 B9 R! ]' u' o% h' t UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt); //绝对坐标转wcs
- _' W) A7 @1 X
. F) B2 m P4 @2 r* {8 l5 m center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;7 G" A9 V3 A2 q) K2 Z( }
center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
9 o' i& F$ N" f center_pt[2] = WCS_pt[2];
- b+ e$ X/ t6 G3 ` w* k& D/ e" u& o. {' Y) E" U
) ]. n+ u! Q1 d Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2; //X方向wcs的值+面X方向的大小1/2
0 e1 M: V# W$ D2 h k& @ Xline_coords.start_point[1] = WCS_pt[1];
& I$ P, l6 _ J# m Xline_coords.start_point[2] = WCS_pt[2];
. ^! I6 A z8 z6 a3 o UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标3 @* h( U% M0 G" e) O
// UF_CURVE_create_point(Xline_coords.start_point,&xp1);
$ v+ P- A, y( u' \/ O. V# }6 k/ c' L: ] q) t; R" u
Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2; //X方向wcs的值+面X方向的大小1/2 D1 e9 `/ Y8 v
Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]; //Y方向wcs的值+面Y方向的大小$ _& L1 j& z: b& t+ a+ v7 x
Xline_coords.end_point[2] = WCS_pt[2];# i8 u: L. o1 U! D3 B
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标+ b5 W) |, F" x- T3 B4 I
// UF_CURVE_create_point(Xline_coords.end_point,&xp2);
) E, o+ ~& A% ?8 i7 r' P: [' @( G$ C2 D( `* {7 @
Yline_coords.start_point[0] = WCS_pt[0];& y) X2 [+ v* k
Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2; m1 k( ]6 y+ i2 b7 o# N7 U7 M
Yline_coords.start_point[2] = WCS_pt[2];5 y. M/ E; `6 L2 m3 p2 {
UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
) f- v' F9 x8 u \4 v& ~// UF_CURVE_create_point(Yline_coords.start_point,&yp1);
" o s; A' h( r1 l1 q
! T( R# t9 _, A" d Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]; //X方向wcs的值+面X方向的大小7 D2 y: N0 }8 l2 {6 T W' q$ j# Y% G
Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
) {- f1 R$ w1 D9 X. p0 C4 H6 U8 X Yline_coords.end_point[2] = WCS_pt[2];
3 r' O, i$ [9 L8 Z0 a, G UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
; e2 t- _( _* _7 N+ t4 t// UF_CURVE_create_point(Yline_coords.end_point,&yp2);$ t7 q: e8 A9 W8 z1 E' k: O
+ T& O9 s5 C5 v1 T UF_CURVE_create_line(&Xline_coords,&Xline); //创建中心线
4 S" n0 b* O0 X# i% P, [ UF_CURVE_create_line(&Yline_coords,&Yline);
- S- M& Y9 G/ v" H+ p UF_OBJ_set_color(Xline,186); //设置颜色
s- _" y d% Z0 l; F9 \ UF_OBJ_set_color(Yline,186);8 I% i- j7 n5 N8 v) d
UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE); //设置线型! Z% P2 @) c. X+ p* E A
UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE); //设置线型6 S- {+ l, [7 `3 D1 X4 J
9 I' Z) N3 e5 R2 d2 K
UF_CSYS_set_wcs(user_wcs);1 {! S1 s) u/ T2 A
UF_CSYS_set_wcs_display(1); //显示坐标系(解决显示移动)
* W) U8 l) j6 {! q- G goto l10;5 l- H" A* g5 A: o+ |( U' q- F4 B ^
- O5 f5 P1 u1 Y+ d$ e& ^; w}
! u% n2 s* T2 @2 q5 P. Z$ {
2 d$ D- n: c4 t% V7 I9 o Textern DllExport void ufusr( char *parm, int *returnCode, int rlen )
& g9 P: S3 z5 s) B: Z{
. ~. k" V2 l5 {8 F /* Initialize the API environment */
9 M3 D- Q V$ P( R* L' M; z2 V if( UF_initialize() )
. _. j0 g B, q" R' l {. T7 ?% | q! O* @4 m! l ]4 A7 M4 e$ p
return;& A4 X% {) R& g9 ]" R
}
, `5 H5 G& U% x8 e5 ]" ?: L- F
9 w( z, L2 Q# s/ I Create_Center();9 f) t8 p2 `( ~7 O. W5 M4 ~4 }" d5 c
; ?; S5 t3 ^ x
UF_terminate();7 `' ^, G% c( | [5 P3 z0 [1 B! _2 l
}$ D% W" R! P, A* O7 A) U8 L$ u
9 ` ?9 b8 s/ a: j# f
4 D9 f; x7 l: F9 c* @extern int ufusr_ask_unload( void )
" w/ Y& r. r* B{: g8 A! n2 X2 L7 n1 R# ~7 v/ p6 r
return( UF_UNLOAD_IMMEDIATELY );
7 L/ Z M: U" p* O' v}
$ N _; s0 |: N- ?, ?' g- q2 ~; U4 `) B" K- v: m$ R' W: E1 ^; K
n' V! C; G m+ H6 t
/ m- j4 N, Z# K7 U' `- w
! Y6 [2 e1 E3 L/ J# a |
-
|