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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
! w6 c' D. n* t. V5 Y& W; V
#include <uf.h>
' K& p+ y7 w: ~0 u; g/ R#include <uf_ui.h>
3 H# W- D6 W$ t1 F+ J) w#include <uf_exit.h>
3 ^3 W( l/ Z* c! y" Z  \! R1 E" h# F! q2 g: x0 o" K5 C
#include <stdio.h>
  m+ }' ^0 P2 W" I% M' [#include <uf.h>+ Y8 z4 z* I2 i
#include <uf_ui.h>* r8 l4 Y4 O# K' E' W, F
#include <uf_exit.h>
8 e2 ]' O: Y2 {2 u& W% Q* _#include "uf_layer.h"8 s) N, t3 x) q4 I
#include <stdio.h>& u3 ]/ }' B+ e7 }
#include <uf.h># g/ F3 c- G9 W7 j& }3 ~8 d2 {- x
#include <uf_modl.h>; r3 k, [& h, Q( k3 w( D$ ?8 A
#include <uf_curve.h>
) w: W7 T4 ]) @- D, x#include <uf_csys.h># }: @6 D0 f$ @2 N  z! _9 X
#include <uf_object_types.h>6 q3 l' {+ Q! d/ T1 `
#include <uf_ui.h>9 k- ^( Q5 t& D0 b6 ?4 L+ ?
#include <uf_part.h>
4 v$ R$ x1 V( f* S#include "uf_obj.h"/ B, H. Y$ A6 Y# x+ H( b6 n
#include "math.h"  C0 r! B0 O  t$ `" T3 Y

( {# C5 I1 O# y# zstatic int init_proc(UF_UI_selection_p_t select,void* user_data), v' u! V$ H6 m+ v' S, ?
{# b: n9 ~) {. Q% F! }
        int num_triples = 2; //只选择一种类型
2 X* a5 P7 V  }0 o# W9 h5 ]* R! L# c        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,% y& ]  R; q  e; u" ~( O
                UF_bounded_plane_subtype,1,0};& r; Y+ y$ ]' y% G
if((UF_UI_set_sel_mask(select,2 X3 m, ~/ ~, M! z5 _6 d
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,1 ~( }. Y0 T2 H! ?  E4 ~4 Z
  num_triples, mask_triples)) == 0)5 |7 l! C4 w( G& N; E! u
{
' ^; r/ X1 p. o2 m5 f  return (UF_UI_SEL_SUCCESS);: m& ?8 C/ {" y2 D  _
}# F6 e& n: d: b) K3 s
else
0 X7 B/ v# W8 a. J& f {9 Z1 a! P% z4 o- B- n' O
  return (UF_UI_SEL_FAILURE);" g  f  _: y8 }, X+ z
}
: S1 x. U: E0 D6 Y4 n6 F) G}
9 Q1 \+ ]" X9 W, L+ w/ p& \% |" U1 Y2 K8 z

