查看: 4950|回复: 5

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

  [复制链接]

8

主题

58

回帖

896

积分

培训VIP会员

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

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

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

×
0 b" _# L! f( P- N
#include <uf.h>
) [: C9 Y, q& J#include <uf_ui.h>. ^$ e1 N) S% Y3 D& r7 k' L
#include <uf_exit.h>
; @$ e: s& I4 k
! ^2 q6 t! D8 n  u7 x, {#include <stdio.h>4 h0 K  i! F! w1 d" S3 i+ i
#include <uf.h>; ?4 @' A  s7 g* [3 ?; i
#include <uf_ui.h>
2 {% L7 [+ l9 u' C#include <uf_exit.h>4 }$ |; `) _' W9 w2 X& f
#include "uf_layer.h"
; d" U, g$ B) O: [, T#include <stdio.h>. W; k/ H% z% |8 j5 r9 b, b% x
#include <uf.h>) G: @' Z: M. p9 `& g
#include <uf_modl.h>
' O  T1 y! s# d, R* Q( ~# R$ z#include <uf_curve.h>
  Y! c9 k* v/ h# S% S, p6 P( q#include <uf_csys.h>  N4 m( r& p# i7 t) k& Y* {
#include <uf_object_types.h>' v# q- c$ q+ O1 I, K
#include <uf_ui.h>
% C2 d% w5 l, J1 n  Z. a2 a#include <uf_part.h>
) {! w8 T3 o) m0 d#include "uf_obj.h") e# ]; `# u8 ^/ h" K% x9 j+ p7 R
#include "math.h"
* M" {- V' x" B& K) s; L8 X( a" i' }& L" w- q8 w" O' x
static int init_proc(UF_UI_selection_p_t select,void* user_data)- G5 s% ]. T4 ?  B
{
+ C3 N, o2 y2 u9 D; t0 z! Z        int num_triples = 2; //只选择一种类型
3 T+ p; C, l6 m" ]  y& l9 V7 W        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
' C- u+ y( |6 {- r- ?+ u7 ~                UF_bounded_plane_subtype,1,0};- s( I  I/ t* x' e" `! s
if((UF_UI_set_sel_mask(select,
/ U# x6 j6 z: `: q- s2 z+ J2 E  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
4 f* p1 e6 g+ Z3 W  t* x) N' P  num_triples, mask_triples)) == 0)9 i0 `/ a1 u) |: E
{
6 o' ?. y5 r- b' e" ]  return (UF_UI_SEL_SUCCESS);1 z8 t% v9 w/ Q
}
' l9 B; V" ?* {; G6 B else6 Y3 E* I9 ~- s, \- N( T
{( M6 t% D* e1 \% O
  return (UF_UI_SEL_FAILURE);, ~# D; `1 e/ w) Y* R
}2 W$ U' G- W/ \# y/ {( L1 L% N
}  _% M$ e! ?' V9 ~

- `5 A2 L& O0 G. c  q; b) L; L! V( k9 t% f
static void Create_Center(void)2 i3 ?- _& J1 }, N
{
' C) I0 N  j# f# v+ N! i        tag_t user_wcs;
/ `- w, ]# R1 r  _. d; q        UF_CSYS_ask_wcs(&user_wcs);. A5 K7 x  @$ m
        char cue[] = "简简单单:请选择单个平面";
+ @) s( z# \+ y1 d$ R        char title[] = "简简单单:对象选择对话框";
. V- s# u8 G$ ~% [ int response=0;
/ u+ C: k1 l  Z7 }2 P) x" J$ B tag_t object;) N4 s" m9 b/ k3 u7 m) ~  ~; V
int count=0;
/ q+ J2 ]0 C" g8 i+ d9 n6 ] double cursor[3];
: M, i2 B5 s! O) n7 Z3 g tag_t view;  T$ n2 J% D: v& m* ?- \
l10:6 K0 ^" t) t1 N% O9 H3 A
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);8 q5 q) v! A* @
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10) e0 I/ U4 n2 ^5 a  I0 F
if(response==UF_UI_CANCEL) return; //如果点取消就退出7 \6 l/ B/ I- T& H# A
UF_DISP_set_highlight(object,0); //取消高亮显示
8 I6 ?0 ^2 {! @+ t" J8 C7 _: U* p9 ^3 k" w0 q$ W
  int type;
: V7 \/ ]2 S3 L+ a6 W% x; L, D' h  double point[3],dir_z[3], box[6];# a4 {+ u6 s! Y
  double radius,rad_data;& n) ^% t( b% m2 w
  int norm_dir;
; ]3 O2 k$ J/ O9 `  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
( H7 E, A4 q! E2 c" D8 i: D! U! Q3 ]' E
3 \+ B( p; `3 P- W5 C6 }
  tag_t matrix_id;- N. \3 q' y2 L8 [  B1 G# s
  tag_t csys_id;1 _5 y0 g" W+ e3 t8 X( s" u& M
  double matrix_values[9];
  G* N, P1 T& o3 h3 i7 \" _, O  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID9 G5 Z& [% }; L
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values+ M7 U( y* z- X
  if(norm_dir<0)        //判断面的法向是否相反
/ w& V. l' J* c% ^  {
4 X% S0 ]8 U8 W+ p0 I. n( `   matrix_values[3]=-matrix_values[3];
0 h# [; c. h8 m0 Q7 Z7 l7 o   matrix_values[4]=-matrix_values[4];/ x0 K4 u% ]: z/ r, c3 E
   matrix_values[5]=-matrix_values[5];1 M7 y7 t$ V" ?, }
   matrix_values[6]=-matrix_values[6];: `  q0 k1 l# Y( ^' e. r+ a6 ]
   matrix_values[7]=-matrix_values[7];" Y# z, _* c1 h: ^1 q- Q
   matrix_values[8]=-matrix_values[8];( |# s! h7 P. ?. f
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
9 `- U; Y. W4 r) |6 H  }
! [+ l+ V9 v2 t! d9 Y% T: R  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
% M: I- m& V- N  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)8 E- P- c: D+ g& ]& f
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)) |! L, [* Y- w3 t: s

) v: U1 N3 C7 s. C2 L        double boundingbox[6];* D4 B& T5 j4 g9 v# H& [
        double boundingbox2[3][3];
: K9 N* m. ]8 \! p8 t        double boundingbox3[6];! `  I0 C+ H/ M- ]  r
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);1 z4 ^) H+ A: S3 O/ j+ M

