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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
9 G! }' L/ j. a5 h: @2 K
#include <uf.h>& S. \8 Q: g' j" P
#include <uf_ui.h>6 L# y: o9 k* z- ^
#include <uf_exit.h>8 `. n- I0 n+ O% W) n/ K9 ~9 ?
; I& Y2 J  W! Y( w2 D4 M
#include <stdio.h>
: g& o: Z5 |4 ~' `6 f4 W' m- u#include <uf.h>* v+ H/ e! h( L
#include <uf_ui.h>
# _$ P8 @- v9 f( y6 L3 M$ k: ^/ \#include <uf_exit.h>
5 x2 b9 y0 g0 m7 f# N#include "uf_layer.h"
3 _) C6 h# ?! |# e/ [8 o+ A#include <stdio.h>1 r: ]4 O$ u& ~2 S  S. E
#include <uf.h>: t4 |# e5 x8 n) N6 \* e
#include <uf_modl.h>3 V. s9 d  x9 ~1 m
#include <uf_curve.h># M5 w; `% o6 }7 ^
#include <uf_csys.h>5 Q* v/ _+ ^) @# ?) g. A
#include <uf_object_types.h>
/ b  ~4 t4 d! X6 _6 q#include <uf_ui.h>
7 ]* a/ M( X- Q  }/ o#include <uf_part.h>5 b3 v0 b5 f. s1 B# E) t9 c
#include "uf_obj.h"
  i5 D( m, {$ [$ H8 {# m#include "math.h"3 `2 k) m$ j) |; I6 M- i6 @, T

$ [9 f1 ^7 t, G5 ^static int init_proc(UF_UI_selection_p_t select,void* user_data)
; G0 B& M3 t" }$ j{2 Y& G$ b$ Z( ^$ _9 G
        int num_triples = 2; //只选择一种类型
+ `2 U( c8 `' {; C6 V0 ]9 s0 _        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,1 Y: N6 |6 M1 X
                UF_bounded_plane_subtype,1,0};
2 G! H4 D5 L' \' T if((UF_UI_set_sel_mask(select,# Q; `# H" U& l, x4 g" \; q
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
7 L8 a+ _( J' c0 r# g9 }  num_triples, mask_triples)) == 0)# f5 H2 K# A/ o8 s+ t' {
{
$ M- }. L: |7 C# y. O6 y  return (UF_UI_SEL_SUCCESS);
, G1 P8 s6 A  x }
4 Y# Q2 e$ S# y# C( x+ o else
: V3 w% z6 D  u* s8 z1 S {3 i9 Q  @% N9 _6 V
  return (UF_UI_SEL_FAILURE);
- ]% x& _0 L5 b/ ]9 n2 n* i }
5 g* x! \. y- |}; H" n8 l* o6 v' ^' `6 L3 g
. B3 Y, ]6 C# @; F" G3 X$ ?- t! B

0 ], O2 G1 l; T) n6 M5 T! wstatic void Create_Center(void)
% z2 S2 L% S5 Z2 J, ?9 I$ a) _{
2 [" Q& L8 ^4 R1 _2 u7 ?        tag_t user_wcs;8 T5 W9 R7 M& I4 ?) M
        UF_CSYS_ask_wcs(&user_wcs);
3 Y! u: Q* x' j0 Q4 L        char cue[] = "简简单单:请选择单个平面";
/ n4 r% X) v. U# H) s; k& W        char title[] = "简简单单:对象选择对话框";) j0 b# Q+ V4 C6 c3 @2 B4 \# \/ }6 Q1 ^
int response=0;; H, K* E2 |, d4 s, B4 ?
tag_t object;
) x4 K+ Q6 A% @# F, Q' C int count=0;, }' m+ r5 M# j8 Y. j7 D$ R# M2 {
double cursor[3];
% P+ t9 N; C2 q  O, K6 C8 y8 M  p) n tag_t view;
8 R, e+ P& a) H3 t9 W, e3 Ll10:* o! X; P+ Y& e# [# l
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);4 S4 T2 ~" {5 q  t' U8 F
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
* }" Z7 A1 _7 l& T5 G" } if(response==UF_UI_CANCEL) return; //如果点取消就退出
+ `- i6 q/ @& A/ ], Z( y  i UF_DISP_set_highlight(object,0); //取消高亮显示3 l/ i6 F2 \( k# V
4 B$ q4 y( X. m8 N$ b2 |* x
  int type;
! S1 k! B9 h' d6 [% j  ]  double point[3],dir_z[3], box[6];; `: n6 A2 h2 h) ~
  double radius,rad_data;
