PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
, n" A7 X0 P8 I. |8 T$ f0 c' L
#include <uf.h>2 b9 H" i/ t" W6 f
#include <uf_ui.h>
6 v) V2 Q, b4 [#include <uf_exit.h>4 ~" H8 w2 _- A' h2 J
1 j5 {; ^+ U4 Y+ r
#include <stdio.h>; J3 A* {) t; J3 K# c$ ?* D
#include <uf.h>
+ f- c7 @* F+ o+ I: g#include <uf_ui.h>) M" Y$ \3 g4 R8 M8 I! }" H2 k
#include <uf_exit.h>: E9 M: Y9 Z+ n2 P' ?* l
#include "uf_layer.h"
, k( e, H/ a+ w; D/ C#include <stdio.h>
* C, \) A# m9 W* t1 H#include <uf.h>
1 k, F/ j" P1 D#include <uf_modl.h>
9 v8 R9 [% U9 t; U# t#include <uf_curve.h>
/ I0 I9 g* s9 e4 h; t- U4 F4 q#include <uf_csys.h>
+ I+ S" ^3 g! j- X. _#include <uf_object_types.h>
: K* u" Q* w- L: F3 b) m- I#include <uf_ui.h>! V2 {) ]; Z) M+ m' c
#include <uf_part.h>
! R  H+ j3 n$ f$ {2 [2 q#include "uf_obj.h"7 W) H" e2 \7 ]0 J* P0 |
#include "math.h", a" p% ^+ f! O2 Z

, ?# g! |; J( n2 Q4 z1 ?# V. t0 I5 jstatic int init_proc(UF_UI_selection_p_t select,void* user_data)* D/ c* X8 T, B
{" b2 o; B2 A+ v- _2 A7 i2 D
        int num_triples = 2; //只选择一种类型( a4 t' Z( A& J. y6 @. l
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,; e% s  s( O4 S8 J# N2 Y/ P# u
                UF_bounded_plane_subtype,1,0};
1 j& b7 p. P3 t# f3 @ if((UF_UI_set_sel_mask(select,( S$ g: P5 \+ M. D/ ]" F( ^
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
3 A# N8 M9 ]4 E- H  c  num_triples, mask_triples)) == 0)
2 }$ x. R2 |& ^ {' B* j; t- O" l' K' ?. x2 L9 B
  return (UF_UI_SEL_SUCCESS);7 y& p$ x9 ~- l. D
}$ C5 p4 }; n6 _  n! o9 n% g
else
" ^7 n: l8 H  u$ Z( R3 U. j {& M; \; O2 ~* o/ k9 F9 V
  return (UF_UI_SEL_FAILURE);+ q, r" y( z8 U( @. m, r9 E
}
7 c( u: z( x, n- y% Y}
$ F. x1 c! u! d
- p/ O" Y# i1 t- [4 {% E  j% R* C# A1 Y1 `
static void Create_Center(void)
* }) i, Y7 t9 \& M' P/ U{
8 s0 k/ N# N, g3 R7 I        tag_t user_wcs;
" V7 h5 D8 [1 `* P5 p3 z! c        UF_CSYS_ask_wcs(&user_wcs);& j1 X, T" J9 z/ }+ B8 p# K" ?! v
        char cue[] = "简简单单:请选择单个平面";
+ @0 k# \5 W& b1 J% w+ A* W+ ]1 K        char title[] = "简简单单:对象选择对话框";
6 S# q: B" z6 G8 b# A int response=0;
) r$ ?! e& x& y4 j* G tag_t object;, h' {# s1 y* y0 F8 \6 c3 m. e# f
int count=0;: s0 G6 e* c8 Y9 j
double cursor[3];) f7 f2 w& P5 \' G4 s! }3 ~5 S; t/ ~
tag_t view;9 H: l& L) f! X
l10:/ ^  ~: n- s# A
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
+ o- ]& d. d0 k7 | if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
8 i0 M8 o1 |1 y* d; z/ ` if(response==UF_UI_CANCEL) return; //如果点取消就退出; @2 _- S* t; W, `9 J! \: f
UF_DISP_set_highlight(object,0); //取消高亮显示' `4 v6 m- n( D$ Z4 j% d' y

  D( R  A- i$ e# ]  int type;
! |6 c* h) ]* `. Q% @  double point[3],dir_z[3], box[6];
& b  U) V8 w& O0 I+ E5 [# F  double radius,rad_data;
4 @& A9 Q% |7 J4 @1 R  int norm_dir;* K2 Q) c& b: ^
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
  C# B7 D2 N3 ]& G# D# @0 Q
( d0 J" S4 e9 |
2 Y! Y; ^' c4 Z- S3 N  tag_t matrix_id;& {8 H+ C) _* h
  tag_t csys_id;4 e6 l- M4 Z3 t7 M+ m: U
  double matrix_values[9];
% p5 s: [7 H$ W$ l& Q+ _  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID4 {) ]1 j6 Z0 [# j" `" @/ K+ |
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
0 l0 f6 H5 t6 O1 s' g  if(norm_dir<0)        //判断面的法向是否相反
; Z$ v* \+ W3 d4 Q9 X, s" E4 {5 P: p2 }  {0 |4 N& _" r- I# q& \& f# i" f. \  \
   matrix_values[3]=-matrix_values[3];! N  W$ M/ G3 J
   matrix_values[4]=-matrix_values[4];