* C; ]' z) p# R: R        if(type ==UF_cylinder_subtype)
# d6 y4 I. g; ]; }: U0 s0 ]% S        {
6 i( R8 f2 i% {* w                double cyl1_pt[3];& |6 S! H/ h  P  E* i3 e) ~
                tag_t cyl_line,cyl_pt;
% X+ c" E* G6 x                UF_CURVE_line_t cyl1_line_coords;
7 Z  U0 }" t- i6 @2 z; D2 l. V                double WCS_pt[3];) w' \% @3 S3 k1 ?9 K
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
( v; D/ L: V6 G                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
0 P$ B* W/ l1 a5 g0 P: F* j                cyl1_pt[2] = WCS_pt[2];) j" H' v7 i3 [/ n4 g( u* X
5 t% i' S5 C$ M! e# A4 t. H
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
7 b. o7 }, G3 |/ s                cyl1_line_coords.start_point[1] = cyl1_pt[1];) a0 T' S! e6 s. G
                cyl1_line_coords.start_point[2] = cyl1_pt[2];& g: Y" \( [1 Q/ K2 `4 s8 E( K

) t6 b" f  j* w9 w                cyl1_line_coords.end_point[0] = cyl1_pt[0];* |7 |; v' U9 P
                cyl1_line_coords.end_point[1] = cyl1_pt[1];; k2 ?5 L9 a0 @% L
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
: j; m$ \( n" F# m2 F6 z3 h  ^) i1 m& [+ z1 Z0 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转绝对坐标
) i# I+ C' I" Y1 x5 ^5 i6 I+ u7 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转绝对坐标1 |' W0 }; Q' N
               
' X) q0 B$ \" K0 U& K                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);# L/ j) G4 r$ x  h5 g+ z
                UF_OBJ_set_color(cyl_line,186);0 T, U4 m$ M* K7 I: g) U
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
% N3 h& @2 |0 u2 [
5 U. T6 ~3 w! Y# o) d3 B! @+ B                UF_CSYS_set_wcs(user_wcs);
' {! h  @) O* P                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)! ?5 H+ d: d/ W6 N" A! d
( @) |( q0 ?" q; o' U' |2 o
                goto l10;  j1 R) Y" b. s% `% i
        }
