查看: 5129|回复: 5

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

 火 [复制链接]

8

主题

58

回帖

896

积分

培训VIP会员

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

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

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

×
+ H: N# ?2 U5 k; h) ?
#include <uf.h>
% U& }7 E* W; H9 H8 @' t/ I. e#include <uf_ui.h>
7 d3 E' x1 }+ T+ ^, U8 X5 M#include <uf_exit.h>% X. s3 ?0 g, U! |. \" r& t

5 \8 j! n5 Z! m6 h" i#include <stdio.h>& ?& ]9 E% @' w7 r' }( V0 T
#include <uf.h>% J- Y1 S8 T: h, W
#include <uf_ui.h>9 Z! u( n6 ~5 [" d' Y
#include <uf_exit.h>( L/ e8 k' i2 V" e5 W7 D2 K
#include "uf_layer.h"+ @& f* j' F5 B
#include <stdio.h>( u5 A& X2 f  o2 G% m" ~6 \) g  [
#include <uf.h>
: q- n. d0 g/ h#include <uf_modl.h>2 Q: a5 x2 \- \; f+ b* s
#include <uf_curve.h>
! I. B6 L7 ~& F( W& _" U$ {& G+ x#include <uf_csys.h>% L( r$ ~/ N6 G( o5 W
#include <uf_object_types.h>
# J2 w2 T( h! l3 p. Q#include <uf_ui.h>
( R4 d% g4 H6 w9 J#include <uf_part.h>7 Y& \/ H7 _; V& f* t2 z
#include "uf_obj.h"
  e" {, G, I& \; G#include "math.h"6 f+ E7 a5 R# s9 v
: _3 t. D7 [/ j- d
static int init_proc(UF_UI_selection_p_t select,void* user_data)( R+ u, ]4 i+ v. s! b+ M
{
, w3 N! ]- m2 `+ U4 c* d        int num_triples = 2; //只选择一种类型' h7 I& l9 h6 I9 t& A
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
- h# ~  Q9 `1 _$ E6 G8 {( q                UF_bounded_plane_subtype,1,0};+ x. [5 o# b- p. j" x; `# K
if((UF_UI_set_sel_mask(select,
- \/ ~+ j# A% A  D$ @$ e5 V. K  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,2 J" H) }6 u0 n% F5 l7 p
  num_triples, mask_triples)) == 0)4 R# n  J+ N* _/ }
{9 |" V" s7 n* r0 E, ]
  return (UF_UI_SEL_SUCCESS);
4 o, e8 {) X( ]  a$ ? }
" Y( ?) @) ~$ _6 f$ H0 [2 E else
+ \, W, l, ]: I# `3 Z9 ^8 e {' Z/ ]5 C3 t# r/ r/ Z/ d
  return (UF_UI_SEL_FAILURE);- k8 r9 ^; u* Y2 y: c, Y
}
) A3 k% v; j0 c) e}' ?0 o# j/ N# t

+ @- l1 S4 k) ?! f# N4 A" n. i  F3 ~2 o
static void Create_Center(void)0 _, N6 C0 e4 r1 Y0 p
{1 p4 d) L, A: s+ X
        tag_t user_wcs;1 h" r; |% Q: ^8 s+ N, A6 D
        UF_CSYS_ask_wcs(&user_wcs);3 t) e1 s/ V+ k
        char cue[] = "简简单单:请选择单个平面";- {( V- l: B6 ?( ]; W. b0 i( R
        char title[] = "简简单单:对象选择对话框";: b+ j2 D. N  F4 W, d5 M# u& t4 o
int response=0;
: n% R  U; q6 q! y3 W1 X tag_t object;, L* ]+ n. ^% z& W( |0 C
int count=0;
* }+ Q" ]" D  P& ? double cursor[3];
* r5 L+ w# ?/ l* ~. b7 w/ a7 Z1 Z tag_t view;# C4 H" Q; S% |4 v
l10:
) @5 N. D* }* z& G9 U$ Q! | UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
4 ~. M5 J2 q0 Z& z1 L- T* I5 M; ] if(response==UF_UI_BACK) return; //如果点后退就跳转到L10# Q+ v, P/ B- f! k/ r, z/ ]
if(response==UF_UI_CANCEL) return; //如果点取消就退出
0 K/ r6 p" W1 k/ L5 S" ~! _ UF_DISP_set_highlight(object,0); //取消高亮显示# [( g) R, N) ^+ _
6 l1 N( t3 G& I  T
  int type;) Y* J1 k) P0 U) `1 i3 l
  double point[3],dir_z[3], box[6];4 K2 B5 B& O8 W3 u
  double radius,rad_data;
9 d: X! D6 }) o" k. \! g/ e  int norm_dir;
: b9 i$ m1 @1 h) a* H+ y  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向+ G# E4 x# Z2 l; U; d+ b6 j- Q
! x) Y6 e  T( e$ Z

9 T( r' T6 D6 a. g# D1 U  tag_t matrix_id;+ v9 h7 C/ R8 ]" M
  tag_t csys_id;
6 N% D" q, v/ c5 g  double matrix_values[9];4 y; v9 N( f3 d# G8 _* h+ w/ f
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
$ ^" L/ f# {/ M5 E2 t- S  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
' m4 H+ q9 R; v6 F. ^  if(norm_dir<0)        //判断面的法向是否相反
5 q& X. \6 h! V1 f  {% O' _/ P8 `2 H. l' a. ^
   matrix_values[3]=-matrix_values[3];
