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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
0 z6 K* P7 b9 _9 O% w
#include <uf.h>
" h+ v: d5 R& H2 e/ N# d1 v# W$ ~2 Y#include <uf_ui.h>
' i) C* Z& r8 K1 y3 b1 X#include <uf_exit.h>" E- M1 h% Q' Y3 }
) m& a0 G. ^4 u. Q# e
#include <stdio.h>7 X( D& v  R1 R" X$ G0 D* m. y. ^' q
#include <uf.h># G3 J; l  ?. H& i7 ~$ Q9 R
#include <uf_ui.h>$ r5 b; L; T7 B( u
#include <uf_exit.h>( J. m% k% w9 q% X# N7 D( T
#include "uf_layer.h") T0 U1 w7 q! M! q
#include <stdio.h>
8 e- L# e; m. f4 g' L# H#include <uf.h>
( {: a/ S5 R) ^; H% z#include <uf_modl.h>1 y& f8 ~: A: A9 p% ^( E1 P
#include <uf_curve.h>% l" i9 u% S: R. g
#include <uf_csys.h>% \6 r5 W1 R2 k; t3 [& u! [* g
#include <uf_object_types.h>
" R( d" t/ G4 @" \9 M- \5 m#include <uf_ui.h>. I) e9 W7 a0 d) g$ t
#include <uf_part.h>3 N& [6 _, ~+ u- F
#include "uf_obj.h"
' r$ @: \" Q/ h4 M; a, I7 j0 q#include "math.h"
/ F5 o+ Z! p! L. \
- Q& o# C* R  jstatic int init_proc(UF_UI_selection_p_t select,void* user_data)
7 m3 C  u9 T, i{, U& Y2 j( |( x( s8 ~9 g. L- Y$ @
        int num_triples = 2; //只选择一种类型
7 u: C) `4 j& K& S0 B5 X* L- I        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
2 e% _3 F, }% A( X( E& D                UF_bounded_plane_subtype,1,0};
* @5 |+ ~& L0 @; B2 D" {0 M" Y. \ if((UF_UI_set_sel_mask(select,' c6 P/ q3 l  _9 l
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,. T  B8 i7 r" n
  num_triples, mask_triples)) == 0)3 C3 f% V/ e% a4 n. [  g2 O; t
{! N; B0 C+ m& O' [7 v
  return (UF_UI_SEL_SUCCESS);5 Y$ r  W, D# f+ z0 N& y& a5 G% ^
}
* M% R6 @4 @8 h' U else/ A9 \7 f. I) R6 v4 d
{
+ p+ H$ ?2 |" Y) v) {! l  ~  return (UF_UI_SEL_FAILURE);
" I# z; K; u" }/ t, |5 @& [: @ }
" t% q6 h  t! h  U0 t+ y$ k; C+ \}
; _  C0 n8 P  l4 C/ ]8 Z
3 r0 o' y6 t/ J: g5 \& l  U0 g, @& C# k. j& y" V, ~! H5 L
static void Create_Center(void)
) L6 S: x& R1 _) N* f{
4 x7 W$ ]* z+ k8 N( a        tag_t user_wcs;6 l: W+ @) \  E0 W; r
        UF_CSYS_ask_wcs(&user_wcs);
8 a- p# i4 q+ [- T' L7 m* u        char cue[] = "简简单单:请选择单个平面";
. j3 r9 `9 G* W        char title[] = "简简单单:对象选择对话框";. p7 n) U9 B8 A- c, y0 }
int response=0;
, u- X  g" K* E$ _4 j8 G/ }" \5 U tag_t object;
& e7 _! p6 C) L& I: m6 }+ o int count=0;
6 I% `% R# K0 ?3 J4 U double cursor[3];: A# h$ C, H. f$ |1 ?
tag_t view;# J; K: Y' E$ P) h3 X0 P) [) j
l10:
% g+ y. s$ z& W8 w UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
' O2 E5 C! F& o. m1 {6 j/ a if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
9 C1 {) W* ~" m2 [0 N if(response==UF_UI_CANCEL) return; //如果点取消就退出+ X+ y: s) n- U" Q
UF_DISP_set_highlight(object,0); //取消高亮显示
  b2 k) A! ^2 E) H4 c, G1 e3 g& L6 J+ B6 z
  int type;
+ l9 L( L2 u  U  B6 H9 X" v' w) X! Z; E  double point[3],dir_z[3], box[6];% R6 Y$ i. O, c7 V3 b& E
  double radius,rad_data;
3 d6 d& A4 X- O& ~8 p+ ^  int norm_dir;6 c0 X. x4 ~% ~. R0 q1 J
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
( |7 g8 i' ]  ^6 ~5 h' b; X1 a8 J  ~5 C% {/ i
, E5 t% G, [2 J- Z' L
  tag_t matrix_id;
& b7 t7 N4 X, A$ J6 R  tag_t csys_id;
3 b+ J  [- K2 J" o  double matrix_values[9];2 g: }* c2 K3 H7 `( P% O6 p. H8 a
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID8 l+ K% T0 y3 W* u: |
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values; Z0 w3 y" R9 ^6 v
  if(norm_dir<0)        //判断面的法向是否相反) `; d0 P2 H9 m& S# \2 ~% L
  {
! u2 C( E* O* N, y+ @   matrix_values[3]=-matrix_values[3];
! M: ~% I8 K) o  w' l. ~8 x   matrix_values[4]=-matrix_values[4];
* Z$ m/ W4 ]" f2 g   matrix_values[5]=-matrix_values[5];5 O# F# h( `) A" x
   matrix_values[6]=-matrix_values[6];* g4 [4 J- b. F( c( T! h
   matrix_values[7]=-matrix_values[7];- W+ ?) ]9 z: M+ D5 F6 a; ]! T
   matrix_values[8]=-matrix_values[8];9 S2 Q5 n) I' T( _4 p
   UF_CSYS_create_matrix(matrix_values,&matrix_id);2 V) C7 ]9 E" L
  }
