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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

) ^, Q' i5 x5 N: y1 y& u2 V#include <uf.h>1 Y6 c5 X& L! U2 ~
#include <uf_ui.h>/ Q# ^7 k. }- u" h# i1 R1 W2 o% g3 H3 H
#include <uf_exit.h>
+ [" Q( v- V5 [5 X; V# w$ _0 {$ P& o2 t* Y( i2 O2 N( \
#include <stdio.h>7 c% n1 E' K; c3 s7 \  b
#include <uf.h>' Q! v+ B& ?# v; G( e- ?! N8 `- _
#include <uf_ui.h>
. z  }& ?& y8 N: K3 S7 e; I2 S1 _: w6 s#include <uf_exit.h>
5 N  O0 m0 s( \1 L0 }- V" g#include "uf_layer.h"
! w+ h( ~( w  o6 C  a7 _#include <stdio.h>7 v- ~4 k2 F8 b! J
#include <uf.h>
( O6 b0 S. ?; E7 E2 ~9 V* {( N#include <uf_modl.h>6 `- y" A+ D% N7 R& T$ P- X
#include <uf_curve.h>
% I/ p3 M, \: L* k4 ^5 d# o: D#include <uf_csys.h>
) X: R, n+ b: F5 o  b, f, ~, D) S! W#include <uf_object_types.h>
# x. R* _. K- k4 E' m! f#include <uf_ui.h>
* h. j8 P* `& G9 X  z( o#include <uf_part.h>
) i8 Q) s# ^+ Y. u#include "uf_obj.h"
  L3 ~, ?( Z- B# S5 ]#include "math.h"
1 @! z+ l% W" i% F$ S$ B1 I9 V( X+ m+ ^4 Q
static int init_proc(UF_UI_selection_p_t select,void* user_data)
& i$ s  q4 N7 ^) ^{# N7 k- \1 I2 [; }9 d/ u$ a
        int num_triples = 2; //只选择一种类型- N3 E, d  b- g. x! ~* c1 k
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,) `0 R1 ^+ I! Z$ H1 E
                UF_bounded_plane_subtype,1,0};/ K" h* s" n0 t" X* K3 V& I+ k: L
if((UF_UI_set_sel_mask(select,+ S8 E) G1 V* h( Y7 [2 D) a
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,' T$ a0 f2 g, [; R1 i1 U3 V: M
  num_triples, mask_triples)) == 0)* n4 c! n" x% d" b
{
8 h) C# e7 A; F: I  return (UF_UI_SEL_SUCCESS);, H+ ]) C9 F, s" S
}
8 }+ F$ N- f9 a/ ? else& H9 E0 o/ c1 _
{
: w1 K' W+ Q- P" u  return (UF_UI_SEL_FAILURE);
$ [3 }: X$ _  O+ \: s }! O/ z  _& ?6 c; X
}
* n9 ]; m  a' y
% h1 z3 T1 _# z9 l0 u
5 o- U0 ~, S, z  Gstatic void Create_Center(void)
' I9 j# N, ~; x& E8 j- e{
  Y. K( q6 s- x- t# h: P3 _8 y& S        tag_t user_wcs;2 g: G! }4 g0 w* m: Q
        UF_CSYS_ask_wcs(&user_wcs);" z# r7 H+ C6 W' L% ]  k& f  d7 J
        char cue[] = "简简单单:请选择单个平面";
8 k6 ~$ {! `% ^& N9 H, l! d        char title[] = "简简单单:对象选择对话框";- E2 N) j7 v% M
int response=0;
/ c* x! e3 ^7 [3 ?4 d0 O- R. B tag_t object;
6 {; Z" d. F: i6 F int count=0;% X* ^' t1 i, B. {: S5 A
double cursor[3];( S0 \+ t) d9 D$ |; d
tag_t view;/ K  o4 G0 j, h: }# h
l10:% M7 i/ @: a. D* O
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);" Z# n9 o+ k. [8 o) D
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10' b6 {( ]# w+ _9 H' M
if(response==UF_UI_CANCEL) return; //如果点取消就退出
3 m9 B  m4 |3 U/ n9 ]7 ~$ G7 Z UF_DISP_set_highlight(object,0); //取消高亮显示
4 A, H8 n9 _" `: @2 S! y4 n2 y
  Z; Y+ ]4 E8 C% _& M  int type;( F. G7 Q/ _) a* ]  ?0 y; ^0 o( m$ {: r
  double point[3],dir_z[3], box[6];
# A" d. l& Q& ]$ y: Q  double radius,rad_data;
9 {/ t. \. V, t+ Q9 U/ e' e  int norm_dir;9 g9 c! U7 Y( X, S- |3 }
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向+ F4 T, V% ?3 Z! u! l5 G
: p) C0 u+ C4 S7 |" h
3 X% e! H( N" `( }+ G: h: \: f7 W
  tag_t matrix_id;. e6 I- c6 P) L0 n' ]0 g5 K! q) H
  tag_t csys_id;+ [% _3 X! X2 o3 \
  double matrix_values[9];$ a! I2 M* Q+ y9 f0 b3 ]
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID- g$ c/ L+ W1 }- r0 r& O, V, J" u
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values8 J, Q) p% ^! @: S. i2 U2 v
  if(norm_dir<0)        //判断面的法向是否相反5 S. l4 m9 y, k) T" `
  {0 S; ~# g9 ~( h0 c* J2 |7 X) e
   matrix_values[3]=-matrix_values[3];8 C# @; g( N! ]' R9 U: W. ^
   matrix_values[4]=-matrix_values[4];
1 i. U# q* |/ c6 p( @+ G; {$ C% t   matrix_values[5]=-matrix_values[5];
; j# ~+ x  ?3 l   matrix_values[6]=-matrix_values[6];
- `# j# s; M3 ^- Q" F1 }   matrix_values[7]=-matrix_values[7];
# x3 X5 D7 s& k6 b# q+ _' E" e   matrix_values[8]=-matrix_values[8];
$ }: E0 m0 s( G4 e* f6 o3 x   UF_CSYS_create_matrix(matrix_values,&matrix_id);+ i8 c9 b& g# M* E8 _& ]
  }. z9 F& {$ ]7 r5 ~: H9 w
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
  C4 k, d8 k! |7 E8 o. e9 N  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
: R0 t# `5 w/ G* x/ U9 R UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
% Z4 O5 P0 o* ^
9 G, \  f+ m' |9 W4 k# Y        double boundingbox[6];8 R) o2 ?$ s# S
        double boundingbox2[3][3];
$ @. n$ F  A5 F1 f- }        double boundingbox3[6];
0 D9 m" M3 h0 F* r( [/ x        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
( G: L5 i4 P# u# u
! G3 j/ c' c7 e2 s- L' |        if(type ==UF_cylinder_subtype)- C# ?5 b. w, R* W
        {
) Y8 [& S# C* `* @1 }) E8 b                double cyl1_pt[3];. [0 \. S; `; S
                tag_t cyl_line,cyl_pt;
) G+ S" J1 M9 x6 J                UF_CURVE_line_t cyl1_line_coords;
" F7 ~7 T; F% c' |1 T: C; J                double WCS_pt[3];7 x9 v# U- a8 s$ D2 {
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs4 L/ a( A  }; T* E! D
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs8 ]1 [. x9 T4 E) K6 M( Y, t0 o
                cyl1_pt[2] = WCS_pt[2];! S& a* i7 I2 V9 h* X8 L" O
  {9 s. e7 d  a/ d' u: \( b: j
                cyl1_line_coords.start_point[0] = cyl1_pt[0];& y8 ^5 X, B( j! B  B
                cyl1_line_coords.start_point[1] = cyl1_pt[1];; C6 p# w% ?0 q) L  J* b, V
                cyl1_line_coords.start_point[2] = cyl1_pt[2];  X: g5 G8 z8 G+ G9 l4 W
$ H4 A& X: A9 |  c" g
                cyl1_line_coords.end_point[0] = cyl1_pt[0];
4 O8 W/ l5 F7 V) d; e; Z                cyl1_line_coords.end_point[1] = cyl1_pt[1];- Z4 F6 T) V) }0 x6 c
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
: V5 x& O3 D; l( H, B& p/ `" e/ @' V
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
2 f! f2 Y) t; Z. l9 ]8 J2 b2 u                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
- E8 ^+ P3 v$ d                & A4 z: l7 @* ]4 W, a
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);/ j7 {6 F. [2 i4 x4 Q6 V
                UF_OBJ_set_color(cyl_line,186);; r7 `, F% b! B
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型8 k# D% d! Y6 C
8 _/ S& d. T7 E5 w( p0 D6 J
                UF_CSYS_set_wcs(user_wcs);
& X5 ]- [& t9 b  i8 L% {                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
' h$ W/ i* J- r* ^
  C) w+ ]7 [' }" @$ H( i  ?' a8 Z7 {                goto l10;
/ [5 ?+ F/ }  u; N/ u9 N        }
- w- k1 r7 ^8 ^1 E% I7 n# ^* l6 e2 N& {

8 h# m/ A/ |9 L: l- U  ]& ^3 _9 E9 d        double WCS_pt[3],center_pt[3];( z* s: h+ z9 g( Q. R
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;4 e% d, I: ^% ^6 Q' V: ^' L
        UF_CURVE_line_t Xline_coords,Yline_coords;+ S4 @5 y" b: L7 y( o. v( k! ]) O
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
* _& o/ J( B1 ~- A3 D$ h5 a# S       
6 ^- Y9 X% Q& P4 e5 k        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
' n' d( j: D7 h9 M6 F/ Z        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
0 {( ]$ `2 Q/ r6 b9 \5 D$ i9 T% t        center_pt[2] = WCS_pt[2];
0 c% y! T, N8 t: F! H. p- D' ^; R% f0 N

9 ^* O& w9 P, v6 s; i2 Y& y3 S. y        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/20 S' \+ G* B$ i
        Xline_coords.start_point[1] = WCS_pt[1];
4 ~; ~# L$ @$ o7 V4 L        Xline_coords.start_point[2] = WCS_pt[2];
: R, s, ?# q& R+ Q        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标& z( n1 o6 k: `: a  {
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);* L& @, ]- X" q' T% Z& m
% s7 r0 D2 o" g. L1 z  N2 j! V" V
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
; G: \" k5 |; m, R/ M! t1 I# r1 N        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小" f1 m4 Q# x7 |' \
        Xline_coords.end_point[2] = WCS_pt[2];
$ [$ T; q; c/ z& P& r0 z4 I        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
4 I; R! z' l3 L7 e3 l//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
: z) l3 g& |7 _3 c9 ~- u- F* i" Y6 ?$ [( f
        Yline_coords.start_point[0] = WCS_pt[0];
2 P0 G' ]# e8 ^4 z. k, o8 q  W        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;! I  H1 c, `; ^' `. k+ g
        Yline_coords.start_point[2] = WCS_pt[2];
( d) [$ G( }$ r! [        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
/ V* C9 Q2 g( q//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);% U& s, [. n# U( w) ]" b3 X* U# u

- X) T7 H! g* K2 Y        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
( Y  v( G0 x8 ^) ?, j" k        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
, z8 ]4 S1 b1 S! e, K% B: L- M4 m        Yline_coords.end_point[2] = WCS_pt[2];9 w$ e; x; S1 p! Q9 V" c
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
' E! O/ e- n' q//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
8 I, ~- s6 z! A" U* T, {3 T       
; u/ e7 j, ?& z; U8 u1 Z        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线( X9 z; @& P5 \* U' q2 \, D. D
        UF_CURVE_create_line(&Yline_coords,&Yline);
1 z, t) l2 |, n, F9 e        UF_OBJ_set_color(Xline,186);        //设置颜色4 x0 s* ]7 R* c! ~7 D# h
        UF_OBJ_set_color(Yline,186);
! M$ N9 [1 @& W. Y4 M        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
3 y! \: h$ |# X' P        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型5 X' O9 [! Q! ?. x1 y& c& G0 E; N
( }2 t6 ]2 ?- a
        UF_CSYS_set_wcs(user_wcs);
, k$ i2 s" l' U4 M4 s/ V2 [7 x        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
1 Y+ r7 q# R* A4 c* b$ ?        goto l10;2 m1 f3 F3 [& b6 a+ A$ C

9 J7 \8 D' P/ A3 K! o2 f- J}
3 `" Q8 p) r' B, R- P+ W* q/ [6 R0 H  ^  y8 S
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
% D% H# O" u: q; r' e; @' c9 S8 u{
7 {! k1 m* f: |& U) x, J+ H    /* Initialize the API environment */
' y) v9 \" J; p! h6 v( j    if( UF_initialize() )
! T# n3 ^3 D' J: P* l1 x1 x" c: \    {6 m# L1 Z$ v0 J; p0 X& `& J+ j
        return;" Y3 o0 c5 C, C. y
    }
# x3 L( t! Y" Q5 I8 u6 ?4 W
2 p" d! e# p5 {        Create_Center();6 E, u% S6 ^. ]& k8 J

1 r% o' |! c; N' Q5 I- H    UF_terminate();7 g; V7 I7 _8 Z  Z3 `
}( A# P: Q, D; u3 k2 n2 c, t9 c! Z$ Z

8 A! G3 _  u; U& D. K# s7 L* |& v8 W, |
extern int ufusr_ask_unload( void )9 C. `+ P: V6 U" H' A8 a- L3 y8 ]9 M
{) S+ {: x* o- t3 Z: D& X$ h: N
    return( UF_UNLOAD_IMMEDIATELY );
' N0 R  n, N$ ^+ v}
  Q# M- a) T  p. Z
$ k0 \0 L9 U4 U$ K' D4 t+ p" b7 Z* Y2 ^( p* p  m$ ^

" W$ b/ t- E" K
7 i' `1 g  n9 R7 S
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. h7 ]6 i, B* s5 m  P- d7 g
呵呵,终于写好啦

5 o5 t- i0 ?9 {0 l' 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:018 N# i& u- U5 ]
老师多多指点才行
. }. }, U' v5 }$ m5 w' O  u
后面把 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二次开发专题模块培训报名开始啦

    我知道了