查看: 4894|回复: 5

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

  [复制链接]

8

主题

58

回帖

896

积分

培训VIP会员

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

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

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

×
! ?* [( B) p3 e, c9 u
#include <uf.h># C& B) x# t! Z
#include <uf_ui.h>
- B9 A6 Q& _4 D* w7 Q5 _' y; h#include <uf_exit.h>
0 ~% P4 j  H: Y1 ^
1 @2 Q# c% `7 D% ~# D1 m3 P+ z( L#include <stdio.h>
/ Z/ j3 E# L8 ]/ m: S* T1 v- m#include <uf.h>
- M& r. b6 m' V; C$ N+ F4 _#include <uf_ui.h>
! ^2 a# [  ]5 `. c9 v3 V! G. R9 F#include <uf_exit.h>
* B. ~) c2 a/ o5 Q#include "uf_layer.h"
5 N8 v6 u8 ~8 O# `" X#include <stdio.h>6 c8 P2 s  f, e/ x0 a
#include <uf.h>3 {& z% y8 z4 ?, S0 q  n
#include <uf_modl.h>3 r) ~1 j, R' V* E7 `
#include <uf_curve.h>" {3 K2 {+ z" @4 q
#include <uf_csys.h>
4 W0 u; B7 o' ^  R$ Y#include <uf_object_types.h>
$ F5 X" R3 F+ D; K9 B7 t. c+ f#include <uf_ui.h>  l- m: w6 D2 C9 l) x9 h( t$ l
#include <uf_part.h>
6 _6 D$ h4 i, b6 W: ~; f3 X- _& @#include "uf_obj.h"$ x! n) g$ P8 ?3 g
#include "math.h"
% K* \( H8 x9 m4 h/ g- a6 Q! Y; i( ~
: B: v9 H3 w9 {7 V& d9 ]  y! m: Qstatic int init_proc(UF_UI_selection_p_t select,void* user_data)
2 o- s' Z! p4 u) n7 b! ~{
" [- N" M" e" p4 N& X1 F2 Q        int num_triples = 2; //只选择一种类型
# J( B. k$ C5 T" D! Z        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
& Q2 H, F) `' \/ b                UF_bounded_plane_subtype,1,0};
3 b$ ]/ [* @- H. O if((UF_UI_set_sel_mask(select,0 w2 H" z! Y# d* [
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,4 S! k3 p# |( x' s4 P/ X8 P+ }$ b
  num_triples, mask_triples)) == 0)
4 H/ W1 U9 ?9 ^; C# T4 E {
0 g: G6 R0 n* W* |  R6 [  return (UF_UI_SEL_SUCCESS);
. p, t! o" d5 \% _1 V0 a }
9 z' A5 O  G  h else
. z6 O( t3 T% K0 v {
% K3 d/ g! M4 w& N5 x+ S" j# s  return (UF_UI_SEL_FAILURE);/ t7 ~/ l9 w1 N7 a1 k
}
: O$ G. C# _  G9 ^4 W: t* F}
, ^3 [- R+ {8 i0 F" O- ]
: F7 X6 w& k0 V. p+ R5 J) A+ N& e' l  C& n6 Q/ n1 w7 [
static void Create_Center(void). L( x; ^8 E9 x7 ^; \
{
$ U- ]; ^) k0 V/ S4 a; n        tag_t user_wcs;
+ Q! ]3 G/ ^! j) S. s0 u! j        UF_CSYS_ask_wcs(&user_wcs);
9 ^- w( b$ }2 {8 R$ r1 l$ D% {        char cue[] = "简简单单:请选择单个平面";( @! o8 ]* Z( G1 b: G
        char title[] = "简简单单:对象选择对话框";% B2 B( ^/ ?/ L0 M  D( {
int response=0;
1 L" B9 J8 A9 ^4 m2 f. ?. t tag_t object;/ {+ r, l  s: U) o  w% a+ K. R
int count=0;, u4 j, L, @5 r
double cursor[3];9 V3 b0 \- |0 l% ]9 p' G- a
tag_t view;3 ^* G3 ]8 h3 q, d/ E
l10:
6 w2 x8 z/ K5 W, D- h4 A8 Y0 @8 i3 I UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);, ?5 S0 F3 w" k7 M
if(response==UF_UI_BACK) return; //如果点后退就跳转到L106 ~9 O9 Q+ F1 [$ b
if(response==UF_UI_CANCEL) return; //如果点取消就退出
# t& H, q$ D! }+ R9 x' ~2 q UF_DISP_set_highlight(object,0); //取消高亮显示
+ \8 _" a' B' |, _3 ^7 W
  p: L( K. z! w! z0 a) l  int type;
% C$ U) _+ [9 \1 u. L& c: u9 Z  double point[3],dir_z[3], box[6];
" U4 K! n9 ]5 Q/ K( f4 J  A) X  double radius,rad_data;/ s; a4 d) P' x! \
  int norm_dir;2 i% J* [) u  @  {+ Z! ^  U
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
" b; `* l, ?# v" B2 ]& V' P. C5 M+ c$ I  j9 L: n5 \  \
! O; C6 r7 y" n  Y' V5 B1 W
  tag_t matrix_id;
: f0 v+ W7 A! r/ ?5 _  tag_t csys_id;# S9 w& r: i# B9 u& M: k1 b
  double matrix_values[9];
/ J/ n* E. c. y" g  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
5 T# V7 W' j. j  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
+ c5 ]7 q% Z4 a8 G1 g  if(norm_dir<0)        //判断面的法向是否相反# U; i7 ?6 Y5 ?2 g2 i$ j
  {
" [" _2 n+ p6 e, m& R* A$ L   matrix_values[3]=-matrix_values[3];# M6 x. L5 e  B7 h
   matrix_values[4]=-matrix_values[4];3 M* s9 D4 }) m0 o
   matrix_values[5]=-matrix_values[5];
