查看: 4852|回复: 5

[资料分享] 选择平面,创建中心线

  [复制链接]

8

主题

58

回帖

896

积分

培训VIP会员

积分
896
发表于 2014-12-12 10:44:01 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×

- m( `  ]- y) V  x0 E/ T, c! _5 _#include <uf.h>% c% |# X; K' k9 p
#include <uf_ui.h>
, l" U. M4 q# P( ^6 i0 H5 _#include <uf_exit.h>' i9 }  O* K. f: R2 V9 \

9 r1 @1 \6 F$ Z  v8 D4 T#include <stdio.h>( @3 \  x) [0 q4 [
#include <uf.h>& K( }8 h/ G( e7 O, `
#include <uf_ui.h>6 E' I! y/ \; D) v4 Z
#include <uf_exit.h>, z0 \3 n2 M9 q; \& b
#include "uf_layer.h"
: \7 k+ W8 j( g2 \- i#include <stdio.h>
" |. j$ s7 P# }: k4 c6 f#include <uf.h>9 H! P& O! C+ B: p' ?- W
#include <uf_modl.h>
0 U9 u% e& n) p0 S# _. P#include <uf_curve.h>
- o2 e# P1 n# ^$ o#include <uf_csys.h>
. U+ Z' F5 c5 F& q#include <uf_object_types.h>
$ P2 j4 B/ I/ Y' _* S#include <uf_ui.h>% m/ Y7 ]) f- S6 p: c
#include <uf_part.h>1 E3 w9 d" q& J1 Z8 c7 E
#include "uf_obj.h"4 q$ Q+ q" |7 s' m- J
#include "math.h"
5 u- u7 G) u+ a
8 }: x# b# U& b8 R) ?3 [static int init_proc(UF_UI_selection_p_t select,void* user_data)
& _$ ~4 a, K# p- K{
& b" g7 h- G2 A        int num_triples = 2; //只选择一种类型
  U% O9 \3 K  u  b# a8 n: ~6 W        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
5 N5 ]  z) P. U( m3 q, N                UF_bounded_plane_subtype,1,0};' m. F2 P3 o0 @/ t8 A2 U
if((UF_UI_set_sel_mask(select,
7 q5 R( o# Z* Q, [: _  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,( J( h9 Y# |1 H5 a) e
  num_triples, mask_triples)) == 0)
9 P9 U  _* F( j0 m/ [8 W& s! j {+ o+ F: P3 b6 K9 ?+ I& N
  return (UF_UI_SEL_SUCCESS);9 n  g( N( _# O: R! a. }3 o
}. K$ R2 s0 F; `7 @
else
( \4 H& C) T- Q# M6 X& f3 o {# n; i  u" `* \, P3 `, H$ G5 e& [8 |
  return (UF_UI_SEL_FAILURE);
- n! v& ~! n' P9 p( A }2 J; ?3 K) S& H8 Y- i7 D/ N
}# z" D* ?/ A/ B9 A2 B% }
8 ^) f- K* z: d

  v6 d" E: E3 Tstatic void Create_Center(void)  |  w+ U9 I2 }3 I$ t
{' `: C! A( K: S) M: }, ~
        tag_t user_wcs;
, x1 M# G  T0 X; ?9 h        UF_CSYS_ask_wcs(&user_wcs);
* U2 u+ {0 G" C% K9 l% O        char cue[] = "简简单单:请选择单个平面";
- n4 r+ n; M0 d+ n; k        char title[] = "简简单单:对象选择对话框";
$ Q0 T9 g; E; u- c7 d' B int response=0;
+ Y+ P* }% `# r) b1 `/ o7 f tag_t object;
: F7 H& l! w) W  l+ n int count=0;+ @/ O/ ]4 e6 a. _5 f* D. L+ n/ @
double cursor[3];5 P+ L% G) v2 O, S. z: x: M4 m5 _
tag_t view;# z4 |0 W" V0 Y3 U
l10:
. u$ Q5 d" M8 p- Q# O UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
) r: O+ J" P' e* \9 ~; P if(response==UF_UI_BACK) return; //如果点后退就跳转到L10  F; c( J, Q( k! {" k
if(response==UF_UI_CANCEL) return; //如果点取消就退出# h$ |" i# l! n. g' F0 W1 a# J
UF_DISP_set_highlight(object,0); //取消高亮显示
7 N9 A8 l9 V  x# y" \6 R6 Y/ c( ^* c
  int type;6 w& v8 ~5 T8 V; W: h" H/ ?
  double point[3],dir_z[3], box[6];