* g/ l& a/ s/ r2 lstatic void Create_Center(void)  P0 j" j( h& @: d# }1 E+ B
{$ `/ _3 u  d; d" q, C1 `4 y
        tag_t user_wcs;
# B! H7 J; p+ g8 y+ ~/ m6 y        UF_CSYS_ask_wcs(&user_wcs);# U8 Z% j9 f# F( A4 u! m  v- V
        char cue[] = "简简单单:请选择单个平面";
% j5 x2 c+ |- M1 P5 w        char title[] = "简简单单:对象选择对话框";
' n, Z$ X' L! j' v9 U6 l( a int response=0;& ~5 ]6 i" x; T- }7 G
tag_t object;
0 g3 \) ?! o* ]% ~9 q; S int count=0;
2 g" S2 o5 V* Q( n2 z double cursor[3];
. j7 X: D0 E  D( c, p( Y3 {/ X tag_t view;  ?' Q, @6 a. {+ X7 f3 Y
l10:# g9 r0 b! x9 ?& d/ g/ g3 g; P
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
* T* ^& N! s/ n5 k if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
3 H" v8 E) z6 }, ^" | if(response==UF_UI_CANCEL) return; //如果点取消就退出
$ P8 D! _4 Q+ F( e! r UF_DISP_set_highlight(object,0); //取消高亮显示5 [$ L; l0 [/ c! g( ~* _# b- a
. g5 F# {* u* v$ V+ B4 [
  int type;0 r3 R3 i  B) S
  double point[3],dir_z[3], box[6];% E$ M/ I; ~3 V; i& `7 B
  double radius,rad_data;- F$ T- f& j. A' z5 g
  int norm_dir;* J5 }* c  H8 t" ^$ I! K
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向. M2 N3 L* F1 g/ k

$ ?* o5 s6 ?8 e: z% M% n- i; l  w, q. V7 U# z. w- ~8 ~, A6 `
  tag_t matrix_id;. ~7 C- O8 K2 z: S+ f5 A9 j
  tag_t csys_id;
. u( b4 g) b- q* a' \6 O  G  double matrix_values[9];# _; E& u1 \, O7 _& Z6 \( W
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID; ~) Y" {2 T7 V, y% V3 i
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
8 X- B' q4 A; H! q2 H, y) ~; N% a  if(norm_dir<0)        //判断面的法向是否相反8 W5 z. l+ a3 F, v
  {
$ c' J( d6 {  c( d- `; T, I; R6 g' \   matrix_values[3]=-matrix_values[3];" P$ }9 C$ r3 H% j6 z6 w' {. q
   matrix_values[4]=-matrix_values[4];* z. y1 j" i4 w. S) U
   matrix_values[5]=-matrix_values[5];
0 X3 |2 d. ]2 j7 T" d   matrix_values[6]=-matrix_values[6];
2 }% b' w6 l4 r) s+ e* i   matrix_values[7]=-matrix_values[7];( U. z3 [4 l. |3 P* j
   matrix_values[8]=-matrix_values[8];
2 R9 A  G* p4 V   UF_CSYS_create_matrix(matrix_values,&matrix_id);
) X/ s3 R+ u% Z7 N% I  }
9 M4 i2 W2 a- O' c; Q+ ]  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);! z7 c7 k, ^0 [4 B% [6 l; g
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)9 X6 X* G5 [* t
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)! V% Y' E1 w5 s: }0 Y/ W
/ Y- G7 W/ o5 l  z1 R, n
        double boundingbox[6];8 `4 F" R+ P3 r; B
        double boundingbox2[3][3];
/ i& H: {7 ~% i. j0 Y- `        double boundingbox3[6];: x1 a+ ^& x7 f% p0 B
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
$ `/ _+ x0 N- I/ Q" _
' u# f9 k) E/ c9 g: J        if(type ==UF_cylinder_subtype)
+ _" v2 _) k% w+ l8 b        {
: R9 t0 w8 y2 p/ I4 l4 m0 |                double cyl1_pt[3];7 N. o- R' G3 i# y
                tag_t cyl_line,cyl_pt;
4 ]$ m4 g8 l, F/ d" l% ^* e                UF_CURVE_line_t cyl1_line_coords;
1 I% h- t1 K! `8 j2 }  J; s                double WCS_pt[3];% K3 o$ V& y! D; E7 ]- }% [  O
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs9 P1 |9 Q. C, }+ o* Z3 i
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
9 O( C6 C) ]% b9 O# U                cyl1_pt[2] = WCS_pt[2];
* @+ l1 V  ]; m) z0 [# Z( A
' Q6 x7 f2 C0 x3 N4 c$ i  p' {                cyl1_line_coords.start_point[0] = cyl1_pt[0];
7 m1 q6 Z$ [0 y! N9 C                cyl1_line_coords.start_point[1] = cyl1_pt[1];
. Y$ |7 U2 M, D                cyl1_line_coords.start_point[2] = cyl1_pt[2];
. {( d6 d7 b- T+ U
2 D, d/ `& d# ?                cyl1_line_coords.end_point[0] = cyl1_pt[0];
$ W3 N0 X1 }  i/ d                cyl1_line_coords.end_point[1] = cyl1_pt[1];
( m! l/ {0 F8 X3 D6 @; _                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];* U; j! K/ S7 r" |- R% D, V( Y
4 Y) f2 R# T/ y! m* l6 ^* N
                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 Y) t3 h, r7 Z5 k  Z) @
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标! n, ~2 c+ d( C8 a" V. V
               
& N! P+ h) }* b                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);* x. p- Z7 H& M1 }% e; J' b
                UF_OBJ_set_color(cyl_line,186);, c. ]1 {) [6 M( K
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
2 m" Z) X& b& j5 B1 X- |8 ^3 t7 Q* D* Q5 }6 ?& P: P+ i
                UF_CSYS_set_wcs(user_wcs);) B) S% T/ t+ E: d2 ]" b( |
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)# Z8 Z# |1 c$ e; {7 i

, F3 b2 d5 k' b. a                goto l10;
* a4 k% _) }. G        }
( {5 f- O- ?6 U3 T* L- N; a1 y! I. W5 \3 X: s
+ S; c/ S# ]2 K% ]! \
        double WCS_pt[3],center_pt[3];
/ O9 x* ?( m+ e. k% H$ U4 w8 N        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;: C& o5 L# B" [/ f6 V9 \: d
        UF_CURVE_line_t Xline_coords,Yline_coords;
$ `) |0 z" o* j+ X' C0 ]! O        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs- M& |1 {2 n- E" ?! A+ v
        ! Q; g! `  ~" n& s
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;, k- b( v; i/ u1 X$ z
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
1 o" E4 M" K$ i# {% b# t: h6 c        center_pt[2] = WCS_pt[2];
0 W2 ^0 L) }! H- R  t8 E4 k: }, v4 }9 M" B3 l. q+ T$ I- Q/ |

- O+ z" z' v6 |+ k        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
  \! C' j# j- L+ l9 l' y5 Y        Xline_coords.start_point[1] = WCS_pt[1];
, {9 o6 D* d: \: E2 P# X9 b: R        Xline_coords.start_point[2] = WCS_pt[2];
! W' J, [6 O* `2 [        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标! p' p9 x, i1 P: @$ Z$ [/ H0 P
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
2 F3 k  P1 Z  q) l" r" x  s7 Y$ g4 p; x
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
5 q  ?" Y/ c  X; A5 t  y! }" t        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小9 ~# o; ^( {5 ^7 r# {7 A
        Xline_coords.end_point[2] = WCS_pt[2];  e3 |, s' h5 r6 B( B" j
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
( R5 }" d  I  u" J9 M: y7 x" V//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);% {$ }! J1 t/ k
3 g2 z9 P/ T% `( f( Z% O
        Yline_coords.start_point[0] = WCS_pt[0];" C; @) N7 @2 K& P& [2 @) P/ H3 j! Y
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;1 T- O- ]/ y* |3 A" n
        Yline_coords.start_point[2] = WCS_pt[2];
" W( D4 Z* w  u        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标7 a$ l5 F" z6 z
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);6 G3 q, W! n) Q# l( G
; r2 E3 ~8 }1 O( t# T
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
# o- n3 z6 f& g        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
: g4 R+ ]4 i8 h2 t$ V0 K& \  ?        Yline_coords.end_point[2] = WCS_pt[2];
: ?" ?. A2 D' b: s+ g        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标+ H% w( A" L0 W  U
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);( S# T5 D1 a! ^3 w) D/ `2 N
        6 W4 }' E* ?1 e. e
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
& O. d1 }1 s" [& d6 F! f        UF_CURVE_create_line(&Yline_coords,&Yline);
& o; R. v* s+ K0 ?& T2 D8 l        UF_OBJ_set_color(Xline,186);        //设置颜色
8 V  E. b8 b* C9 ]        UF_OBJ_set_color(Yline,186);: u, L2 a$ G6 b( Y: c7 [/ f- a
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型1 {! B; c. ]" `/ g( M9 R5 K, Y
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型# {9 w% |8 ~/ Q6 h7 y" I
% r6 X6 j0 ~# i' ~
        UF_CSYS_set_wcs(user_wcs);
9 p: t1 D8 o% V: Y) P# q7 b* v- N        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)6 R$ ^! ~  L; L: w. i0 k
        goto l10;/ k( ~- X2 q; a
+ k* l0 V3 ?2 ?2 n) u, @% I
}3 V3 C4 g! W5 ~8 E" \

9 C# O$ q  i. ?+ T6 }' k9 D( ?6 q* gextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
7 W3 b, P3 v6 q! O8 a$ Y{
% a( g8 J4 C8 G    /* Initialize the API environment */
+ `/ T9 l9 M! B* V  U    if( UF_initialize() )% @  |" r& f: l$ a6 ~9 h1 G
    {; d" j  c) g" R5 ?$ l
        return;
: F2 y5 S9 H* r, N! H7 h( O    }6 Z; W- u1 O( ~. B+ V7 P9 O
& m; L1 X' r$ ~3 f7 A
        Create_Center();
! J) Y" r# {% o( d$ x
# @' G' Q% t$ Q" F  u7 q5 m. K    UF_terminate();
+ y  h6 `) Q7 e}
0 U$ t. k3 n: z% D- B9 C  r! x1 T* R3 U1 c# \: z. D

- J) b1 V" n' T1 ^' Pextern int ufusr_ask_unload( void )5 |; I1 u2 P$ b; K5 ~6 s5 `/ u2 d
{4 E  d+ w: F0 X- j1 z: O
    return( UF_UNLOAD_IMMEDIATELY );
" N3 c2 s1 C/ \: {' l}5 z" B; I) ?; O, T, A9 _
: V; T& z, X1 R' h" m2 d

4 g$ A& l" H) R' S  |4 E/ _. t7 \1 z: \  D+ }% E/ Q% b2 b
: o; W' ~4 x  l
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
& Z  y8 y. ^9 k1 Z% }3 @& @呵呵,终于写好啦

: v  u8 F. M) k1 t不错啊  
上海点团信息科技有限公司,承接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
  L0 s5 `+ }9 l( U( s老师多多指点才行
/ G1 H' f* \: p  A1 l
后面把 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二次开发专题模块培训报名开始啦

    我知道了