1 L' X1 |& D- S4 j/ o! m6 {& i2 M   matrix_values[6]=-matrix_values[6];% B/ o% [% L  b+ R0 E8 c  f
   matrix_values[7]=-matrix_values[7];- _+ d3 X2 A, _+ c
   matrix_values[8]=-matrix_values[8];
3 ?$ W- W+ n2 j9 C  D   UF_CSYS_create_matrix(matrix_values,&matrix_id);6 W  i0 i$ d" ^: C! _
  }4 u4 L0 \& ^( G' |
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
- I2 @9 S" O/ n2 n+ w* T  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
5 V- {& \6 V# Q& L" r: I UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
# g6 C1 V: r2 e2 O8 \. f+ d1 a$ V/ O. W) h
        double boundingbox[6];
( U& J6 x$ a  }+ T6 D& r        double boundingbox2[3][3];/ F+ N" @) R- r2 v" Q
        double boundingbox3[6];
- n4 M+ B+ t0 m* a  L$ m, l        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
. K& F4 F4 f& U+ M) b$ Z
) O  j1 |7 Z5 C" R- M" U        if(type ==UF_cylinder_subtype). V) h! A/ z+ p: p9 c# U/ p2 O
        {
) P: A8 d; i$ e' x- ]) Z; t5 l3 n4 `                double cyl1_pt[3];
2 f! c% `" K2 N2 @( R                tag_t cyl_line,cyl_pt;
4 Q% n. I. m, D: r$ e                UF_CURVE_line_t cyl1_line_coords;
0 A5 P, |: O" x) y                double WCS_pt[3];8 D2 G7 f( S, ^+ _* j: h
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
7 a. K; R) Z8 W5 K                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
+ D  Y# R. y8 n3 e                cyl1_pt[2] = WCS_pt[2];
2 E; P' z: O, M2 _: m$ k, {7 B- t
2 V" L5 b) a0 i  }! m9 v1 q+ ~9 Y                cyl1_line_coords.start_point[0] = cyl1_pt[0];
  m, N5 D% p' j# [, ]5 Q                cyl1_line_coords.start_point[1] = cyl1_pt[1];5 m$ H, A3 o+ m7 W! n# _
                cyl1_line_coords.start_point[2] = cyl1_pt[2];3 B! D, N; O, s: j1 C
6 |- E* K4 h1 R8 w  c* ^! l
                cyl1_line_coords.end_point[0] = cyl1_pt[0];2 k: R$ C0 w8 R0 \5 i, w0 A
                cyl1_line_coords.end_point[1] = cyl1_pt[1];# {6 e  _! [/ ^5 W$ ~& B
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
& \* {  F( i3 p6 H" S) Q* b# A8 Y8 ^# d
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标) ^& B3 e+ T" \" l. W1 v" b1 d
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标" T) n3 g0 w6 m" |' Z
                # H: ?) U- [& s6 h( e/ F
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
  n( `. Y! n" B$ y) Y9 f! z7 ~                UF_OBJ_set_color(cyl_line,186);
$ i. H: q' c% E# A( t                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型6 }6 W0 \1 N9 E! x# o" h$ y. O

9 N8 Q# t# Q: V$ M* \! D                UF_CSYS_set_wcs(user_wcs);
* r( }& E( Y5 }; o                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
6 w3 |4 s3 v; F/ H
! C4 P/ Y. J" V8 {0 a* c  D                goto l10;" z1 i$ s/ e1 U& Y4 m
        }$ q; m! W* T; t3 q8 e

