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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

( J% Y# j; b8 [+ c) a#include <uf.h>6 k0 w$ a; R; ~. M. T
#include <uf_ui.h>! _* C$ p& M. V3 K& t) `7 L
#include <uf_exit.h># _% |6 N1 s+ [0 @

2 {: e, t' n0 i#include <stdio.h>9 T, s$ `$ M. i! ?& d
#include <uf.h>: i  l- N7 Q( o0 k- ^; ^$ z
#include <uf_ui.h>
( O  U7 U# n% L0 |, i4 v/ v# a#include <uf_exit.h>$ U7 a7 {% h. R9 O$ _
#include "uf_layer.h"* V, m  I9 x9 M
#include <stdio.h>4 _' R; `0 ^. X% t( D
#include <uf.h>
) {. U! [- P8 X+ ^" S& Z' ?#include <uf_modl.h>
0 h) |& M5 l( D* w. ]#include <uf_curve.h>
* `1 |5 s  y" y#include <uf_csys.h>
' j5 `) l" V8 P#include <uf_object_types.h>! u: x9 d; x4 k- I: v( j3 g6 q/ K1 ^
#include <uf_ui.h>
1 P/ k7 H8 v2 b3 d  v#include <uf_part.h>7 h: d3 Q' A" `9 ?" U1 a4 L
#include "uf_obj.h"# w: R% E6 X2 s( s; x* {  i0 e
#include "math.h"
6 n# y9 @3 ^( g8 p+ @( d& m
3 ^- m3 m7 f3 G* m7 p3 Estatic int init_proc(UF_UI_selection_p_t select,void* user_data)
9 N) u; D. Z) X7 ]8 ]% F; U{
4 E0 ]  w. L" k& d0 Z2 k        int num_triples = 2; //只选择一种类型3 e- O2 ]. J( n( e5 c' g5 I
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,+ a/ K. }# I2 ]! c) z0 E" l
                UF_bounded_plane_subtype,1,0};; a7 P5 \1 e* P9 }