3 D5 q9 z; s( R0 o/ H# G4 Q  int norm_dir;
- R/ u8 |2 u* K# s( K/ ^  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向. c& ]5 d$ q8 s$ f9 A+ a

3 [8 Q( t1 F) E, D; h/ M7 j1 ~, J( Z4 Y
  tag_t matrix_id;
/ v9 |0 U* V0 A8 b% w  Y! c  tag_t csys_id;
; @) i& T& e6 M  j  double matrix_values[9];: [! `, U. K, k4 g( Z& c
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID( L1 }1 H8 V2 N. k3 r  ?2 U
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values' d7 L4 e% B6 b  {
  if(norm_dir<0)        //判断面的法向是否相反# q0 Z( C6 c. E* X. A; ^
  {! b4 `8 o# c$ `& {
   matrix_values[3]=-matrix_values[3];
# h' K; q! t. b3 }- Q% |9 y# g   matrix_values[4]=-matrix_values[4];
" s3 U5 M. Z" d$ A9 `) v   matrix_values[5]=-matrix_values[5];
' o/ \) e: b3 v   matrix_values[6]=-matrix_values[6];
. a1 L! V* k9 Q8 `% j0 }  h   matrix_values[7]=-matrix_values[7];* g9 b9 t4 R- o0 G: [9 ~
   matrix_values[8]=-matrix_values[8];
* ^5 [2 u2 U# Q   UF_CSYS_create_matrix(matrix_values,&matrix_id);3 K" ~8 i  K8 L
  }+ }7 M; L  A  m+ D
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);7 j- e6 u! V' U2 L6 }  h! Z
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正), ~5 F) K9 `: E. X2 Y- ~; j/ K; T. H
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
" B, v6 B' y* a3 K4 l# u
4 q: t' o7 d& J: t        double boundingbox[6];
# O! i7 y' m3 q% j6 C        double boundingbox2[3][3];8 I  R' [! O' |2 z! f% U' n
        double boundingbox3[6];
! T* A( z  z, \2 v; s$ q0 y+ m        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
) ]6 U( w9 N" I* {0 I$ D7 O: @- B1 O1 D. x# X4 O6 b* I: m
        if(type ==UF_cylinder_subtype)8 G7 _/ ?: b: v2 `
        {
1 Z  P1 r; d5 ?8 ^                double cyl1_pt[3];: C' H5 y# K  Q. K
                tag_t cyl_line,cyl_pt;
0 I- W3 {7 `6 S" g4 b- @/ F( T2 |                UF_CURVE_line_t cyl1_line_coords;1 o% \7 W# D0 k
                double WCS_pt[3];+ @+ x8 {9 x) K. V7 q
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
$ ]2 ?5 P4 G! N( o7 W9 E- t% y                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
' W9 [, s, ~$ }, k1 t/ W                cyl1_pt[2] = WCS_pt[2];
* A9 f$ S6 n# G  L. Q) E% m  Q  y/ y7 P/ l5 r5 E+ x$ f
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
2 |$ F' S, ]) t" z- c                cyl1_line_coords.start_point[1] = cyl1_pt[1];, {/ ?4 u# r( t/ H3 }
                cyl1_line_coords.start_point[2] = cyl1_pt[2];3 U8 N4 I3 U% C9 g( S

6 t3 k. w  ~  \5 \2 B# D                cyl1_line_coords.end_point[0] = cyl1_pt[0];
+ X! r9 Y. s; p  r                cyl1_line_coords.end_point[1] = cyl1_pt[1];
$ h* {6 h; \) r; q8 n: h' m: x( E                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
* D8 H8 q. o) E, @$ c0 A
/ Z8 Q# u5 r" P4 a                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标6 m. G! y- |3 L( y6 j" C4 _2 L
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标# w+ a7 k5 g* n% y: _
                ( K, u, }' d; l# z+ |/ u
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);0 F: _* R/ o9 \8 m# X; F7 Z6 ]* d
                UF_OBJ_set_color(cyl_line,186);
% K" K9 w% d1 M4 P                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型" L- U* w; i) T& E

+ {3 L5 D6 D' x9 {                UF_CSYS_set_wcs(user_wcs);
& g) ?( A3 {8 W8 A7 X                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)* i6 r  O" N- y, {) M9 l

/ o" ]% z7 j& q! m! \+ c4 n                goto l10;
; a" {: C8 s/ ^7 D        }$ o' m  x7 i, S  d2 I/ u* @# Y, U
5 W7 g5 @1 |( N, [* v

# f, b0 E* n. \: S1 O5 T" \+ N        double WCS_pt[3],center_pt[3];8 L7 I: Q" L' s' }; T* p1 G
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
7 _4 v+ W2 w4 E- {2 q& _/ r( L, b        UF_CURVE_line_t Xline_coords,Yline_coords;, `# \+ X% T5 j' ~
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs; Q; ^  u- n3 n/ E. \
        0 S; g" c" H% p+ ^
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;2 p+ w9 j- P- Y0 H( m
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;: i) a! i+ s/ }3 v
        center_pt[2] = WCS_pt[2];3 F  G! J( {* Q

; Z* G! M1 X) z/ F5 \8 ?
) \% F" H- h6 m, i' g" X2 S        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2) W( F7 o6 x( _. t& n9 e/ X
        Xline_coords.start_point[1] = WCS_pt[1];
- _6 M* f1 I& ?2 Y# k        Xline_coords.start_point[2] = WCS_pt[2];
: |" k0 |& D0 Z; z        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
6 W5 t8 f2 m' A8 i" V4 k0 @* G//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
% m" D' |$ N8 g1 E3 L) Z" s4 j6 o! C+ n6 M0 Z! d6 Z- [- K
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/29 t5 l# j9 a, h! a+ b6 u5 _, {# Q: |
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小9 h; o9 g- [9 @3 R- v. d
        Xline_coords.end_point[2] = WCS_pt[2];
" w: {! M$ I6 v+ [( u' w        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标' I8 j6 k. D, n2 Y) f, F
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);# O9 k6 W& P: D

& u, H  _% X6 U5 d% z) h        Yline_coords.start_point[0] = WCS_pt[0];% z8 Z. x* N% W2 L$ K! P! A9 C9 S
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
+ N, }' n/ g% e0 L& C: k/ J        Yline_coords.start_point[2] = WCS_pt[2];
+ v, N! `2 A. H4 U2 u7 H9 c7 J/ i        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标2 m% E9 S" M9 h' k5 y+ }$ c# O5 K
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);0 Y8 }0 T- W9 l* w4 V4 x, f/ @

# V" n$ L% z: A& ]( P0 R! m        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
  V* i2 n  f0 N- |  y7 G* I        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;9 \, P/ ]# f; O4 V# b) g9 w
        Yline_coords.end_point[2] = WCS_pt[2];
+ C) {$ d; y6 U9 M: s! ?, H        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
( p) z6 V: R7 |, V3 F8 f- x//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);& h  L$ ]. d( {# t% F
        0 y$ D0 n! X7 o$ a$ P/ i
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线$ W8 c6 {" `7 G& P
        UF_CURVE_create_line(&Yline_coords,&Yline);2 ~" y4 ~5 N3 k+ O( s5 y  O5 w5 x
        UF_OBJ_set_color(Xline,186);        //设置颜色$ `0 [& r: y1 \! C
        UF_OBJ_set_color(Yline,186);
6 [+ D1 T4 W9 f0 u% r" h        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型3 K% O/ R2 D  o) z4 Y! Z
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
2 Z. q$ p4 m! {" ?9 P6 a& m" b4 _$ N$ y+ g3 p# ?0 G/ g& V
        UF_CSYS_set_wcs(user_wcs);
' ?3 P- |' C% c! E# m        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
* \  Z" F* ]$ F! P7 x4 D        goto l10;
5 W) c" Z7 S) _5 G$ b/ v! d4 `
- j$ n+ ~6 S. j6 ~" f}+ \5 @8 z, i- @

5 F" I: P9 r1 n5 eextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
( p$ C* c, z, F& ]5 v. C{
" u9 u1 h3 }; M8 Z% S5 I    /* Initialize the API environment */3 i# B6 M5 s" \7 i9 V7 d; w5 R$ Q
    if( UF_initialize() )
# \- v3 b, D( Z0 M    {
: f: Z, x4 r1 \9 O0 n        return;
8 d' m9 z/ b% w. }- k    }
( O7 @  S: f4 j4 x' V+ G" v  U% t: ]! O- \4 a% ?
        Create_Center();) W7 @# M* p' x3 J2 l+ ^

3 H! A; _* k1 c9 a; [/ M0 l    UF_terminate();1 v( Z  E! D% O
}
0 A) i; C; ^# {6 \& V; [0 T2 h
( ?$ X  ?; d/ W
- j/ P! l8 o0 r" S7 O1 ]extern int ufusr_ask_unload( void )
7 ?( n6 O/ q: N{% P# F  V$ P1 l. w8 w8 |" S5 e
    return( UF_UNLOAD_IMMEDIATELY );
1 @5 y1 i$ \% Q9 U6 F5 A3 a- ~# V}1 T* D( b' j8 i' `1 P! [3 [- |/ ^
  [1 v# w$ y) u* ~! C

7 r" b8 I' y  k
$ S; C2 L6 E5 d; w# V" f' T( W! Q- X! a8 ^
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$ F. K2 ?- K4 R4 H9 C3 f. q6 ~
呵呵,终于写好啦

% U# b; I: m; G7 F不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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: {  y) r$ ~+ q7 K  x0 d- O0 \  Y9 O" ~
老师多多指点才行
9 ^$ u- X% D# w* h# c* c" l6 w; |
后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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二次开发专题模块培训报名开始啦

    我知道了