PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

1 D+ M0 n2 N& X3 k: o#include <uf.h>9 C; a4 Q' t$ W( n
#include <uf_ui.h>
4 Z+ x- T0 m. a! F#include <uf_exit.h>
2 T0 a. u; }  m
; H) D+ ]0 `7 j, ~( Y$ Q#include <stdio.h>
5 J+ f5 b/ ~  v4 X3 a7 `#include <uf.h>
' \$ F" y6 R9 {1 l) q#include <uf_ui.h>6 b0 d# e( A6 g: a8 S
#include <uf_exit.h>
- z* `' y0 Y/ s& C! x) K#include "uf_layer.h"- ^" O; z$ P" H$ H; [; x4 d0 t
#include <stdio.h>
2 K/ H, @1 s1 h' c/ I5 {#include <uf.h>
+ x% `$ E3 {, D2 e4 s: k; n, c#include <uf_modl.h>
% n6 @8 N$ s) Y4 E7 d#include <uf_curve.h>
4 W5 m( e; T3 G#include <uf_csys.h>
' R9 M2 Q. O9 E5 U#include <uf_object_types.h>
) j" j- W$ s  U6 x. D" ^#include <uf_ui.h>+ J& {( J( c% ~1 E; H, X) D( }+ {
#include <uf_part.h>
. ]$ V) Y3 ]. Z" O* d0 f#include "uf_obj.h"
; Q& V! @$ @% _6 D) p) ~#include "math.h"! N! q/ }; D% q- J4 j) Y, U; ^
# C# _) g/ j) B6 y3 ?- |: b* z
static int init_proc(UF_UI_selection_p_t select,void* user_data)
, p7 ^+ @6 b( Y) P' Y{3 z2 L) D- i( s3 m4 h8 Q
        int num_triples = 2; //只选择一种类型
* T4 S+ L, D/ v' T+ [0 N7 Y4 W3 _5 N        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
; K, V& g4 I: j! S6 k                UF_bounded_plane_subtype,1,0};$ I' f/ }. C1 x
if((UF_UI_set_sel_mask(select," K8 W3 T. f, V/ i! ]: H
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,: i7 N$ m; k0 s! Y
  num_triples, mask_triples)) == 0)
$ _9 B7 y& U) n3 e7 Z8 r {' U  H+ C1 y8 A  o1 `
  return (UF_UI_SEL_SUCCESS);
' Z! D- i4 S# C3 s' }1 {6 O+ C }- p* A2 Q+ Y  v3 W2 z
else
: H  [3 ]  N4 ?+ d+ L, J% I8 z! `/ }8 [ {# w8 P4 e4 ^# {
  return (UF_UI_SEL_FAILURE);
8 B% T, ]# K: r4 R# H }
; @( H- h( U7 x; m# K  N# g}$ K; }& J) p4 {8 p  s

4 [7 g# w) y+ [' ]
# b0 [( K5 s5 y  U, m5 A/ |/ }static void Create_Center(void); |" I+ F7 Q- O/ F3 R, `0 M
{% |# ?* K2 p7 q% D2 t
        tag_t user_wcs;) Z8 ]% j) u  c
        UF_CSYS_ask_wcs(&user_wcs);) ?( i! h9 r3 T9 }# u
        char cue[] = "简简单单:请选择单个平面";$ h2 x; ?! O$ h+ z6 C, L! N+ V) J
        char title[] = "简简单单:对象选择对话框";