$ s" J3 Y, G6 N  u  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
$ R: T0 ]* Z/ Y+ h9 g7 L  A+ G3 b  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
  q7 D: \9 @0 W( X( }7 A UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
6 q' }& p: @) b8 a
: ], p/ p; p2 W3 W; T        double boundingbox[6];1 @5 }% e+ o; u0 ]; K7 q* ?
        double boundingbox2[3][3];
1 H! m% H5 g/ N& a' k+ r4 U        double boundingbox3[6];' Q$ s; u" q, v  P
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);' p7 [3 y5 J' d
- Y  \% _8 w  k2 m
        if(type ==UF_cylinder_subtype)/ |1 j9 L" ^6 l- Y# v( H
        {2 X( o7 p3 C$ Q: b3 N" M9 @# s
                double cyl1_pt[3];
3 f4 k& G) Z- q9 }/ C! f                tag_t cyl_line,cyl_pt;2 y5 r3 w! \. C
                UF_CURVE_line_t cyl1_line_coords;6 R4 |8 e0 \; B
                double WCS_pt[3];& `' G7 C% a7 m8 A/ ^
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs! U3 C: m6 f6 |/ i) J2 C
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
- K9 S; G# o' Q+ K1 c$ j, }. [  P) u/ J                cyl1_pt[2] = WCS_pt[2];: p# D4 R3 Z- G8 Z0 ^% n: H
5 }6 X/ W! W6 E" e+ A" y; }
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
8 h: u$ ?3 G7 m  }7 m                cyl1_line_coords.start_point[1] = cyl1_pt[1];3 K- l: |7 W* l6 p# o
                cyl1_line_coords.start_point[2] = cyl1_pt[2];' j; H; [8 o) C3 k" q
' _1 R) a( m0 I0 n! u7 M2 w
                cyl1_line_coords.end_point[0] = cyl1_pt[0];8 W! i9 Z5 Z) Y  H4 D+ u
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
/ @  I4 `, \- }" g! W! [                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
% V" T5 O, A5 R  O; H2 q$ q) \, |: l7 h: t! 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转绝对坐标
  B1 b4 u" R% ]                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
+ i8 _6 i; J" c1 z6 E5 x! [  F                . q$ B. A$ J2 ]% n5 X& L& M
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
* I& h# M- b) q                UF_OBJ_set_color(cyl_line,186);' w! l9 V9 C) ^( |* T9 n+ e
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型& r) R, }: o8 [% v4 h' b
/ E" R) X( m* x$ }
                UF_CSYS_set_wcs(user_wcs);$ B5 z6 o! u' s8 h' s0 o* O
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
" R0 \# i2 i6 x5 i) T( ^/ e+ Z% p0 X5 r3 |6 z
                goto l10;
& m. G2 z; J. c" \7 k! Z& f        }; s  C- {: T9 n9 x

+ b/ k4 g. ]3 K1 G& ]6 z
' b! A& `9 m/ u# f1 ?# d        double WCS_pt[3],center_pt[3];; \: |+ U, H5 X/ H3 j6 n
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
- P3 `( R9 A6 ~, d; F" h7 L. v9 M        UF_CURVE_line_t Xline_coords,Yline_coords;2 u$ O* f0 r. L3 ]
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs: E  A& b* I) W" ?( x
        ( I! U4 @# t# l5 s" |
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;+ B! b0 o  e$ t/ A2 y1 a6 K; r
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
5 ?4 s: A: s* x$ M" S        center_pt[2] = WCS_pt[2];
7 a1 E2 _! ~: V, A3 v3 p. c  |- a9 I! T  z, b5 Z: G1 G

; m" J# J% z7 i8 Z! z' q  Q        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2' N9 K; D2 q) p: m. {; B" n
        Xline_coords.start_point[1] = WCS_pt[1];
; A+ m  p+ \1 t" }        Xline_coords.start_point[2] = WCS_pt[2];
" i1 R  x+ G8 ]1 \- ?. J7 C        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
; u: M* B, l- A+ _//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);: O  L% r/ u& ~! g0 e+ |2 y6 w
: e2 t& }$ k3 i2 [9 E4 K3 I
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
' b( I' h/ g( s, y7 x  K/ b, \        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小* k3 p9 g7 {+ G" o3 m' B
        Xline_coords.end_point[2] = WCS_pt[2];
8 q0 x9 r  }- Z, J- X$ n9 d7 `        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标/ b  E' N) C' c) h
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
- j5 e# E! c3 P( E4 y# ?' F$ p* ?* Q/ g; I& j) H! V
        Yline_coords.start_point[0] = WCS_pt[0];