/ Q! v* J  a) k; A  double radius,rad_data;8 j4 |$ I, j! f. N2 o
  int norm_dir;% I. ?" H4 ~' [3 n  o  z* Y
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
) x# n+ |: @( W/ h; H( I$ \
) h; O. X; [/ X+ T' @9 J9 D: N  Q& M- r& L# [! y4 |' _% @
  tag_t matrix_id;
& x+ H! }0 H) @5 e7 C5 d$ i  tag_t csys_id;! v1 H. I7 j6 H: [" e! e
  double matrix_values[9];3 A) ]& ?0 E9 ^9 @- T
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID% O% ~% ]( M$ j. ^9 ?! S' C- L
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
) a$ k4 A1 z- U7 c  if(norm_dir<0)        //判断面的法向是否相反. t* s; M; I1 ]* m+ {$ o( a
  {! [2 J" [4 ?' b( l. _  N4 B
   matrix_values[3]=-matrix_values[3];
/ W' ]3 q; j* u1 `% l( N' T   matrix_values[4]=-matrix_values[4];  f- n+ k. O7 V0 m
   matrix_values[5]=-matrix_values[5];  u! S2 Z1 w+ |
   matrix_values[6]=-matrix_values[6];
$ D* m9 M5 F. z: `8 _   matrix_values[7]=-matrix_values[7];
+ X& V/ \6 T! N1 @) {; n& D8 B   matrix_values[8]=-matrix_values[8];
3 D4 J; \0 W; b2 h   UF_CSYS_create_matrix(matrix_values,&matrix_id);
' w8 ~$ O9 a  R4 p8 ^- L  }0 `- N- M7 _% Q7 D  T
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);7 D# Q# p* g$ N/ o  x
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
  N0 O5 f- c1 t' p6 d4 i UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)# J: s( V# x! E0 }
, Q/ ?& [) _; K7 ?
        double boundingbox[6];; j- R( w4 m) ?7 x
        double boundingbox2[3][3];' h/ Z: b7 G6 j1 B2 s1 G3 G
        double boundingbox3[6];
5 f8 z  W! V& i- x* B( H        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);2 `* r. N" x) o' Y& q" T0 i' N3 i

5 @" ^$ y: K* h0 o+ l$ o. n        if(type ==UF_cylinder_subtype)
" U# f, q! n1 c0 p# P        {
& p7 z6 Q+ t) @1 B                double cyl1_pt[3];
& S  w* \/ V7 h/ G; J2 L                tag_t cyl_line,cyl_pt;, p& U% X3 b7 }  P* O5 I. a
                UF_CURVE_line_t cyl1_line_coords;- w" m5 ~0 E- ^( C8 t: x. V8 d" F
                double WCS_pt[3];
8 ?% H) C( a  f0 H% H                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs+ [6 C% b% X) y) _. P, _& u
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs" }  w, w" c2 g$ Z4 y2 k1 U2 f- H% k
                cyl1_pt[2] = WCS_pt[2];
/ G( r% u+ C% K. U+ b/ @; _
( H0 Q6 w. l1 m) x* z0 u" d                cyl1_line_coords.start_point[0] = cyl1_pt[0];; M5 [" j, y3 R7 k( T4 o- }
                cyl1_line_coords.start_point[1] = cyl1_pt[1];' b5 K- g) s' X
                cyl1_line_coords.start_point[2] = cyl1_pt[2];
- U6 Z3 |6 c: u1 x! b+ U) {, T$ P: ]5 k+ [% `( ~
                cyl1_line_coords.end_point[0] = cyl1_pt[0];- q% x( n5 k/ w' t
                cyl1_line_coords.end_point[1] = cyl1_pt[1];# y* z9 e' c# @$ }7 V+ p# Z
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
; |- F) R3 f: r" W9 \, d9 m' C/ o% j  @: c1 \1 E0 g4 z6 i3 J
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标: @2 a( W9 w" ?3 u% q
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
2 W  u7 E  H) W; v& H               
$ D6 I( C/ w) X2 D                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
9 H1 a% k# o+ q                UF_OBJ_set_color(cyl_line,186);8 K8 G2 k6 `6 g4 q
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型. ~1 s2 i! m& O" f4 o7 t

6 R* e3 V& d' ^5 X                UF_CSYS_set_wcs(user_wcs);
4 V6 [, c: a) F+ F* c4 }                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
2 U3 w( T" G" F
2 h0 C4 ?" U% }+ l3 s- i                goto l10;
/ p2 c! R. V* c- l- r2 l/ E        }5 \8 R% y% u- E+ \7 z( k  }
# a1 {5 |6 ^$ c# @
7 B, K( K5 E6 x
        double WCS_pt[3],center_pt[3];
+ G/ Z" G0 ?: w! T; v4 a+ _        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
/ j) H4 n3 z8 v7 ?* A4 c        UF_CURVE_line_t Xline_coords,Yline_coords;- l: S3 I& c( @9 S5 P0 j, D# r
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs8 F2 Q3 z& J9 N$ Z
        " \% P7 H4 Z* ?2 P, w7 }; J
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;' t4 s" t7 [4 i3 R, ^2 Z7 Y( e/ f6 o
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
) r  R' O$ M1 _1 Y        center_pt[2] = WCS_pt[2];) e1 S$ d3 L6 V/ W
/ ]# Z1 f/ l6 ~0 Q7 ~. ~* ~7 J
/ u, _3 ]# f2 j4 r1 n7 e
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
1 t$ t0 H/ G0 e, @7 I) _1 ]& p        Xline_coords.start_point[1] = WCS_pt[1];
  I5 p( k; @% p  k        Xline_coords.start_point[2] = WCS_pt[2];
; [% R  i. O9 R4 J        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标; |9 M5 x$ n( K
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
1 a5 S" Q" \& F6 E/ l5 l7 d+ J+ Q$ |1 z# ]) l
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/24 |# ]* e! S4 H; t* J7 ^
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小1 v" Z1 M& j, M# p
        Xline_coords.end_point[2] = WCS_pt[2];
  X9 a' c3 ]2 ]' Y, ]7 O        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
' B* }% m  M  B# H% @//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
0 c, O2 t( D7 J1 w* b
8 d. k9 Y4 O2 i* Y5 @        Yline_coords.start_point[0] = WCS_pt[0];7 i5 l+ K& E3 U! _0 F
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
8 Y9 s5 V1 o1 a0 m$ @0 _        Yline_coords.start_point[2] = WCS_pt[2];4 J* x0 I7 i$ ~/ ]/ F4 A9 h
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
0 U& b7 p( }4 P//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
6 I4 p/ m  E' P" t( a0 a
1 p0 Y0 D# n) ]$ X- N3 Y$ L: W        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小4 J; V( ?  ~. ^& X9 f' d
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;) ?; v* e) G  d9 ]- b
        Yline_coords.end_point[2] = WCS_pt[2];