if((UF_UI_set_sel_mask(select,8 z; h( y$ U- Y5 x
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,* h* i% G- R0 h
  num_triples, mask_triples)) == 0)
5 G+ O: ?& f9 k( F4 u2 M7 z$ F {
3 x9 v$ h  T. z( t  return (UF_UI_SEL_SUCCESS);
4 {0 |$ E/ I. J: v; ` }
8 k& O( Z* {6 I/ ?# S% k8 b else
; _# L9 W# K/ E# m0 b {% q4 K4 }9 h. W$ {8 B
  return (UF_UI_SEL_FAILURE);4 m8 U6 @" [# A7 m5 E2 |& k
}
# a3 Q5 p) \8 s0 `}
! E, E7 |3 ~( M/ p0 q3 T8 U2 J

- A& P' E; x, ?9 {static void Create_Center(void)* L: |5 e0 T6 [
{
# x+ e$ R0 H0 Q+ O3 m0 A" n" L        tag_t user_wcs;' E5 I4 ^' G8 [# F4 \
        UF_CSYS_ask_wcs(&user_wcs);2 k! F3 b* F& V6 o7 k$ Y7 i
        char cue[] = "简简单单:请选择单个平面";, F% J( F8 l. O6 {$ [
        char title[] = "简简单单:对象选择对话框";
% X! _' g1 p) m$ R int response=0;
! h9 J: e: l1 {8 u5 [6 S tag_t object;
1 |; F* ]! x$ X* o! o# [4 m int count=0;" G2 v4 g$ w" G9 z2 ]' V8 N
double cursor[3];( W: P% @- S, @' M$ o$ M! C
tag_t view;
# t, l7 L, N. i7 w7 S6 Zl10:
! S% v  y6 h& W+ N; I5 g, k8 @8 { UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
4 H4 \$ b( w7 R( C* s1 @2 [ if(response==UF_UI_BACK) return; //如果点后退就跳转到L10! F2 ~( M- _# j: V" O* E
if(response==UF_UI_CANCEL) return; //如果点取消就退出
* g9 l" w0 e; b1 N! Q. M UF_DISP_set_highlight(object,0); //取消高亮显示  l: @2 j! R) E6 t" p

  @0 s  s. S. F7 Z" v) z1 X  int type;6 Z6 w" S% c$ c
  double point[3],dir_z[3], box[6];2 M; W7 o5 a; K
  double radius,rad_data;; t" Y! h9 k3 I+ s$ A
  int norm_dir;
, @1 K0 C# ?& D3 h' _3 y4 z  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
  V5 u6 G. A  o2 j1 ?
. R, N8 g. \$ d1 w, T6 w
6 n  i5 m: _" ?  tag_t matrix_id;
  }& {$ E6 ~: r* m% ]4 l7 F5 J8 d  tag_t csys_id;
  w8 x! S- P6 w7 w  double matrix_values[9];
" f. p7 m# @0 _/ \1 X& q/ n  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
9 [& {% @2 I. P0 k2 @- Q  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
( M4 s2 s, W/ V0 E  if(norm_dir<0)        //判断面的法向是否相反4 Q7 Z5 n% H# u$ R& ?; i, b
  {
0 Y  e1 ~) h0 q$ a, L& c9 m8 R   matrix_values[3]=-matrix_values[3];
$ ?0 J" k3 O4 e" m' m# I" x   matrix_values[4]=-matrix_values[4];# R) H0 }# X1 B7 i" i/ C& D' {+ c
   matrix_values[5]=-matrix_values[5];( C$ b4 P2 V3 {. g! O; \
   matrix_values[6]=-matrix_values[6];8 x6 l8 h- z  n
   matrix_values[7]=-matrix_values[7];
3 |( O1 c5 s* X* ]# E4 a! @   matrix_values[8]=-matrix_values[8];
! Q# p2 X; c  I; ^8 P  F, X   UF_CSYS_create_matrix(matrix_values,&matrix_id);
' G1 F# E% d& Q. z0 ]  }& b% w9 u# P% |6 z" h/ j
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);  B6 S2 R% y7 ^7 {' D7 P
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
9 y3 G. `1 a) h9 J$ R8 k+ P" K UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)* q5 F" |$ O( Y% e

0 B' `, N) _; A3 R# R' W        double boundingbox[6];
0 ?6 Y$ C* ^+ U: K6 [- h" c! ^        double boundingbox2[3][3];
5 [  L% s6 k( G4 B3 A# w        double boundingbox3[6];
, v; [% J+ j: R2 K        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);$ k( r, T; J; Z- m
+ Q+ K( B; y: q- q8 m
        if(type ==UF_cylinder_subtype)
7 Y8 H( a" h% n' u+ a9 b3 C& G  W        {$ w3 ]  [' x' Q, Y; d2 A  x# Q! o
                double cyl1_pt[3];: F% D! X$ u/ ?% z
                tag_t cyl_line,cyl_pt;
- p+ l- y4 W( ^& i, v- @" w                UF_CURVE_line_t cyl1_line_coords;
! q; @( D) d( n. y, g$ c                double WCS_pt[3];+ X! r0 J+ p4 o4 M3 R  P$ A6 n5 z
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
* M" H% U1 a1 i6 c- v; X                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
+ L6 P, p1 W" `0 I; y' c, I. d1 y6 F                cyl1_pt[2] = WCS_pt[2];
$ F/ z, z: P% Z3 l) v& o" R$ H, S
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
& `  T# A% @" Z$ L9 ~* `2 x                cyl1_line_coords.start_point[1] = cyl1_pt[1];
0 x0 x& Z6 J8 `; s( Q  m# r                cyl1_line_coords.start_point[2] = cyl1_pt[2];& u4 Z7 Y5 W+ X- N" S0 }' ]

6 l# ?/ B9 U9 e: f; A$ B                cyl1_line_coords.end_point[0] = cyl1_pt[0];3 Q4 n( |- `. k
                cyl1_line_coords.end_point[1] = cyl1_pt[1];2 E) Q- ]8 S# o5 l4 m* w/ B* |$ W3 s
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];) z" N$ U; G+ y9 N: }" f! b

- T! X! h  T3 g9 M7 K                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标" u7 B/ F4 m' z) _7 h4 b
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标/ `/ n4 S# _' b% ], j% V5 ^% M, D! _
                $ c* y& ]) m* y% ~  a! g$ t
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
0 s1 j5 t$ R# z9 Z# U: f$ J! R5 m                UF_OBJ_set_color(cyl_line,186);$ ], O6 P4 Z- r! _. L4 z) R- U
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
" I8 E5 |( e% N" G& f3 D8 F  k7 s5 y  Z
                UF_CSYS_set_wcs(user_wcs);
. e& q1 B0 [4 y$ u! c" b/ S- n3 J                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)+ a# U6 O- }3 A. l
, L) l2 e9 t, |+ @1 e. j# S
                goto l10;
7 u3 M# W3 p, E. _& C1 r$ c" F        }% Z9 u3 _: h* J5 O( a2 k; S

  h& H0 V+ C  H" j- s8 {% m# m! o) R2 g0 d
        double WCS_pt[3],center_pt[3];
7 N8 H0 h, P; ?5 a- }4 k        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
' x% y$ _- U3 g6 C# h        UF_CURVE_line_t Xline_coords,Yline_coords;- B6 {/ N1 ?. o' ]
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
/ l# \. g4 G/ S2 p! X6 a, C: H% m        - f4 F1 {5 S! B# L1 N
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;3 D  z  b/ L" a% w4 Z* o
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
; _$ w, J8 s# i. Q4 b$ J        center_pt[2] = WCS_pt[2];# U6 P0 \& c, d, ~

9 H) A$ |9 A$ v# b) y4 {+ Y  H7 G$ t* I8 x8 ?
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
; h2 S& s* p( A/ c        Xline_coords.start_point[1] = WCS_pt[1];5 I$ U9 K# \9 y, K: ~2 n0 ]
        Xline_coords.start_point[2] = WCS_pt[2];
7 @; e5 \, F' x! `5 J2 g        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
: y+ c7 ]9 O2 W3 K//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);* k1 K" A9 G7 A/ ]
" B1 d' q3 |1 g
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
2 c& \9 H5 y, m; b. `' _        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
6 T$ ~0 Z( O5 C0 S7 M        Xline_coords.end_point[2] = WCS_pt[2];
7 i& S& W! ~' [4 a0 Q) y        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标- @: W3 O8 Z9 @# k4 {. J5 H
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);% Q, r9 |3 ~; i( g  S
& y7 q# N5 @5 T3 e2 x9 R; q0 L
        Yline_coords.start_point[0] = WCS_pt[0];2 d* |$ Z6 m1 U8 I/ M3 H$ K
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;$ |( F$ B# F- v) p) _
        Yline_coords.start_point[2] = WCS_pt[2];
1 z* r9 i* Q) h' {, n6 c' o9 a' ?        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
4 c5 A+ V- g5 Q9 R, K4 w//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);6 a8 g# q1 Y' d, _4 K

; j3 M6 i& ^3 W( C+ v$ q        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
, Q  a' L2 a9 R! C        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;5 X, F4 n0 _  ?4 d1 L6 H+ r5 l
        Yline_coords.end_point[2] = WCS_pt[2];1 [! o/ o! ^) R0 f# \/ q
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
: i! [- {  Q, E0 L( G//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);. a+ `9 o: m  z! v, m* M* _
        + s+ H0 c+ i4 g5 P5 @
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线+ u/ C' D! m+ Q2 k! h. V
        UF_CURVE_create_line(&Yline_coords,&Yline);( `0 q9 C! {+ x) I: F% G; u
        UF_OBJ_set_color(Xline,186);        //设置颜色
0 w% M1 @1 E; J" P) B5 M        UF_OBJ_set_color(Yline,186);
/ l5 a, D% m5 O) K        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
1 x7 a; E8 Y; b& |4 L, w        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
) A- k4 A6 f( ?" \8 S1 h9 X1 O9 q! ~4 ]/ w# c1 ^4 `% _
        UF_CSYS_set_wcs(user_wcs);4 n4 ?, [; R& V: h( J2 |
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)& q$ t6 d* p- ~9 c, n4 y; X: l
        goto l10;. g; X$ @  X7 a( u" j! u  s5 Z

5 f' w% `- ]" @. n0 ]: @- e}
" \' K# E. V" d5 h4 e/ P. P: O' B& l# B7 h1 \9 n! L* S. u. l
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )5 z/ G- V5 ~) d" k
{7 p5 j7 D7 O, z0 y( G
    /* Initialize the API environment */
3 C) k, F" g. F8 V" P5 x, O4 T    if( UF_initialize() )
. `# M, X( F7 }    {1 s! N' r" r& {: @  w; i% c, b1 x
        return;
6 r8 y6 l9 l8 e7 d' J# S/ H    }" S8 Y, g- G' K/ v  h) M  `
" S: q6 h7 ?! m8 d) U- ?, c, f' F
        Create_Center();$ F" w. _2 U+ J; u% T

% I  v/ \. e1 i7 _- G: J    UF_terminate();
% a' L/ p' R/ j) Q! B+ G}
" N7 |5 s4 _& [+ f$ m; N9 l* @1 l  V5 n, s  r
4 a+ N/ r. \. G' r( t; p; x, j% @
extern int ufusr_ask_unload( void )
1 |* u, M! Y3 ^! t{$ ~+ b% r  ~+ L) T1 q4 s
    return( UF_UNLOAD_IMMEDIATELY );
$ D! l3 D4 |! U# D}* Z7 }4 ~9 u) o* r

9 V/ |. z$ j6 X/ V! ]3 J- T1 D
! v# t; X* q4 b4 i6 J" D5 F# P5 L; [: |

7 x! ?) ?% n( v9 M1 {
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
# I  x- E0 |4 I$ Y1 r2 G3 c8 U, y呵呵,终于写好啦
4 w, G! A$ l/ D1 W  P+ S% @# J
不错啊  
上海点团信息科技有限公司,承接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
  \: a3 S: k5 {$ |7 A老师多多指点才行

( H! S  X4 e" |$ C/ |9 X) }后面把 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二次开发专题模块培训报名开始啦

    我知道了