3 i3 D1 q6 x/ u$ @9 ]* u2 ~   matrix_values[5]=-matrix_values[5];) W; ]0 m) a1 U- Y3 Z1 B4 i
   matrix_values[6]=-matrix_values[6];
2 M9 R! I- m; P9 \5 d- q   matrix_values[7]=-matrix_values[7];' R8 R: ^- O$ C  `, H
   matrix_values[8]=-matrix_values[8];
: y9 Z& @6 _  S: L3 j5 X- }   UF_CSYS_create_matrix(matrix_values,&matrix_id);& N6 D( M4 b( i7 Z3 _
  }
% g' |% u  @% a% Z/ {) `* M  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);/ q6 \7 c( r: D5 C5 c3 A* Y) |2 a
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
) Z+ ]& I: ~; t8 o' }' t/ K* J UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
8 e  K; |" X' d' x4 q6 ~0 P2 E5 A4 K" K- `# {% p' {
        double boundingbox[6];3 t# F8 _$ y% K; c3 S; x6 S
        double boundingbox2[3][3];
8 C: b' q: k$ x8 r! P        double boundingbox3[6];, _  J# d8 E5 u- ^& l; @9 b
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
9 r4 J. L& y4 s) b1 E: t
. O4 j9 T4 r. ?" [, j        if(type ==UF_cylinder_subtype)' G! F5 z* T4 K& `6 M( b# `
        {& T$ v( a1 e- s2 ^
                double cyl1_pt[3];( p: S6 ?0 q, J( n' W2 s
                tag_t cyl_line,cyl_pt;
& o  N0 e* w( }1 J5 o; r                UF_CURVE_line_t cyl1_line_coords;
3 n* d+ h* j% B3 y                double WCS_pt[3];, x4 H; V7 M7 ?2 G
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* F/ w" ^& D( q$ B- t# S# q! W
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs3 `, m" N4 l2 y! i7 ^
                cyl1_pt[2] = WCS_pt[2];
9 F" y5 ~4 W! n+ ~$ V  z9 u6 Z9 r5 E; x( X5 S# X' \  M
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
0 \: g. j% T0 Z# @. g! x                cyl1_line_coords.start_point[1] = cyl1_pt[1];
6 b! `# R6 h8 K- `0 l+ n7 u                cyl1_line_coords.start_point[2] = cyl1_pt[2];7 F1 D0 q' O0 B

" K! u% R* X5 B3 J8 }9 o                cyl1_line_coords.end_point[0] = cyl1_pt[0];
5 z* j* C, `" m5 H                cyl1_line_coords.end_point[1] = cyl1_pt[1];
+ j% r& v6 v+ a# r                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
# I  \5 R* ?4 ]) c$ i- f+ _$ b6 d/ c1 F5 U( T$ {( o! N* b' q. Z8 s6 c
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标5 {0 u; o, H3 S) V  ~% [
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
6 L7 I& Q0 O0 L. X$ Y9 F+ R               
1 f6 o$ z8 C. E& L# n, N- C4 N8 R: F                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
. j4 E' X( k# i                UF_OBJ_set_color(cyl_line,186);$ X$ n/ l$ y3 o; L! f$ o
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
& B: I# c, m4 b
0 x9 \, G( H* ]# w3 E- ?                UF_CSYS_set_wcs(user_wcs);( a9 W6 h* g& |* _% E! w8 U* Z
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
8 s% j0 V+ w6 e: U( z5 O1 a- {! q' ]/ m/ o( P$ p; b8 q9 Q$ |
                goto l10;
4 ?) p# R2 x6 o7 k2 }, }        }$ ~, d9 K2 X  ~/ j: I( L: P

7 X* ]: N1 U! q# E+ V2 N. r
% p/ f: F9 S0 Q# Q        double WCS_pt[3],center_pt[3];( o4 q# l3 M0 a% J9 o* x3 ]
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;2 v3 B" Y3 g; P- k* N9 k
        UF_CURVE_line_t Xline_coords,Yline_coords;3 R% ]6 c. Q: K; o. B
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
+ Y4 {7 E9 e/ V: h9 E- m; e       
" W4 R/ f& ~% F, L# S        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;# K# v7 W, m" N: ?5 p3 J$ G. e
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
: b6 G" I' C# O( [        center_pt[2] = WCS_pt[2];& ], _3 l# S! N7 D

/ n( F* r1 Y  y# V  }, c0 c4 e% M1 z$ F/ p$ E0 b
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
; e8 q6 f% N6 O7 p7 J        Xline_coords.start_point[1] = WCS_pt[1];
" e" p# Z4 V3 x6 p) m) N        Xline_coords.start_point[2] = WCS_pt[2];6 o$ h. r* |6 U$ X! m3 }% x
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标! W, C- U- e5 A( g; U. D& g
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
1 {) \0 n- R6 M8 _$ u* B- J4 d
9 Q  R% C5 r! P" F5 v. ~        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2" _* s1 k( z; j, t7 g' V3 [; A- F
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
# _" D+ W" n1 k  `  ~8 @        Xline_coords.end_point[2] = WCS_pt[2];2 g  c& F0 E: ~0 e3 b% z
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标+ n+ d( t& N! B8 k, o
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
0 P2 x. \% _8 G/ _+ z- i
; c! q0 T  N8 `/ p: [2 m        Yline_coords.start_point[0] = WCS_pt[0];7 b# C2 u1 _/ s- c
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
. S5 B. P4 t; A& j        Yline_coords.start_point[2] = WCS_pt[2];% D$ F4 o# Y6 e# Z4 W/ t
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
) K% l- C8 h. V0 E6 w+ b8 h//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);8 x' M- r+ Q' P5 k# W/ D
7 ]8 ~" J( G! ]& {
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小5 p+ F' q! e% U0 Z! e: l% p7 S
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;" i3 V2 @- K( B  q
        Yline_coords.end_point[2] = WCS_pt[2];
. K  \- Z5 P2 ]/ e        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标4 {' i# y9 y# A' f" P
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
/ G2 w# [+ ^# G4 m       
$ @2 T  Q2 V4 `        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线8 r  l  r" _  ^( z# H, F8 v0 {& F
        UF_CURVE_create_line(&Yline_coords,&Yline);
! `, o# m  [5 W        UF_OBJ_set_color(Xline,186);        //设置颜色( q, ~; j5 h$ j8 G
        UF_OBJ_set_color(Yline,186);
. [) y- ^/ r, s% K/ d3 B        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
$ V, e' w, X) g4 {0 z) @$ k3 v6 I0 }: D        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
. _. O7 G( g. h" k( `! Q- W' x  `& g, u" L: R
        UF_CSYS_set_wcs(user_wcs);
  V# ^& m5 y+ B2 b6 w+ O        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
6 V% A! U) `0 G& Y; o/ R        goto l10;
8 W8 c! U. K2 r5 [' R" S! q
: _( C1 e. M; z9 `7 M}
% @4 h& Q6 i7 ~) H
% C5 f$ |% D8 a' Z1 Sextern DllExport void ufusr( char *parm, int *returnCode, int rlen )- N: _# [; M- V
{
/ S5 ^; L+ T, x$ }# P    /* Initialize the API environment */
7 H7 n' |0 v3 P    if( UF_initialize() )
  }  B" G: L3 d4 {, t9 ~/ B+ _    {
) T" h4 F& c" S5 b9 ?/ z+ S  C        return;
9 _; |, u3 J+ G; \1 ~    }/ O9 M4 L+ J# x+ v
, W" o9 F) |. o2 [4 x' U: m, t/ Y# q
        Create_Center();5 l: f. c& @& ~3 y5 O# y

) _& T7 m7 @+ q: R4 A2 o% {    UF_terminate();9 D, e% t* O0 _' C$ E: n+ z
}* ~- g! }, c' _. F" n. V
1 [  ?! q/ D0 x% |

9 e: S$ W3 ]; ~# I5 P0 Zextern int ufusr_ask_unload( void )2 u9 V9 {3 K4 k% \. J
{
& a! y8 C! E# _: R' j! x    return( UF_UNLOAD_IMMEDIATELY );
) J; E9 d7 k4 E3 K6 V5 G}
; Q/ |: C3 }9 }6 V2 m4 M' Y' u. i5 D0 W
2 X1 `  B# v, s9 [- P/ g3 R8 a: S

/ I  ]" B) Y2 C8 b. ]7 M) ~
( N# b; i3 V$ i7 J! Q
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) \! A6 s) }4 n- [
呵呵,终于写好啦
$ I& D) X1 i( h7 z3 D9 ^+ G% j# k
不错啊  
上海点团信息科技有限公司,承接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( _# o9 C* u% B% @/ I! x8 ?
老师多多指点才行
$ ?1 C# g/ X2 k
后面把 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二次开发专题模块培训报名开始啦

    我知道了