PLM之家PLMHome-国产软件践行者

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

  [复制链接]

2022-12-21 19:59:03 4599 5

简简单单 发表于 2014-12-12 10:44:01 |阅读模式

简简单单 楼主

2014-12-12 10:44:01

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

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

x
: k; i5 n4 n( p4 L
#include <uf.h>" m4 N4 r6 i; k4 c, B& ]
#include <uf_ui.h>
# D5 R6 |# v0 g4 h, q5 |#include <uf_exit.h>- j4 _3 P2 ?  x; R4 t( K9 j5 e

4 z3 W5 `& |3 S) {#include <stdio.h>
: M, t! f6 n4 M4 U#include <uf.h>. V/ N* D) ^; \3 R3 j
#include <uf_ui.h>) ]: e. y* q* e" ]! }+ q7 ?5 ]
#include <uf_exit.h>, I2 k5 p$ L3 _" V  n2 |5 Q* Z. t: E
#include "uf_layer.h"
9 |" p9 L9 q/ K  j3 N( v# M#include <stdio.h>
/ o1 j" g; V7 s  c6 r#include <uf.h>- F& \! Z4 B  Z4 H- R. ^4 b% @
#include <uf_modl.h>
+ e" ?7 L2 o/ u7 ]4 c; @7 A8 m/ K#include <uf_curve.h>! ^* ]) a( @5 S# A9 ^! Z& _
#include <uf_csys.h>+ H9 k4 s  j. Q0 t. T
#include <uf_object_types.h>: T+ M3 o$ x! N, m, ?% u% B
#include <uf_ui.h>. j+ n) u3 Q' o$ Y6 R" ?9 ~( W
#include <uf_part.h>, n& j# k' [8 W* J4 t- j6 W9 |
#include "uf_obj.h"
4 P% J  u0 o& ?: }* n. m8 W/ \0 y#include "math.h"
' e/ z- s2 j4 k
2 F8 J9 h3 o/ d7 Rstatic int init_proc(UF_UI_selection_p_t select,void* user_data)
5 ^# R) C. I9 J$ m{
( R$ L- ]7 W! N- s. u% ]4 @! p, I        int num_triples = 2; //只选择一种类型
' _) Y; n8 u9 y        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,; n) m8 V+ x, q0 q
                UF_bounded_plane_subtype,1,0};7 h5 k4 c# w! S
if((UF_UI_set_sel_mask(select,1 _7 _7 Z, P- d2 T% B9 V0 R4 T
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,) x; ]8 M- r& k- |2 W
  num_triples, mask_triples)) == 0)
3 r0 R7 Z9 c7 S2 ]+ b$ y {
' y# w2 R+ {; q  return (UF_UI_SEL_SUCCESS);. u. Z# {- V* J; {
}
, d; t- E" D' ~7 Q; Z" U1 \ else
. a  z2 |# N* R: I% F {0 l8 O: X/ d7 J
  return (UF_UI_SEL_FAILURE);9 L3 ]2 i: S% {7 Z
}% ]/ O: P( I1 E/ W6 f
}6 S  V" E1 a3 k2 C

4 {1 m& L6 J, S* R
6 ~% B. D5 E  a( b& [static void Create_Center(void)5 M( y9 P" U* N- ]7 [. q
{
2 n+ t: s: q6 o) p/ `. R! z! Y; w3 C        tag_t user_wcs;
$ B9 l. u1 G9 e        UF_CSYS_ask_wcs(&user_wcs);
2 B6 L1 F$ A1 J: w0 L% m! U        char cue[] = "简简单单:请选择单个平面";
% S: L7 n4 I4 J5 ~9 A( C6 c        char title[] = "简简单单:对象选择对话框";
  N. O+ V/ T; \' G int response=0;
/ S5 x8 e" K" Q: ?' q' x0 J! x5 { tag_t object;
; h& W3 s4 B/ U. D int count=0;
& q; f+ K3 q* z$ X0 ] double cursor[3];
! u# {+ \- M' Y6 d- d6 o0 Z& @3 x tag_t view;
' W8 Z' q% K1 r, Y" a0 X( Pl10:+ W& [9 B. V( Z1 ^# `5 z2 N
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);6 J: ?6 u6 h; u7 \2 S
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10" `% T, a2 U; d! A! P3 H& h. p3 ?
if(response==UF_UI_CANCEL) return; //如果点取消就退出# ~7 `  Q+ x7 O, }' b
UF_DISP_set_highlight(object,0); //取消高亮显示8 b8 o! _. V1 _6 M6 `

4 W' `6 V( @/ c* k6 _: s  int type;  _& w/ H" m; j8 j) L
  double point[3],dir_z[3], box[6];' L# c8 j  V/ f; n/ R& U0 W5 Z9 C
  double radius,rad_data;
: g& k" H: M5 j' H, f5 m  int norm_dir;% q0 _: W8 c9 k4 E
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
6 x. \+ u# h0 {; M  G7 u# l& B* b. Q; o1 \) e, Q

% E; s* q# ?. W+ D# _  tag_t matrix_id;$ Q6 E+ H" i) c, J
  tag_t csys_id;
5 U# W3 e# Q. [  b9 u+ W$ y7 z  double matrix_values[9];
" P$ x: F. s* `( o7 g  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
: y! J2 T* ^: K: P  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
4 \; S7 u; \; y  h  if(norm_dir<0)        //判断面的法向是否相反
! [( j7 a, W5 |  {
0 k7 C5 Y% Z2 [/ y, p- i   matrix_values[3]=-matrix_values[3];
5 B1 v7 Z9 m. ?8 T& G3 b   matrix_values[4]=-matrix_values[4];! T0 x9 p# W. x% M2 c" u
   matrix_values[5]=-matrix_values[5];
- A) m( Q# G) @' \. q5 k   matrix_values[6]=-matrix_values[6];
3 a9 N4 f2 K( [. i   matrix_values[7]=-matrix_values[7];
% f4 e. \) |8 m8 v$ S   matrix_values[8]=-matrix_values[8];: c+ ~, F. n- c* n9 ]1 k' V7 A
   UF_CSYS_create_matrix(matrix_values,&matrix_id);  T/ V1 f2 m0 U" u5 H
  }
# V: I/ j6 B: C4 {  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
+ b2 Q4 K0 m1 m% a2 c' @  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)3 ^7 J- ^1 q. E
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)( z& K0 }1 l: |5 k

, g  s* `( c' C" T3 ^' T        double boundingbox[6];6 b3 X8 h2 h% A& ^; n/ S
        double boundingbox2[3][3];
% z+ T" i3 G9 r" ]- s* ]4 X( u) Y$ {7 Q. r        double boundingbox3[6];
3 g- t/ ?6 f, C$ O: C        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
, |. V4 U1 n* J1 A" L
! d# _2 U2 }8 K9 p        if(type ==UF_cylinder_subtype)
2 y0 H1 `$ a6 T/ P        {/ Q# r: K' c( n$ s6 A0 Z& L
                double cyl1_pt[3];
7 S- K" I& _, q                tag_t cyl_line,cyl_pt;0 s# o. X. K1 S9 b
                UF_CURVE_line_t cyl1_line_coords;7 g' [9 Z0 h. z  {' [
                double WCS_pt[3];
- d: }8 y! \. l  q                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
  K, T7 X9 O+ |! T+ G4 h% _                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs* J9 z3 m9 ~3 i: h) X. _
                cyl1_pt[2] = WCS_pt[2];; @# O3 n( r  r
5 @8 m! k) T7 z
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
& [* b- W" w' L8 c                cyl1_line_coords.start_point[1] = cyl1_pt[1];
: d( I* T+ \+ X. g4 H                cyl1_line_coords.start_point[2] = cyl1_pt[2];
+ C5 K# V( K: l  s
- p& m/ o' r7 p7 J4 b- q                cyl1_line_coords.end_point[0] = cyl1_pt[0];& Q$ S, d* o/ B% U
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
# w* _! C" X, @1 r7 @8 @# ?                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
1 f9 j4 C/ p2 {' X6 l7 f: R0 @3 W. K
4 W7 ]# g. ~6 L7 T* d9 S, I                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
/ q/ i: o6 f1 P! d9 }; Y                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
, l& V  Q* F" Y, q/ y* \               
3 f$ K* k9 _+ F2 P' A' n+ d                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);. o! Y( X, A; d3 `6 z3 O: M0 t
                UF_OBJ_set_color(cyl_line,186);
" y5 q  ]/ o6 f; d9 E  f, O# g! U                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
9 i0 f8 |* c8 [% i6 W1 j( y4 ]' R2 w+ _- k
                UF_CSYS_set_wcs(user_wcs);8 y- {" y2 P) `2 d. ~0 W8 t
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动); Z2 g& o  |/ M& K( j/ R! K0 U8 T, [" M" `$ O

! G- r' P& |8 |) n- u3 j, [7 s                goto l10;) u: f) M8 L: {+ A. ]  U
        }) |. q6 \- D% K% N

: B3 F; F2 o2 c) l" U
' X/ T: O7 v! B! J        double WCS_pt[3],center_pt[3];
7 B$ h1 T' ~" z, @" A        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
* ], J* v# @- t' t% Z1 t8 `        UF_CURVE_line_t Xline_coords,Yline_coords;
' J# i9 r) H) i1 P- ~; O3 `        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs9 B6 \  |1 Z+ I0 P+ A* n
       
  i# H7 P: a; @5 @        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;& W: f$ }- k, q0 c9 Y
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;. f1 G9 Q2 T9 G' }
        center_pt[2] = WCS_pt[2];9 F% u+ }, Z( }9 x0 e( ?6 t

, m8 A; m" [" E2 s& U. M
4 m4 _0 P6 C0 {, j7 ], A        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/26 j5 k4 G- U9 A
        Xline_coords.start_point[1] = WCS_pt[1];& R% M4 ?% f# u1 e, C
        Xline_coords.start_point[2] = WCS_pt[2];4 ^8 U; B9 e. r
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
, R& [3 M  i: b: T. H* x/ j//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
8 m9 n/ n8 O; }! D, U9 Y5 m% t0 W. r' q* `. `  P
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/28 C9 W6 D7 f0 ]! ^% d. Y
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小- y4 t* C% c! b& ]4 S* j! [: f
        Xline_coords.end_point[2] = WCS_pt[2];, \$ ~# @' v5 Z* n0 X, {
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标! w9 U9 G% X+ a* i+ o
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);/ l" v" Q: E. _
8 f" |4 }$ c3 O! \$ C  H4 p5 q
        Yline_coords.start_point[0] = WCS_pt[0];
/ H; I% j( m( ]$ o$ L        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;2 c% q0 @- ^2 i+ v" c
        Yline_coords.start_point[2] = WCS_pt[2];. W2 |) l# f, _9 d& \) J
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标6 f& L: l$ O0 K) ?2 A1 s' [
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
; M( s/ Q5 A. r# O& {/ [5 G; L
$ a4 p/ @) l* U+ k4 W        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小& W4 h  U" _7 g7 P! F
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
+ q1 N* _- N8 k) h1 |        Yline_coords.end_point[2] = WCS_pt[2];
- b8 k  m' I# @& {6 K        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标2 r) H/ e; I  L% D: G
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
7 J7 o: C' y. C( T' q6 B. O" Z       
# D( A* F$ k- x1 R        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
, I! n9 p- Q) r6 f# p        UF_CURVE_create_line(&Yline_coords,&Yline);
8 |; V3 f/ U+ @/ P" ~: c/ n0 f4 y        UF_OBJ_set_color(Xline,186);        //设置颜色
( D- I. z: y# n! r+ t2 ]        UF_OBJ_set_color(Yline,186);! m  n# ?& E8 s: V
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型" j+ Q! O4 ]( S: F9 V7 z0 V( |
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型* C- K, X5 Q/ {6 T% \

" ]9 M- n# V: ]& U' l/ }" {- U        UF_CSYS_set_wcs(user_wcs);! f! R/ \% D4 z
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)3 R' B7 x7 J! {( V8 z
        goto l10;& Y, w4 H; I2 N) q
4 t) d6 a2 @/ Q6 @( T8 i
}
0 x) [6 E9 ]% W  a6 n6 }' U- x8 k5 C+ }* f) }
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
& o# q. `% v- w; B$ _% a( z- p{
6 _9 [; v' b- I( [    /* Initialize the API environment */
1 k/ C( M# q6 J% R9 E    if( UF_initialize() )( q5 u6 A- c" a+ f6 Q! G
    {( y  P  i# F3 b" x! }
        return;9 K, d. H  [  q# X* [+ t2 b
    }% ^. X3 v& i) X6 E7 W; ^

4 i- {  M! m0 v% a        Create_Center();. P; R6 E8 K, j) E6 F
1 F8 t% |) D' B9 R
    UF_terminate();! c* _5 S8 L- _# _
}% S8 O$ @( k+ l0 I2 W3 q2 i4 j

0 I+ x; c) B) D9 E
% R: L" _! A; k1 A& ]3 A$ b- ~extern int ufusr_ask_unload( void )
. V* K7 n0 J+ [  ]0 V# ^4 d{
& p( F3 O0 C- b6 W9 F1 E# q7 o    return( UF_UNLOAD_IMMEDIATELY );
& E8 B% D- v( n}
1 W% ]; \$ N7 {/ Y% O& i2 s6 `% k5 Y0 s

6 @2 F* C  @1 V& G$ M2 C5 Z( L/ Q  l
% d+ F5 U1 S' ?4 m7 n" ^* p  P+ d/ _& s' U* B, N$ m) _5 D
11.gif
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复5

简简单单 发表于 2014-12-12 10:44:43

简简单单 沙发

2014-12-12 10:44:43

呵呵,终于写好啦
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

admin 发表于 2014-12-12 10:48:43

admin 板凳

2014-12-12 10:48:43

简简单单 发表于 2014-12-12 02:44. J1 a, R: J/ F/ S
呵呵,终于写好啦
" y0 t4 Y& R/ k4 G2 P
不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

简简单单 发表于 2014-12-12 12:01:37

简简单单 地板

2014-12-12 12:01:37

老师多多指点才行
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

admin 发表于 2014-12-12 14:24:54

admin 5#

2014-12-12 14:24:54

简简单单 发表于 2014-12-12 04:01
; E: I3 O! G  w) H- g8 O  k$ x老师多多指点才行
3 i, w0 r0 G# P# _$ }
后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

freshapp 发表于 2022-12-21 19:59:03

freshapp 6#

2022-12-21 19:59:03

好人一生平安!楼主好人啊
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了