" Q+ J6 F$ J( d( B' x$ e int response=0;% W' ]' {, l  R9 _; x
tag_t object;% Q  s7 m: X( b& q' v7 n+ B1 F
int count=0;& G! k; r- C% `; c& g* i3 r
double cursor[3];9 R8 J1 y6 @' J# \/ w6 F
tag_t view;
% a1 _7 w  v# b) ql10:( s9 p4 W+ v. X9 \$ R
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);; A3 Y0 Z2 b& p4 s8 _: S5 w" v
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
! q0 h# Y1 N1 f! Z if(response==UF_UI_CANCEL) return; //如果点取消就退出7 C8 H& t" U$ D7 ~5 @& I& \1 O
UF_DISP_set_highlight(object,0); //取消高亮显示
8 }; M+ U8 a2 v' u' b' n- n5 I3 z: m6 H% ]' r( E* D
  int type;9 ~! R3 H- d; K5 U0 I  i9 H
  double point[3],dir_z[3], box[6];3 S& \6 b9 ]* D7 S8 i
  double radius,rad_data;
+ ^7 B. N4 [2 e* o3 @" A* _. h; ?  int norm_dir;" q' G) v" }3 W7 C9 Z" t4 f- r
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
) Y7 P* W0 E% m9 j" V& {% U) T
) N+ [/ g- F. N
. E9 V8 Y6 |& E  t, t  tag_t matrix_id;  \7 C) D  ^! R7 K" z8 j
  tag_t csys_id;
. Q6 N. p  ~* ]4 a$ i  U  double matrix_values[9];
1 O; W1 C* f9 w# K0 {% x( B) w  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID7 v3 ?" C- W6 C8 J. ?- }2 v
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values' l. j% `2 ~" n
  if(norm_dir<0)        //判断面的法向是否相反/ Q7 g# j; I6 |8 f
  {" R6 U" F9 p8 x2 a4 O
   matrix_values[3]=-matrix_values[3];
" S1 I8 f8 u) t   matrix_values[4]=-matrix_values[4];
4 M; k* P, x" B  q' x0 W   matrix_values[5]=-matrix_values[5];: S0 t9 d* {/ _; l0 J$ c2 ]
   matrix_values[6]=-matrix_values[6];
" \  x) Z* S, k& ~/ B1 o   matrix_values[7]=-matrix_values[7];
) y6 I4 y+ P2 B0 A) [" y: e   matrix_values[8]=-matrix_values[8];
( Z8 e! u; n" e0 E# N3 z7 x   UF_CSYS_create_matrix(matrix_values,&matrix_id);
: B" D/ O% ?# r) z2 J, D* l0 q  }
' R/ d0 f3 K6 a7 F8 C3 w% ^$ N  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
/ I, Y. m: p- n$ J2 H  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
2 o- W  c* ?: t! f9 W- q, u UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)) i2 l5 f/ b) i. K% e$ s( A1 H; I

3 j# t) Y& ^# O1 v4 X7 b/ M/ y: `        double boundingbox[6];
; E- Z; y; t/ o% M1 V        double boundingbox2[3][3];
& v8 @' Z) D6 L2 W        double boundingbox3[6];+ b5 U+ x& e' K) O4 d. y
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
% ]3 S7 C$ ~1 e- e7 T, Y
4 F9 l' o0 o# L  ^  z        if(type ==UF_cylinder_subtype)
- i5 ^- w9 {: M        {
: B; Y  ]6 x1 D) [4 u. Q                double cyl1_pt[3];
8 |2 }3 p3 o1 ~* z" e                tag_t cyl_line,cyl_pt;- x! c7 `0 I# b. }
                UF_CURVE_line_t cyl1_line_coords;+ C+ U" Q) |' T* T* Q4 }
                double WCS_pt[3];1 m: J4 v1 {6 A0 B4 g. j# ~0 D
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
1 [, x' e+ W3 \0 U6 h                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs! R9 K1 @5 w0 t/ d2 l7 Y. Q, e
                cyl1_pt[2] = WCS_pt[2];
( B& a: ?) Q# W' H
3 j. c2 m( d9 q9 r, z& ]                cyl1_line_coords.start_point[0] = cyl1_pt[0];
7 |; R6 u8 U7 I6 V) w4 y1 u                cyl1_line_coords.start_point[1] = cyl1_pt[1];
; \. g$ b5 m& C# b- ^                cyl1_line_coords.start_point[2] = cyl1_pt[2];" U) j; C1 p* T" Z3 D* ?5 q4 n

' M) O# c  G$ C# ^& ]5 I% J                cyl1_line_coords.end_point[0] = cyl1_pt[0];
5 `- R5 N" A1 `- [; a                cyl1_line_coords.end_point[1] = cyl1_pt[1];- G0 {5 k, E! s. J( v4 q: U8 n' g
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
* K5 _9 ?. u: Y/ R+ P3 p# w* i6 G) w2 L' Q/ W, f) G
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
% U0 u$ n; [$ M% c/ g9 V* D1 u" q                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
, `) G" \. h. s  k" N3 D               
, K( h9 H! d6 b  l) c$ P. m                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);7 r0 q! e2 O7 U0 i5 O; F/ u* z$ h0 y
                UF_OBJ_set_color(cyl_line,186);
  [$ [! q, _, A3 p( V; f                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型) g) B0 s, `* X. D) O
" P- F% L4 D! w2 X1 x: g' t  _) t
                UF_CSYS_set_wcs(user_wcs);3 l3 X, \) M) k8 ~& Q8 J# e: O
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
+ ^' L" K  b" d; x5 s9 Z' i* ^# F4 L+ D% m5 }) O! k1 X
                goto l10;
; {% n: P# P! _* y- O        }
; H0 T; b& @5 Q+ x5 W
" M. S$ @8 v- l; @
' c' L, {1 W1 A( B# ^. ]2 ^        double WCS_pt[3],center_pt[3];
9 v7 h8 l- R# n, \% _6 w7 L  D        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
# T6 F/ v; B: n4 l        UF_CURVE_line_t Xline_coords,Yline_coords;" g6 `& c  r" F4 Z0 Z8 U! V
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
2 i% ?5 z) M$ f# [: Q3 u        ! N3 y  V! |: e6 S
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;$ t1 e7 r) R! c  h
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;; h! f( M; _) m  m- t! J
        center_pt[2] = WCS_pt[2];
3 R# A( v, N# F& U! `# s# N" B+ u4 c7 ?- G6 ?0 C; f& h7 F4 i2 _
- ^0 T3 N% ^5 {6 R5 L
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2% A& }% a% K+ l* S9 k3 z# j
        Xline_coords.start_point[1] = WCS_pt[1];
  {, X* O  C4 C% q9 Q- \        Xline_coords.start_point[2] = WCS_pt[2];# j& `8 e3 B. v* F# ~2 m# s! t2 s# P
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标; c, s1 ]0 O( M: e% U
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);! N' n$ ]( I8 K$ g& h

1 `- p& O$ i% ~( A0 h/ Q        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
9 R7 W. F6 V2 f( g" v) M+ s        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小7 R0 {/ P, `9 G
        Xline_coords.end_point[2] = WCS_pt[2];
* `7 Z. s/ V5 ?; |( z; {        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
; K* E2 _, y8 D; |  z; d7 O! N7 q//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
3 [& @7 {* q7 E* {
0 G) U" K* J% L: `' h2 n, v6 S        Yline_coords.start_point[0] = WCS_pt[0];
* @8 p; z4 y! {  m        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;, |( n& i, [. @' p7 z
        Yline_coords.start_point[2] = WCS_pt[2];
" K: M: w% c% _! b        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标; K. f) b4 y: z. @1 ^! V
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
% {  r0 e* \+ o/ y
( `; K5 Q. \6 C- N        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小0 H+ A+ q& D' L! l* R4 K
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
. ~6 b( o: c; k, |$ @% q' V        Yline_coords.end_point[2] = WCS_pt[2];
3 @* M1 t9 h: I9 `) _7 J        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标/ N) j7 b9 t! \% N+ K9 g0 O' A
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
& |) l8 ~5 M1 E; J3 e. j9 I' q       
) P! Y& [; J, D/ Y* L5 ]) r/ n/ Q: A        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
2 A6 J* w6 f4 c+ Q- x        UF_CURVE_create_line(&Yline_coords,&Yline);
# M7 H2 \% o3 U& V/ n- }1 w/ m1 v# K        UF_OBJ_set_color(Xline,186);        //设置颜色) U1 w: P0 x! F0 s0 s- g- B
        UF_OBJ_set_color(Yline,186);/ u$ r- \# R* f* `3 ^
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
$ Z1 Q. ~) H! P# L) ]6 G% s        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型; y$ P7 t3 Y# `
6 V1 J9 e7 @  `+ O' a1 y
        UF_CSYS_set_wcs(user_wcs);  F# w9 i' n* O: L: G
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)" ~) R9 U. Z: \( E* {
        goto l10;
/ K4 M. D8 N; K# K* V) l3 t, M: _7 n1 y- I0 I2 W* e( M& Q
}
" A( _, d6 b% {& `* _5 k+ U. p) X- i  ?) l
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
, Z) t! G: n/ H{* R! ?! h6 J) Y) L/ C6 I
    /* Initialize the API environment */