3 T) Q* ^$ S. a' a& A   matrix_values[4]=-matrix_values[4];7 ~) ]' @" U' }3 c- l& P- B
   matrix_values[5]=-matrix_values[5];
  o" ^1 l2 D5 C   matrix_values[6]=-matrix_values[6];
  e5 ~+ p- q' {+ [   matrix_values[7]=-matrix_values[7];' M5 y- n% O% o' C+ H' W  J
   matrix_values[8]=-matrix_values[8];( h+ v5 V- U& Q4 \+ g
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
+ T. o  T; p# g, F  }: s3 R" N5 t3 g6 v1 L8 {! m
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);- `: R# Q% S1 L+ e5 P, `
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)# Q- D# i8 m, `% a* V* Q
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
6 Z# u' ~7 O, L* Y4 i5 n3 [; v0 \4 |* B) s1 p! G( D& q
        double boundingbox[6];
: y6 C% k& S5 N1 }8 A' R        double boundingbox2[3][3];) k: L" f3 ]. o$ [' D/ ^  }- m
        double boundingbox3[6];
3 f& _9 v4 X1 C5 g) T: i" E        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);) N: h! v, P7 k

" s) K4 D, O7 k3 V) g        if(type ==UF_cylinder_subtype)8 m# V% _% r1 ^' Y8 j. E9 t
        {) N( V, \% N0 k5 R
                double cyl1_pt[3];
- J6 B( C0 ]' Q/ T/ u# G                tag_t cyl_line,cyl_pt;
: Z4 T# Y# T) K2 B" D                UF_CURVE_line_t cyl1_line_coords;! P+ v( u# i% U0 Z! m' Y6 q- r
                double WCS_pt[3];
  h, i# G, B3 ?" I! m                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
. g+ _: V8 R* A. V                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs9 a) U/ |1 }8 v1 F5 ]# g
                cyl1_pt[2] = WCS_pt[2];
6 h( _" i: d0 Z+ i# j# F
3 H4 J$ q3 n7 V                cyl1_line_coords.start_point[0] = cyl1_pt[0];" I" y0 U* d( u- t+ Y+ P% ~
                cyl1_line_coords.start_point[1] = cyl1_pt[1];
. i. {5 q/ p/ X; p4 y6 K                cyl1_line_coords.start_point[2] = cyl1_pt[2];
8 v  a( F2 E9 A/ P6 ?' X8 M/ p2 X7 i, @: t! b7 y9 }$ u9 u
                cyl1_line_coords.end_point[0] = cyl1_pt[0];- t9 X5 g( q. o7 A9 D
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
, k# c- h9 l) g. W+ N; a3 q% F: P                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];: @  W7 u4 U0 u8 O- C  S  d
7 @# l+ ~/ R- C3 E' q5 s) l: \
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
+ p3 G% |5 g8 b                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
3 r1 f* R$ J0 ], z) p               
' D! U( T' }, i# T/ o0 k: W                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
6 ^; F3 d8 h+ ]9 I; E                UF_OBJ_set_color(cyl_line,186);
- k# V0 j& B# r7 {9 _* F, E( U                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
$ ~2 f. C# ?- M3 m7 v0 p  g
, b) Y) W! e+ b  S/ q# |                UF_CSYS_set_wcs(user_wcs);4 s$ S' [4 R7 a( M
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
% {# U7 E5 Z! {% ?5 ^/ M5 R
, w" n; p( \9 x& \                goto l10;
4 z* E1 }- M7 S  U- l* `; |( e        }
( I( O. F. d' T! w) f; B* e* c) {% K9 ?+ L2 D+ h3 ]
$ m) d) n4 A; y% c( d6 W( X
        double WCS_pt[3],center_pt[3];
8 K: E/ [' Z- C% S( i" |        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;/ g# P; L  `( F3 K7 x2 ^
        UF_CURVE_line_t Xline_coords,Yline_coords;
/ Q% D% V8 e- ?2 g" f9 o6 W        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* ]% n8 m- V# i7 r6 n
        2 S: ^8 y; g1 s  ^
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
7 ?* \. Y$ g2 z) [        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
) r- R5 n* @& A9 c4 j5 }        center_pt[2] = WCS_pt[2];% r( C! k4 g% x5 {/ S4 S

5 [8 P2 V  c3 p
: d6 y) {; E6 m  e5 M* G        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/20 R" L5 V' |9 o! ]/ [6 I. D
        Xline_coords.start_point[1] = WCS_pt[1];6 O' Q* O. ^1 Z5 p, Q3 r- W
        Xline_coords.start_point[2] = WCS_pt[2];
' g4 T3 }4 X& c8 w        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标& J! _" m# {' I' f$ ^* W
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
; G+ ^; S# c, Q# o9 E) }& x9 I3 i6 ^) @6 T7 Z0 q
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2* V( ?" V, r, I% ?
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小$ P  T- H) U6 [9 P3 ^: `. C
        Xline_coords.end_point[2] = WCS_pt[2];
' ]1 V4 z! l  x, [& v( j        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标' M) `% H2 H, E
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
% ]$ ?) p) y% k1 N1 h5 |6 e/ l5 Z* X# j+ Q* s9 `' J" K$ r, D
        Yline_coords.start_point[0] = WCS_pt[0];
9 X) {! f+ i' l3 u6 O: Q7 F        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
4 ], I7 i8 S! ]: Q* J( T        Yline_coords.start_point[2] = WCS_pt[2];, B5 _4 }! {! |1 _- I: _' Z) D; f- u, j
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
2 A! S1 o6 I" |9 l8 ~1 `//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
% ^; i) q1 W/ o/ G- k; p  K1 w% i5 S8 e4 `
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小$ C; O8 m% t* I8 D+ a2 g
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
2 c# l5 K  {; @( `% S2 x        Yline_coords.end_point[2] = WCS_pt[2];" P( f* ^6 ^# T' m" E+ d
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标; g" N$ I$ O" f
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
1 }# V& U! x, g        0 U; S# p# S4 g
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线% ]- g& y3 N: q" @& x/ c
        UF_CURVE_create_line(&Yline_coords,&Yline);