& c6 j1 u; @: [+ a% u; J7 Y        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
- z4 C  B) `5 W9 s, v' S: q# \$ N8 W8 e//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
. p1 w, J$ T4 I" ^/ K# w  h) T  D        , r! o& D/ C* [8 n6 {3 ]
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线$ A. |& V/ f/ V* Q9 X/ ]% u3 S
        UF_CURVE_create_line(&Yline_coords,&Yline);5 O% I& c& [* g% ^3 j  n) |
        UF_OBJ_set_color(Xline,186);        //设置颜色
$ k0 I* d. e3 s$ r/ D        UF_OBJ_set_color(Yline,186);) M3 W5 r& S: U$ ~3 W. u/ g
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型4 E% h# |. G, r
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型/ }7 |. f8 `' G. l; q

/ U% k7 h! w) i        UF_CSYS_set_wcs(user_wcs);! Q" s; G* U1 F  ^% `/ K% y. t
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
0 I# n. A, Y$ d( Q        goto l10;
; v1 L/ A/ @: I8 Z5 Q( L& m
8 ~" [; n1 z% K* a6 O}  \" X/ q1 ~4 c- s! J2 B
3 o- P: K  g4 t9 z6 m0 n2 M" j6 [4 Q
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
% |5 s# k) h3 z+ d/ f. `{
0 o' m8 D3 h8 a; h  O9 R    /* Initialize the API environment */
, O& z! V4 v, K* ~5 s/ B    if( UF_initialize() )
% E+ S) p' R, B4 s* b: `0 S    {
; X8 Q" R" y/ M1 [        return;3 n# J6 E1 U( z
    }
, c1 P! C" \* T, U% r; X
. |- k6 P& k1 I        Create_Center();( V6 t0 C7 L) g) M0 G

& I' Q' K3 y" c7 ~    UF_terminate();: |8 B! r! p% T1 v+ l; D7 Y: }
}  G0 L4 u) x3 w. T

- c0 K% l' D* U' y
7 S& I1 m& z' b9 Hextern int ufusr_ask_unload( void )
$ _5 D+ o, h3 V7 ]% v- c& I# r{& f/ o0 V3 j$ c! x7 [+ R2 W# e/ h. Q
    return( UF_UNLOAD_IMMEDIATELY );
/ \2 O; A1 U* o2 f}
& K$ K4 x+ ^8 B, H! q+ x/ o( ]( M2 F* T( \9 U
0 W" {# g; ?, r- u3 |- l
9 y0 _4 d1 Z6 }- z8 r

1 Z! m7 f0 b# i7 ?* I* O% _
11.gif
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

8

主题

58

回帖

896

积分

培训VIP会员

积分
896
 楼主| 发表于 2014-12-12 10:44:43 | 显示全部楼层
呵呵,终于写好啦
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

4

主题

3

回帖

38

积分

管理员

积分
38
发表于 2014-12-12 10:48:43 | 显示全部楼层
简简单单 发表于 2014-12-12 02:44# ]+ C. y+ l$ I2 V
呵呵,终于写好啦
8 q  X8 \: G$ H, u" E4 v+ k
不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

8

主题

58

回帖

896

积分

培训VIP会员

积分
896
 楼主| 发表于 2014-12-12 12:01:37 | 显示全部楼层
老师多多指点才行
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

4

主题

3

回帖

38

积分

管理员

积分
38
发表于 2014-12-12 14:24:54 | 显示全部楼层
简简单单 发表于 2014-12-12 04:016 K- K3 t, e' R5 _: k
老师多多指点才行

" p7 Q$ g; {1 G; ~2 Y后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

0

主题

21

回帖

56

积分

注册会员

积分
56
发表于 2022-12-21 19:59:03 | 显示全部楼层
好人一生平安!楼主好人啊
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部