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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
9 e/ q  p1 W( q7 N+ U
#include <uf.h>& T/ E5 S* P* `
#include <uf_ui.h>
" {! L0 I+ M+ K0 {+ k" L, T#include <uf_exit.h>
3 {& t$ U; i4 t9 |& N: e+ E- N  B# Q# `# b0 N5 e
#include <stdio.h>& B1 \0 L1 ]+ X- }$ S
#include <uf.h>
; S8 F1 t  d" M! J. [#include <uf_ui.h>3 h7 m+ D, f; h3 y1 y
#include <uf_exit.h>1 U& I- X. t  |
#include "uf_layer.h"& _% n& {. u' X% k3 [: o/ w
#include <stdio.h>5 w0 {2 j# g" T8 |
#include <uf.h>
! m- B2 M( n# j& L$ k) X( q. x#include <uf_modl.h>$ v0 U" J! |5 p
#include <uf_curve.h>* b) W! b$ x& x. W6 a' J
#include <uf_csys.h>6 z8 h5 ~( Q9 h* l9 s' F" ~3 \
#include <uf_object_types.h>
+ @1 D/ T! M4 ]#include <uf_ui.h>
8 D( f  h; X$ u9 ?- Z% `& t" w. d#include <uf_part.h>
2 ^& O5 N9 W' i5 G#include "uf_obj.h"
& G9 t" G& Q- J) u2 Z#include "math.h"# M/ Q5 ~' V9 I. Q, W3 J

! j# E6 P1 A3 G+ O' kstatic int init_proc(UF_UI_selection_p_t select,void* user_data)
1 c" {9 `1 {/ o* C7 N) o{( z- A4 q, F0 s$ F
        int num_triples = 2; //只选择一种类型
# m  X% S4 E2 r% Z9 p( W2 F  d: U        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
- b* R2 v* {6 s+ R                UF_bounded_plane_subtype,1,0};
* q) Y: r8 ?1 W/ u, D) f if((UF_UI_set_sel_mask(select,6 O( M/ N% W& K. u% Q
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
2 `, B( b& c) S( Z" J1 P  num_triples, mask_triples)) == 0)
  }$ }5 _9 n3 \# v7 M: v1 C. w9 Q {3 T: N3 @! t7 ?- ^. X
  return (UF_UI_SEL_SUCCESS);) @1 U, f+ _2 |/ y% ^1 Q
}
4 G) A/ t* N* E else
, U# T% S9 P" J; U" [8 a5 P {
; m& N/ t3 L+ U  return (UF_UI_SEL_FAILURE);# `' u$ V1 ^$ K0 ]3 n
}
* f7 L6 R) c& N& T}, d& s. p* [$ `: t- }4 y  T+ P4 U
+ _6 E; O; s( O( x/ m- K7 P
' i8 V5 @: p5 V' Q9 N5 {
static void Create_Center(void)
, H' \" [+ x  x{
$ v5 u9 B2 x, p, K; k        tag_t user_wcs;
- p% g8 o7 P% y        UF_CSYS_ask_wcs(&user_wcs);
2 N7 J0 e3 Y( T; S/ m* d. m% Q        char cue[] = "简简单单:请选择单个平面";; ^/ Y3 I9 c8 J3 I& c
        char title[] = "简简单单:对象选择对话框";
; f3 s) M5 g" G* e  ^0 _ int response=0;# `" z. N7 N2 s9 h8 O0 E9 i
tag_t object;
' Y' G5 W3 J$ L& k8 I int count=0;
4 E: w* C) `1 h) b9 M1 S) m/ k double cursor[3];( m. ?" r) N- Y' a8 ~5 L; J$ ^- q! e
tag_t view;
! r; x+ X0 \$ tl10:
! Y7 s% K2 H; M! N UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
3 r+ |: c6 J& F  w/ c* n& y& @ if(response==UF_UI_BACK) return; //如果点后退就跳转到L108 Z( R  B+ l$ q$ a1 g
if(response==UF_UI_CANCEL) return; //如果点取消就退出. \/ z, k' c: _% G" n4 `& p
UF_DISP_set_highlight(object,0); //取消高亮显示% @5 r: G2 |0 S1 H6 D$ r$ P
. Y) a+ Y! Y  [5 [
  int type;
, W  ?' V  [) D' ]. e3 ~. V  double point[3],dir_z[3], box[6];, _6 i: h9 d! r; _9 \+ d" h
  double radius,rad_data;
$ \' u4 L# W: X  int norm_dir;$ P3 G( g; D& b$ j, Y0 R% b
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向4 Q0 a4 C) p$ G* e/ x

, R0 C1 X4 n9 j) l+ j5 M/ ]6 ]2 T1 i
  tag_t matrix_id;, i& T% z* j) l+ o/ p
  tag_t csys_id;