/ w' I' m) _: r
' h% V) \" J( K7 n- x. d: n
1 V' I; t1 q: O7 c        double WCS_pt[3],center_pt[3];
0 @+ `# s/ o) k$ V% x2 e! O; S        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;& O! L0 ^) N% n' }- L; [: l+ N
        UF_CURVE_line_t Xline_coords,Yline_coords;5 W4 g6 o$ l* m- q3 k" j) E
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
6 v/ |1 X+ F! ?$ j$ {        2 Z1 b4 E, t5 z3 c+ r7 R
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
+ e( y1 F! D% g        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
: c- |& s  q8 O7 i        center_pt[2] = WCS_pt[2];
% [' L* U  A* R2 \
3 m9 U( B" \! v) c" Q8 i% ?8 f. J7 M6 n
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/28 l$ W8 I8 d, t6 G5 k
        Xline_coords.start_point[1] = WCS_pt[1];
1 {3 V; Y5 x% a5 o' A7 l% f6 p        Xline_coords.start_point[2] = WCS_pt[2];. |5 A& f3 K2 \
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
, @' j; |8 Z; U* U" l//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
+ \+ U* A7 x4 ?% O! k
) J6 [" r. f; B$ d  _6 b        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
, t$ }4 z! r# F0 ]8 S* K" A        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
% L/ Q. v% B  W        Xline_coords.end_point[2] = WCS_pt[2];: K1 H9 W6 G3 E
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
2 _, }* Y  p1 X& f( q, `( g- \//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);4 L+ n( S6 `/ U9 Q

/ Y; _( |$ t! j" p+ `8 \/ L% m# l5 v        Yline_coords.start_point[0] = WCS_pt[0];1 X6 L7 x3 A0 l/ X# f! x
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;7 B- A# r" a" R* c
        Yline_coords.start_point[2] = WCS_pt[2];1 I- R1 S" A" h4 [- t8 H/ i
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
" |$ D  @9 [, U& r$ U//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);: D# W! }0 B, ^( R$ ]+ [* v+ w4 ~

4 {- j: X. _3 i% N        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小! a$ j* z; f. I4 E9 A1 Q1 z
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
$ T  E9 z+ g# {- R        Yline_coords.end_point[2] = WCS_pt[2];9 ?1 T! \, t1 h5 \/ R
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
& h' e* [4 K% i5 i# y//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
5 S2 g5 V" `! f$ X( t' L        " m6 f8 ^: @1 `5 ]/ g
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
1 U: i; x0 r$ x/ Y9 E& E+ J        UF_CURVE_create_line(&Yline_coords,&Yline);
; A9 k; B1 q- w) x        UF_OBJ_set_color(Xline,186);        //设置颜色4 x$ C- x- C. J7 m
        UF_OBJ_set_color(Yline,186);
6 r) O2 g) F+ _) [  N( M  P) H        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型8 N3 K  L& T% U$ _
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
- _7 U8 N6 W4 Z. u9 C
" Q: u( c0 A4 k  {2 Z        UF_CSYS_set_wcs(user_wcs);) t0 H3 F' N2 e# _; }3 `2 [
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)" j, J# `$ f3 v  s, e5 Z: p: r8 x! a+ a  s
        goto l10;- b) f8 j0 W  o; u8 V* V1 P6 K7 o

6 k! _7 z0 y% N) ^# D* H7 @0 A& N}; i4 x! \4 i0 L5 c

! B: m& J! f; N' n, Kextern DllExport void ufusr( char *parm, int *returnCode, int rlen ), y" I9 B0 F$ \0 A
{
. x) P% c* f* H5 L( B    /* Initialize the API environment */
& S. x5 E( q( t8 N" v    if( UF_initialize() )
8 B' Y2 r0 ^' j    {" u- k1 ^0 O: I8 ~
        return;0 v+ N7 C% ^9 X8 @2 e5 K2 ]& z
    }1 Y+ l' [# y! s5 P; j' k+ K$ y

0 ?; r, w  ~- G5 q- }* s' ?; M- L. B        Create_Center();
6 b* G: o/ D8 h  _0 l$ u
' A- C  \$ h) D4 s! K9 t    UF_terminate();
- |2 I0 U0 d4 K! `: E6 n}
; ^& V3 T7 ]0 k. r1 I% w; m. z, {( F7 \* S

: @: n7 w! ^) A/ G2 fextern int ufusr_ask_unload( void )
! _; e' H2 D/ L{
0 X3 ]$ c1 _! y; P& d    return( UF_UNLOAD_IMMEDIATELY );
6 J7 P* e9 t& M- I* z; ^* e; F}1 J. l& f# o) c4 U

; N; G% O4 X* n* j" c
4 J; |1 p( J! o4 y5 m0 R6 ?
$ F! S  _- z4 D( D% n  V9 o" ]
0 `3 I& ?8 @: S, i. ?
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

主题

4

回帖

52

积分

管理员

积分
52
发表于 2014-12-12 10:48:43 | 显示全部楼层
简简单单 发表于 2014-12-12 02:44, u' C  @4 e# K: q% H$ ?) T1 ?
呵呵,终于写好啦
8 ^# D- C; _1 {
不错啊  
上海点团信息科技有限公司,承接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

主题

4

回帖

52

积分

管理员

积分
52
发表于 2014-12-12 14:24:54 | 显示全部楼层
简简单单 发表于 2014-12-12 04:01/ K* G$ S; P% z( {  U1 J
老师多多指点才行
  M7 w* U( ^# ~1 x8 @  D$ s# |/ U) Q; ]
后面把 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客服返回顶部