; D$ z6 Y- g8 V1 o; N( k6 j7 H    if( UF_initialize() )$ J7 p# D- i/ c" H& N# I& ?
    {
+ T) p0 }! a' _3 b3 I' Y        return;+ F& N4 m' g0 b5 ]4 U
    }: j  b( c- Q* }3 P% K! q+ J4 e- d# Y

% V2 i3 _: I# F        Create_Center();6 a) A; z* C, ?+ P, |9 W5 {
# G# i% O% e. Z- B# c9 [
    UF_terminate();
, N! g( B) Z8 v' W- |}
$ b0 }0 A8 Y# D( U
( e* ?* v8 f8 b6 u% D! Y' Y# [- p* o( a3 I* ~1 `3 G
extern int ufusr_ask_unload( void )" Y% P* q; O8 h+ R3 U- v5 I
{! }) a% J$ G; {/ i
    return( UF_UNLOAD_IMMEDIATELY );- s, h" ~- o/ K0 ^4 p5 v+ B
}  ^. @2 J7 k2 |! u
' b5 c  e0 s/ e% b8 ]. t
( \" W  `$ t; c7 f' O: b+ O7 M

, S2 D3 {* X  H" A
# b+ Y  g7 l& h, z4 F& E8 e3 B
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
) j. b/ B4 s8 @' T& s呵呵,终于写好啦

/ I- p" z8 W1 J/ I不错啊  
上海点团信息科技有限公司,承接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:014 Z  t) z8 k7 b% o1 h9 ?; @
老师多多指点才行

- ~5 q# ?( d9 O- Y5 l- j- `+ r1 F后面把 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二次开发专题模块培训报名开始啦

    我知道了