, b2 d& f- P5 X- M, h& Z  double matrix_values[9];
. M2 I, ~* {: P  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
3 S2 u6 q/ Y: [* M# c* X4 p  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
$ l/ K% T" x0 K6 P7 H3 {2 {* L  if(norm_dir<0)        //判断面的法向是否相反+ a: G9 E! b$ J# s* ?
  {1 U$ V* U% P+ k+ `2 x: z
   matrix_values[3]=-matrix_values[3];% i3 `! d1 M9 T. g( [: Z
   matrix_values[4]=-matrix_values[4];
. y1 `& t: t3 ~6 B   matrix_values[5]=-matrix_values[5];9 t! W6 b% h7 H9 [/ m
   matrix_values[6]=-matrix_values[6];& ^" r/ |. U, C+ Y, G% ?3 n1 a+ q
   matrix_values[7]=-matrix_values[7];
3 \( x$ y' D* z8 }   matrix_values[8]=-matrix_values[8];
. d9 g6 I. q7 {& Y3 z$ U- X   UF_CSYS_create_matrix(matrix_values,&matrix_id);
' M1 x5 e) B6 v0 r! @9 z+ @  }
: W! t5 M" \; e0 U5 c3 J  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
6 }% k1 g/ G# g  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正): g$ X' W7 {9 i9 ]/ q0 o
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
) S+ e) W( G" p
; j0 d/ X8 v& m        double boundingbox[6];
; T9 M+ }8 v3 v/ t5 o1 B6 B7 v        double boundingbox2[3][3];
# s* [  v& x7 Q& E- v        double boundingbox3[6];/ r" E' @" b/ L6 [1 r6 c/ S
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);5 S; P9 H# T5 I( h

5 R- s8 o8 i+ m* d$ E        if(type ==UF_cylinder_subtype)1 N/ \" |' @! g# ~" r0 ~) H
        {
# l0 N4 i, {( J# m7 i                double cyl1_pt[3];  R' P) j* u( w+ I5 ]% Q( C
                tag_t cyl_line,cyl_pt;& l- z4 r; P: {* a3 ?
                UF_CURVE_line_t cyl1_line_coords;- [* G5 @0 l) u3 t" z/ @
                double WCS_pt[3];3 G. y. x" z' p  ?( R1 S
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs/ m! Z5 H: F5 C
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs* Z+ ^, m$ Y/ V
                cyl1_pt[2] = WCS_pt[2];
: M) z0 v! s2 F3 }! q/ r' a$ V1 w6 h9 N9 E
                cyl1_line_coords.start_point[0] = cyl1_pt[0];; }7 M; R: [. W
                cyl1_line_coords.start_point[1] = cyl1_pt[1];
- {6 o& b- c6 X  f9 X1 ^0 e2 h                cyl1_line_coords.start_point[2] = cyl1_pt[2];
" f: F5 W+ {5 N* F8 L9 h
* U& {7 {6 Q' P8 c+ I. T, c                cyl1_line_coords.end_point[0] = cyl1_pt[0];9 m/ Z) J) ?4 Q9 J2 }/ W" X) n9 T
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
( c9 c3 {, h6 l                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];! R7 t- x+ A& D. B1 S

# u6 B7 Q+ J/ s5 i                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
3 ?# o! d1 ^1 [% ]2 i' @6 [                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
( X9 P1 ]$ g7 O, {2 V! P                % ]# p6 X, {  t( T" @
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
) u# O% w  k3 n* z. z                UF_OBJ_set_color(cyl_line,186);2 p# P. q4 x1 g& w6 C* M
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型( V; S3 _! t5 L. K# x0 y1 y
# \8 H2 W0 w/ n, q- [8 @
                UF_CSYS_set_wcs(user_wcs);# J( l. X! g0 ~5 p0 @
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)# j9 f. V/ x, l$ y

3 R. I7 d- r9 x/ w* x- Z  E: u                goto l10;
5 A7 E7 Y- w, U' H$ i: x4 I        }
( b4 `  G) S9 G6 }
  y. c# G" N/ C2 s! S- x7 i. s, N1 H0 }' h
        double WCS_pt[3],center_pt[3];
' U/ v& L5 y* P1 N        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;1 N# B8 ~- A$ {: t' D& x: E
        UF_CURVE_line_t Xline_coords,Yline_coords;+ O* v6 v% M, n: t* h; v: z9 h& R
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
8 a: x1 J: F9 Y5 l; k" G       
" F( @5 G1 w8 z( S2 u        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;) ^* B* _  ^' Y5 t& d2 J
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;  Z, E0 t- Y! h+ m4 N( J
        center_pt[2] = WCS_pt[2];
) [9 }) u7 G' w5 g5 a+ q  ^+ @" w
6 f  Q* ]7 m/ O2 R1 U3 q/ B9 v
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/28 O3 ]. B# q8 @- K8 [1 e4 u2 i) u
        Xline_coords.start_point[1] = WCS_pt[1];% ~' L) ^2 l: i  y
        Xline_coords.start_point[2] = WCS_pt[2];
