PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

' N. J# Z2 O+ G+ K. [#include <uf.h>7 W; K: M( z8 y- d' f5 W& a) V8 L
#include <uf_ui.h>
% p8 v1 @2 k/ z' ^# ^9 X0 G#include <uf_exit.h>
  S1 N. }4 h, T4 C
5 O* M3 [& v. F5 V) V6 h1 }#include <stdio.h>/ s% E) r, B) k9 G$ z
#include <uf.h>
  w5 e- y' z+ [/ F* ~' c#include <uf_ui.h>
2 n8 x7 L; C0 R1 F- O#include <uf_exit.h>3 E9 A# W# K& x' b8 G' s( |* `
#include "uf_layer.h"
$ q0 r1 e# D5 x0 p#include <stdio.h>
5 e* P: N: v2 B1 Q/ _, \& r#include <uf.h>+ R2 s6 d# D1 s
#include <uf_modl.h>
6 \/ n1 i- p' }, x, ^% A* X, {#include <uf_curve.h>
- A& m2 P. O+ J* q# @* c$ b* q$ P* @#include <uf_csys.h>
# t; S( X' A! K4 B# c1 T% P+ M#include <uf_object_types.h>
$ g2 ~4 M1 p) d% ~( S0 |- h# T#include <uf_ui.h>
. b6 z3 E) o% j9 z#include <uf_part.h>
- G# |% @2 P+ ?  G$ o/ }  Y#include "uf_obj.h"* }& T* h/ n  {- v  R
#include "math.h"% E+ ?  y6 z5 z2 B; \8 Y
7 P8 d" S% E. A& ^
static int init_proc(UF_UI_selection_p_t select,void* user_data)& M% b1 n  s( J, u$ a: n) r1 C
{9 c9 x* d: H2 l
        int num_triples = 2; //只选择一种类型
, @% \: f1 l& I0 g6 y& `; C        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
9 k" z1 e" E$ ^: h0 x7 s. w                UF_bounded_plane_subtype,1,0};
" u1 t8 E9 f% t+ n- @% k3 H if((UF_UI_set_sel_mask(select,2 A* z  m' x0 k, [% q
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,- \$ b5 n# N8 r7 s% c' @
  num_triples, mask_triples)) == 0)
. U9 F1 @0 N( |$ `3 L( B7 A+ a0 v {
) ]5 |7 @' ]- Q8 E  return (UF_UI_SEL_SUCCESS);3 Q5 {9 P6 i9 k1 Y' v! c0 c
}
1 L7 N. E- @: H& ^$ Z: f else; l5 w0 W1 |2 M' N- R) v
{
: G- B0 ~! }6 i  A# c- S  return (UF_UI_SEL_FAILURE);
- `( x+ ~  ~/ e; q4 K }1 e) q! A; x/ ]1 p
}9 }5 R; Q* k3 a/ I) m

. _% O, U9 O* R. R" c! d, k
2 n$ H  c1 m' Lstatic void Create_Center(void)  N. R, y: ]  V9 z
{
# @! @1 U' s. m% Z        tag_t user_wcs;: C: O# D+ B* a% u
        UF_CSYS_ask_wcs(&user_wcs);# d6 K7 \/ U3 M  r% a! I# _
        char cue[] = "简简单单:请选择单个平面";0 t5 \# @2 B3 S2 W
        char title[] = "简简单单:对象选择对话框";
  |( m! |7 L; a% \+ } int response=0;
1 o0 |4 D: V' q. R/ U tag_t object;
( c& @) B) `8 D int count=0;
' Q& |# h& \/ k! G. g' j double cursor[3];
& ]8 u, B/ }+ P$ F, m8 V tag_t view;( f( h, H; L7 f! r6 w- u- c
l10:
  Y2 a  P" x, |0 j, K6 K* D UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);7 _  j- o" X& B  I
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
. M9 G6 b! D$ z; Q7 j! s& a if(response==UF_UI_CANCEL) return; //如果点取消就退出
& F5 o; _! N2 d% P& `- b2 \+ z& w% x- U UF_DISP_set_highlight(object,0); //取消高亮显示. {5 h5 }+ Q# s) O+ H- t

1 ]2 \7 E; k% ]1 W" ]# d! z  int type;
. e2 A+ {' L. [( }  double point[3],dir_z[3], box[6];
* I  V% Y0 Z& K/ X+ |  double radius,rad_data;
2 H8 Y3 r5 u# V. d& N1 {3 I) m  int norm_dir;
) e6 ^. n& C! q: x  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
% @% y: I- ^' s- z3 y
+ O! x9 l6 n4 `3 K! [8 w( Y: K- @
+ ]- H/ m$ I0 L; t1 O! G5 s  tag_t matrix_id;4 F" D7 C5 a, e5 `
  tag_t csys_id;4 ]8 ~1 p7 m7 A/ o
  double matrix_values[9];/ ?+ ~. \7 T. x. h
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
7 Y+ f! [  S4 t  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
% r4 h& L: v# V/ p/ u  if(norm_dir<0)        //判断面的法向是否相反1 @. u6 u8 z: _4 ~- n# q' n' u0 A) w
  {
6 k4 ?5 |. j1 b, M/ {5 d   matrix_values[3]=-matrix_values[3];3 ^6 ]% [% i+ n8 d' c% x9 F
   matrix_values[4]=-matrix_values[4];, f  Q" _2 _  X; m; {1 K8 X
   matrix_values[5]=-matrix_values[5];2 _& v5 X* a8 P, \; F
   matrix_values[6]=-matrix_values[6];# I1 `# H) y0 m( v6 S7 O
   matrix_values[7]=-matrix_values[7];1 f+ t2 s1 a5 `! O/ P
   matrix_values[8]=-matrix_values[8];" U4 W1 G0 \+ p/ W2 L! Z
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
1 P' c' |  m5 }  }+ ]) E7 H; [& K1 ?
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
* }* z% P, W' Y- Y1 }  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正). o; V+ Y3 ^5 G0 G. D6 X
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)2 {  j' v8 S" b- _

2 Y2 h7 r5 T! U- F7 j; p7 t3 k        double boundingbox[6];) C+ K# N( ~: i% w0 x8 O
        double boundingbox2[3][3];( d( L& V, F- R; u! U6 E2 q
        double boundingbox3[6];
  N! D! L7 H  c/ Y+ Y        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
4 b5 E+ i8 u6 ~! _
8 d/ k: N# h- D2 q        if(type ==UF_cylinder_subtype)1 P* Y: J( C* m$ O3 e4 I( O! z% U1 D
        {
  I) b* b8 ?; I/ i  X7 a, L+ }                double cyl1_pt[3];
4 o1 `3 {( \' y! u                tag_t cyl_line,cyl_pt;
9 o$ b' F- I4 H' b  v                UF_CURVE_line_t cyl1_line_coords;, b8 m. v; G! q: K; h- M
                double WCS_pt[3];; [' U) h/ k% z
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* E5 C% S8 i  k" s2 A2 \8 S
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
: U7 s7 p* Z5 {9 N- U$ m                cyl1_pt[2] = WCS_pt[2];" a2 e" A" t7 A6 r! W, u2 m  x

- `8 O" E7 Y) R                cyl1_line_coords.start_point[0] = cyl1_pt[0];/ f9 |* g# l2 Q3 k: U
                cyl1_line_coords.start_point[1] = cyl1_pt[1];- q: w- M6 j! _7 ^# g* @
                cyl1_line_coords.start_point[2] = cyl1_pt[2];+ }! P1 z" o& L: q% i8 e1 h

* p+ \4 y8 [, @+ _                cyl1_line_coords.end_point[0] = cyl1_pt[0];
0 o0 ]! f8 x: i" P0 e8 J                cyl1_line_coords.end_point[1] = cyl1_pt[1];" y' a1 G/ C! j
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
' W0 @+ j5 n' j' ?* P. O/ v& c& ^8 x; 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转绝对坐标; x; ]/ i7 K$ R6 x, ]
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标) q7 J, h3 |- a
                5 K. o( n$ x! @7 Y  C' P; O% V4 e
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);& V4 x7 v( G# N8 K
                UF_OBJ_set_color(cyl_line,186);
# ?2 d! C5 z' F6 V3 F; C                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型/ Z6 ~  c1 Q. r% K9 n) A. t

* K9 j: V) J$ x, V4 h+ e- R                UF_CSYS_set_wcs(user_wcs);/ \+ t% A0 F- H# ^7 x  n! e
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
, p4 ?/ U  w1 H) p
4 |) G* a4 H/ I2 E/ A                goto l10;6 {! l3 M/ t8 {1 |9 s1 }3 R! u1 h4 V
        }
6 ]1 N9 c0 H5 V$ k% E. x2 S1 Y& J3 F# n8 e8 Y% P. O: h/ f5 _
! b5 p& V) P6 z7 a  p
        double WCS_pt[3],center_pt[3];
" X/ j# ~- K# B: i) x        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;" `% Q) ?" h; e
        UF_CURVE_line_t Xline_coords,Yline_coords;
4 s4 Z" R0 A2 r5 ]1 P" I6 C+ p        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs0 l  d$ x0 u6 {2 f: r, T/ g
       
0 [9 {8 l8 y8 p7 y( S9 s6 Q: v        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;) g7 l" {, l- w/ C/ U4 P
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
1 ^/ m+ x( S/ D" I6 `        center_pt[2] = WCS_pt[2];
' ^/ R4 c/ a. v9 D, s- W$ `' ?3 [  R

8 a2 h4 J2 |1 F2 k        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
, \- Z' I& `7 w# d3 U( P        Xline_coords.start_point[1] = WCS_pt[1];
: K5 T! u& ^4 q# f* s9 O" y        Xline_coords.start_point[2] = WCS_pt[2];
4 Z% c( Q8 j) `* n0 }% J3 }        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标. ~  B. _+ ?5 t1 X6 h/ h- O) o7 W/ F
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);; o: L8 N8 S7 t3 e- I1 j
2 k' V) R: t8 w$ P
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/25 M0 i: H8 O+ p8 m% I* F
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
- f/ o* c5 Q7 Z, L" ]8 [  r        Xline_coords.end_point[2] = WCS_pt[2];
; D  N) D" H0 c9 G$ n/ n        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
" m( }7 Q/ N: }* k//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);/ U; k, U' U: R* U  q

# c1 }% S5 `6 |# ^        Yline_coords.start_point[0] = WCS_pt[0];
$ A$ g% \1 ]5 Q8 a2 ~1 M        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;/ T2 U6 U: ]7 n1 v- x) p' \0 c
        Yline_coords.start_point[2] = WCS_pt[2];+ N' ], ]( {8 B& b8 |  Z
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
9 s, v. a1 O. ~7 K% g//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
% V6 q5 |8 C" [" e
4 j+ d. R# D- Y0 H& T1 X" \        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小6 ]& D- f, d7 n9 A: [3 i# C
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
1 n; j. F0 h5 T1 j6 }        Yline_coords.end_point[2] = WCS_pt[2];% H7 j' ^9 q; J
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
) C3 k- J6 e# Y& C7 Q) |) }# l//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);( h& L: g! H4 w6 ~, j( S
        : O9 ~: Z" q, u$ m, T
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线: \7 s& p  n6 d' Z
        UF_CURVE_create_line(&Yline_coords,&Yline);
( u2 B1 v. m! K6 O5 L        UF_OBJ_set_color(Xline,186);        //设置颜色" I# _6 {1 g+ O4 \+ H
        UF_OBJ_set_color(Yline,186);6 T; S' V$ ]0 m' H, v. u
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型# A0 o6 N5 B% N3 w
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
2 J3 X  l1 R& y( e! h8 q8 ]$ e$ b) M9 L2 F1 ]$ a- E% J
        UF_CSYS_set_wcs(user_wcs);
9 U  P$ {  \3 t7 S/ N        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)) Y$ A, B  B. h% c" D& {- O0 F0 Q! c
        goto l10;& k6 c! u5 r& ?" Z* P; K( b

4 O2 \3 d5 G0 e% ?* }}4 s% A8 L, _- m9 L

: x0 @4 C9 [' D7 v3 S  sextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
& |7 I% S$ Q* e: R{
6 l& _; b6 d- V8 Y3 _+ P4 i    /* Initialize the API environment */' N1 [1 E/ U5 @  u5 O9 ^& K
    if( UF_initialize() ), k+ O0 ^5 i# O8 _8 j0 q" Z
    {0 j  u( {" W# P+ P
        return;6 [; k' }  u- K: t
    }$ Z+ S0 ^. w4 r+ x, ?( H6 }
. {: R" w7 ]% d" I8 V# X3 I- ]
        Create_Center();# ?8 d: B) g1 m: {/ f) v$ s% R
  o0 H' Z) r. A# Y$ ^
    UF_terminate();" E# J4 W! i- w8 C
}  d5 Y8 k7 q! Y; D

5 V- V1 A7 l8 m! Q, _- y: c* d; j7 m9 Z6 u) B
extern int ufusr_ask_unload( void )* I, C" q! D7 ^7 i! ]: s# i8 K
{
: T* V/ |$ j$ H$ @! J$ p    return( UF_UNLOAD_IMMEDIATELY );
+ O/ [# t, g" o5 }; o/ V! `}" V. ]2 J1 c+ P) S3 U* |+ d" _
  n3 R0 n0 x4 C

( a) O$ E' M$ l+ x! x( p. D
; r0 w; s7 T4 Z& }
9 {. e% Q; n2 ?
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:446 F4 w/ w7 g5 |4 N# o- X9 R( @
呵呵,终于写好啦
# S! Z! E( U) j; M9 C8 P
不错啊  
上海点团信息科技有限公司,承接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
- K' A; m* D2 e  F( o$ J( V老师多多指点才行

: ^+ k2 @0 j' ?5 ]后面把 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二次开发专题模块培训报名开始啦

    我知道了