: |7 i8 r( b# z3 }, N$ j        UF_OBJ_set_color(Xline,186);        //设置颜色4 m  ?5 ^% h: A  N" u$ b
        UF_OBJ_set_color(Yline,186);
7 W# G: d" K. Y# U        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
( H% H+ N) J3 z$ R( o" N        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
7 Y1 j1 W' w. o- j! W4 T* a. g$ O: x3 |* v3 G. Q
        UF_CSYS_set_wcs(user_wcs);
# a! v& f! Q: E* W: L* A        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)) c7 O3 ]+ K/ ?
        goto l10;
- f2 I9 J8 G0 {. s5 n0 d4 T0 Y' G/ P5 H" @$ f; |% ]8 Q
}! d3 Q( h9 I2 j8 \

9 K# Z) u0 \3 x% h$ }' W. p1 Yextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
6 Q9 \: ]* s6 Y/ _* `{6 b" ~8 Y' v5 p$ r' M
    /* Initialize the API environment */
- [* ]- k. a2 m/ ?, c+ h) I1 ^    if( UF_initialize() )( J* \6 C1 P/ g+ G
    {  G6 t3 j$ w7 u  E8 R, d4 s1 Y) V
        return;  S# X2 n8 j- e+ e; V: c/ _
    }
- S5 k) ^0 o0 J1 }5 z- N, O( d5 i  j( @; ~4 B9 @
        Create_Center();
  _% a+ h0 g& _1 G# x, H  }( B/ w% M% u0 l0 H
    UF_terminate();1 P4 f3 p( w* g* d* H
}
+ d9 N. r% n. C
/ W# |: ?, e, k) N' }% K5 ~
- C0 w, r. ~' b4 [. hextern int ufusr_ask_unload( void )
+ |' t8 O) S) J$ K3 M2 V* [; X{7 m1 K2 h$ K6 h! T2 o
    return( UF_UNLOAD_IMMEDIATELY );
: Z9 B8 X( ]- v( p& t  C}
- p: {4 B1 f- |' a
- {, H* p) z7 M+ V! M/ n% ~- `% g* m" T) P

; c4 u: K6 {, q* I$ r3 X3 X) u  v* Q" P2 g# X: U$ \! q
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
回复 支持 反对

使用道具 举报

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2014-12-12 10:48:43 | 显示全部楼层
简简单单 发表于 2014-12-12 02:44. ^2 W, w" Y' l6 R$ b
呵呵,终于写好啦

5 S4 e# }& R$ o" y- q3 p  z/ K不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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
回复 支持 反对

使用道具 举报

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2014-12-12 14:24:54 | 显示全部楼层
简简单单 发表于 2014-12-12 04:01
, h9 D/ x4 h6 A+ b5 h老师多多指点才行

5 [" f- C' ^! f% _% O$ X- I后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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客服返回顶部