+ @: o7 O. S$ o9 Z# f, _
( G$ O; C$ k& B! N( T7 }( O        double WCS_pt[3],center_pt[3];
5 K9 x' B% Z- V- M4 S% C        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;, K  J- Z' F) c4 z# \& H$ t# F
        UF_CURVE_line_t Xline_coords,Yline_coords;) e( d( P' J+ D6 b- ]& }" s1 T: H
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
9 ^% K: V( K( w% u: ]% f        $ c9 p5 [- d: ?# y& j- j7 i. x% d
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
& r) H. T  Y" E. ~; }( I+ U        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;# |) _4 j. X" `
        center_pt[2] = WCS_pt[2];* S7 y/ ^3 Y; Z$ Z; h, h) C% c4 G6 x
1 O' s. Z5 d) Q* X
  Q) G1 N# m8 t* X2 c, T
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2" ~% p: @0 {; S
        Xline_coords.start_point[1] = WCS_pt[1];4 N; L" `  U$ C1 z
        Xline_coords.start_point[2] = WCS_pt[2];
! G5 I/ V# B8 L: t        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标" p% O+ q5 H5 m. B  J, ~, x
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
( c8 i4 x9 y" N1 P: ~1 ]* B" M5 D, O; d' M$ S
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/26 Y( Z9 ^$ h) @2 p; I! o1 S8 R: \
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
) e2 e) b  c1 L: h! o' x        Xline_coords.end_point[2] = WCS_pt[2];
6 T* |5 X; [/ E8 {# T        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标2 z8 b: o- x$ `0 Y9 b! N, G* e* ^7 Y) H0 K
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);5 W0 ?, ^- o* _1 Z# {
1 ~3 J+ b6 F! p
        Yline_coords.start_point[0] = WCS_pt[0];4 g8 t. x: L* M  M% v7 X5 A& H
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
, ~+ D. `( o! f  Z! N        Yline_coords.start_point[2] = WCS_pt[2];8 R% p7 `: P  N$ ^- m3 w  l# P& ?' h
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标7 V9 a" y8 v% b: }; Q; `
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
1 ?1 r" _0 A7 _( @* {% {- a7 L6 u4 R
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小+ H5 d( Q4 v6 |* x* t4 B
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;1 X( ^% L/ q" b) e- ?
        Yline_coords.end_point[2] = WCS_pt[2];( g1 b6 j& S( o& g6 |$ A
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标2 h2 g! e1 e4 w
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);' o1 q% y0 ?  W+ j- q& y
        5 k( D. N9 p& o7 L) U+ `6 _
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线7 g; l" A5 g9 l
        UF_CURVE_create_line(&Yline_coords,&Yline);
7 o  L: {/ e) }4 m3 `% Q1 `" D- g: H& u        UF_OBJ_set_color(Xline,186);        //设置颜色
0 V1 P) k# r  }9 ~5 R        UF_OBJ_set_color(Yline,186);8 G, f! e" A, z# V
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型$ K- }8 x. K. Q) y! N. j
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型) G# x1 a3 L! \- s; C2 b
3 M, K& s- u$ X/ s6 b1 Y
        UF_CSYS_set_wcs(user_wcs);
3 ^; l2 S9 Y  ], P: g- p9 ?: c! o5 j! o        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动); k) L6 _" V) q' W5 Q
        goto l10;
( `" a0 H: s; u: E4 Q* c
# J$ u, }% z) Q: p& A}, Z, C; b: a: _/ F! R5 |* w1 j' E
1 I8 }7 n% s# v7 |7 E  `
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )7 g  ]# }- K7 P7 ^
{
- a! k+ }; b; Y    /* Initialize the API environment */! x# r, P/ v, R2 r2 }) Z. `
    if( UF_initialize() )
# V$ b2 Z; m3 R: g% M    {
# a& E0 C/ D' E# U        return;5 A) \9 j* z% |: C5 f
    }
5 ]3 ?2 @( N/ U( z$ x
; V7 W3 x0 B% O; ~- ~        Create_Center();1 ^1 O% J% ^5 f4 s
& G9 B# ?. A! H; r& L3 v' F
    UF_terminate();9 v6 u  B3 A0 _/ n1 w, I
}, S( a1 o+ K4 Z, n. A( M

1 x1 l$ `9 b1 R% U! ^
/ v6 \- B; q. R+ g4 y" r2 {4 L& fextern int ufusr_ask_unload( void )
, H5 k8 K; X" h+ p9 ~{
! @! l9 ^7 g  g9 J    return( UF_UNLOAD_IMMEDIATELY );
% U. |; t5 R3 K2 {$ Q}8 o/ i: x% c; m, k* [. Q
; f" ~9 @2 Q  z  @6 _9 j) v( U

7 k+ W' \6 P( N: i7 J( }3 R6 q! _, J4 C. h
# _0 P3 V' Y! A/ Q: k+ m
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

回帖

44

积分

管理员

积分
44
发表于 2014-12-12 10:48:43 | 显示全部楼层
简简单单 发表于 2014-12-12 02:44  r  T' V+ j8 u  O: S& a$ _
呵呵,终于写好啦

# V1 z/ x) C7 f% ~不错啊  
上海点团信息科技有限公司,承接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

回帖

44

积分

管理员

积分
44
发表于 2014-12-12 14:24:54 | 显示全部楼层
简简单单 发表于 2014-12-12 04:01$ H9 _# \/ W! [* `5 t" G
老师多多指点才行
: K1 v2 N, T+ }$ T1 l6 o  {
后面把 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客服返回顶部