& f" N5 V: |% E) T  l( A" z        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;6 a  s) `  }, v7 T
        Yline_coords.start_point[2] = WCS_pt[2];
/ E6 ~6 \' G$ v) ~+ o" H1 k7 J& J% J        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标# j4 h  [: ]$ S, M1 @. f
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
: L+ R- J" ?! B3 e
$ q0 p" t5 j$ P& w1 q        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
+ S% N5 ~, i& m2 H3 v, K# u        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
/ |: y9 u0 ~& `0 J0 [, ?* [        Yline_coords.end_point[2] = WCS_pt[2];
7 j- N( _( W9 e7 H7 O& M; H        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标# E( Q0 H6 C8 W8 s( G) A' f# @
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);! ]0 h6 H  n7 \; T8 V
        " ?5 r  a6 i8 @7 H
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线/ k) w4 h! x2 L' h
        UF_CURVE_create_line(&Yline_coords,&Yline);  b% a& x7 `2 D
        UF_OBJ_set_color(Xline,186);        //设置颜色
+ R: a" F+ I0 C( H" c        UF_OBJ_set_color(Yline,186);% c( t- l7 ^: ~
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
8 R- T/ U4 J! e0 C: c, J! P& h        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型; B+ e9 D5 I  x' y: G
% Y4 d5 e, C- E3 q; R
        UF_CSYS_set_wcs(user_wcs);
  r8 i, Q4 Z: l5 g7 ~        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)8 `; u2 H5 Y0 W
        goto l10;
$ a5 ^7 ~* J& I5 O1 P; T" k
  V$ c& g( C0 l6 R}# w. H8 W, M/ ]" I

- w8 L; T  P" B  X: s1 h/ ~' aextern DllExport void ufusr( char *parm, int *returnCode, int rlen )/ y9 j6 K( u7 B- n: z
{
6 b0 H9 u8 K8 M( B8 v8 y/ }; r    /* Initialize the API environment */
" i5 B1 E; w9 P; ?; s    if( UF_initialize() )
' D+ k/ |+ C3 F9 [7 v2 q/ ~    {
$ _" K8 K. j$ `- G' M% Y' Q        return;
- T$ D) o( N6 N- a/ v, _    }
) b% E5 }1 V# @0 r7 `( w% T
1 B  y4 J' Q' m1 Z+ C# @        Create_Center();- S3 K* w3 p. \
9 J, E# ^% O8 V2 [6 u8 E6 X
    UF_terminate();6 B/ X& a# \% ^( z9 o% o
}
! q$ t% A; M$ M1 F
5 X: j. [2 N3 \, p5 C* B; D- {/ R' b, n2 r" Y1 h7 C+ q
extern int ufusr_ask_unload( void )
$ ^$ H+ g. Q/ D+ C{
% Y1 d5 \5 n! z    return( UF_UNLOAD_IMMEDIATELY );8 l+ Y4 k7 M3 O/ G& R
}4 c5 h& m) J' i) K, G7 h/ H6 K) _
$ f# T# n: _' [- d# a; N

  X8 C2 B9 G$ I3 z! ?: n& d, V0 b& D  u) e3 F7 C
7 @8 \7 H8 |/ W' N9 Y6 o
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/ [5 V1 t- L; z. f8 r1 H
呵呵,终于写好啦
5 o' l: n% i1 M* H# x9 L& s' D
不错啊  
上海点团信息科技有限公司,承接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
  J- O  U3 d. h$ t老师多多指点才行

! v  d7 b1 }" c% 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二次开发专题模块培训报名开始啦

    我知道了