7 q: z* p/ ]& E8 x% ?3 M        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
+ {" j$ b) [4 a1 u5 S$ v: d  c//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);4 d  p7 V9 Q0 P" c% P; b( S5 n2 ?
6 }; _% _& Q5 r
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2. B- Y/ ^3 Y/ N3 e* @3 H' Q" p
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小. U( q) y1 o- @  }7 {7 e
        Xline_coords.end_point[2] = WCS_pt[2];( H, A7 w" n: y1 ~6 \5 {
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
% z9 x3 J( f- R( `  z2 s//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);/ ]0 C2 i, G( K$ ]; D! m! L6 C

" S( i( v! }5 a/ B        Yline_coords.start_point[0] = WCS_pt[0];
. p1 ]2 y5 C. [) y, {        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
9 _  @' b+ c/ b2 }5 ]2 K        Yline_coords.start_point[2] = WCS_pt[2];
! i0 e& @0 h$ l, Q6 a- {0 g  p        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
, j! X7 Y2 [" ^, E+ L& ^1 W# X# F6 A+ w//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);* ]3 d7 U# ~; s3 b1 `, P

% Y% H% z; ]. d0 X$ k- v        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小. B6 k6 {: ~! y" u
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
* F! I! M1 F9 d  i        Yline_coords.end_point[2] = WCS_pt[2];
2 u) ~3 f& e% \        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标- a! j" E" Q' z7 E/ R  q7 T
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);# \% z* H: b# s; v. N
       
$ S/ v/ m) n  r8 N" t$ c        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线( C; D0 H- X9 ^' l' c! C
        UF_CURVE_create_line(&Yline_coords,&Yline);
5 w0 k/ r# }4 J0 S8 m  y0 S& u        UF_OBJ_set_color(Xline,186);        //设置颜色
; c+ o) v0 |. y. ^8 G  H* L        UF_OBJ_set_color(Yline,186);* L; |+ K' ~) k! I+ Z/ j5 i. i
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型7 _! q6 h5 [; M: k
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型6 S. B; |- J& Z# n" y2 c
: C( l% F: J2 c+ k: ^
        UF_CSYS_set_wcs(user_wcs);
0 c( o+ _7 j, `* ^7 ^        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
- W, F& `# k$ c) L2 b        goto l10;
3 Z5 p( O7 O, G$ j* z9 s: o7 `8 v" Q8 ?* c( ~- ]$ W6 P9 h
}6 Q3 x- U% u) n9 Z. I5 a* m" [
" U3 z% |5 R+ }' U: @
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
8 b0 }3 q2 F9 B9 Q, U{
' U' @1 z$ u9 }  E- U8 i    /* Initialize the API environment */$ a0 x& q" x/ B) w5 I  i
    if( UF_initialize() )
2 g% U" ^# o: G6 b    {  |* i6 S' g8 ?# [9 W' V! a
        return;
% C& d. D8 R% t. G    }
! X! I8 n( ?: f8 D! D
" y8 P& P, @4 y        Create_Center();" O/ `: \# u+ ^

, t2 m, @3 s6 x) |+ H    UF_terminate();. e. m, i: o4 @, u+ R) E2 O) k
}
8 v0 Y, p$ d* s8 Y6 g
# Z( C% l0 q; f3 ]) F/ x6 p2 A5 z8 ]% w
extern int ufusr_ask_unload( void )' y0 N5 M8 b! K; n4 k2 b$ C
{% q  I4 K1 o, c  M& d% ^: d
    return( UF_UNLOAD_IMMEDIATELY );
1 k/ s5 q& N0 l# M  ^}* Q) B( w9 O+ ~1 b

9 U! q  l4 ?9 T# h+ P- l4 ?6 q( h# C1 ?! ]) V

& _- z; a" r4 u" F, u& f$ z  c7 U1 P+ |& r
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
* B+ o3 y8 M8 i, k9 Z( U6 L8 c呵呵,终于写好啦

7 T" M$ [7 l' ~! n& X7 ]3 X/ \不错啊  
上海点团信息科技有限公司,承接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* S0 X7 _& L. f3 A( g" [4 A
老师多多指点才行
- D: P) f6 S) K
后面把 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二次开发专题模块培训报名开始啦

    我知道了