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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

3 t+ N' X9 D" x' D$ D& f#include <uf.h>
5 h- O2 j7 B/ O, C' [' _7 S; |#include <uf_ui.h>
  l2 P# r, R3 P6 x% j#include <uf_exit.h>3 p9 q1 k5 r5 B+ a! y- m

5 j- _; r, x/ p! g9 n: H#include <stdio.h># Q7 x0 [: B! J" X7 Y
#include <uf.h>, _5 O& G( j! [) |$ ^
#include <uf_ui.h>
; H# b: t( g7 A( S. m# m. C, H0 C#include <uf_exit.h>( Q) @- a. I! S* o% M  G( H! l
#include "uf_layer.h"
! U% ^( e" P0 E( W3 R; F' Y#include <stdio.h>
" c+ M! [- ]( N" O! `0 c#include <uf.h>
5 N& ]+ I& e! j# P5 M#include <uf_modl.h>" ^8 S$ X# F9 v( H5 v7 |" p1 f
#include <uf_curve.h>
+ [" P( Z+ v9 C( T# ?' r- D#include <uf_csys.h>) y: P5 ~1 D5 N: f+ w$ U$ s& D
#include <uf_object_types.h>
; o. k3 H' ^! K' ]0 O#include <uf_ui.h>4 z/ d. [+ G+ b* F% p! {2 T
#include <uf_part.h>
: \) j" U( `) A$ e4 N7 L* H#include "uf_obj.h"4 I+ F% y, |% e9 u
#include "math.h"" V( B5 f: o8 j4 x7 C; Q

, q! E4 _$ L9 Lstatic int init_proc(UF_UI_selection_p_t select,void* user_data)0 [& C) J) N$ |7 _/ N" K6 F% ?
{# [. b: ?. y" T* L: {5 u* a
        int num_triples = 2; //只选择一种类型
0 z' P( J- o) I6 A        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
( c/ Z' j( X' F% w# _                UF_bounded_plane_subtype,1,0};5 s4 s. |/ n5 Z! H% B
if((UF_UI_set_sel_mask(select,
# g) p. W# |3 G# p% s; i  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
8 `8 z2 [! P2 Y  num_triples, mask_triples)) == 0)
: s& K- T" o0 a$ R( b2 C {9 k( G7 A, ~6 f0 M5 @4 f
  return (UF_UI_SEL_SUCCESS);
$ V% C$ v- i5 U, S9 P }
$ z4 Y+ W5 g& Z( e: f8 ]* ` else
4 o( J3 u- X9 g' L7 m {2 u3 m! ?& D% m) o3 M5 [; `( M; `
  return (UF_UI_SEL_FAILURE);6 S+ f3 {0 H! Q3 t% w
}
  F+ U% G8 u" k}
/ ^) K4 Q: s0 I$ z0 r3 U& u- D) Y
7 a5 H" Z* U, p4 L2 l  s: K' o6 E9 H( E, g( {0 x
static void Create_Center(void)- \  l7 O/ L0 {9 t0 p/ c9 x
{& u( W9 Z( F$ t; y1 ?: m' q
        tag_t user_wcs;( H  o( }" S& D- _4 I5 y/ v
        UF_CSYS_ask_wcs(&user_wcs);# p& P1 E; f5 b6 }! S; E6 a
        char cue[] = "简简单单:请选择单个平面";! D4 Y1 Q! Z" E
        char title[] = "简简单单:对象选择对话框";  r: T6 G; S- N# K1 N. I4 q$ G2 ^
int response=0;
, n) r  k7 W$ K, ]6 p5 `" \# E tag_t object;9 W4 ?( D3 p0 L4 x7 _3 H
int count=0;* f- }, p( k* Q6 s" H. r1 f
double cursor[3];5 P! m7 K/ X/ [. K( W% p
tag_t view;& S& J: `% v  }9 x
l10:
+ T3 ~1 k7 e8 h( k- A UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);- \: S( f' B$ d, C8 e2 }! h6 ^
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10/ H# \% a( w) w) H6 Y# e' V, x
if(response==UF_UI_CANCEL) return; //如果点取消就退出5 K6 x- \9 V0 T6 J5 _3 L
UF_DISP_set_highlight(object,0); //取消高亮显示( J( s9 f  B0 w( A3 |
% P5 j% l" B6 r+ G$ o, s5 L
  int type;" [0 f# l% M( W+ q
  double point[3],dir_z[3], box[6];
* z: \8 u% n$ Q& W8 y/ H  double radius,rad_data;
& R% ]$ p1 D- j- v; H  int norm_dir;
! W4 K4 r" Q% N9 y  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向" L- V3 g4 ?+ w, M$ f! k# L

% f9 P; H$ r5 |) x5 l2 ~
1 q6 M: j. A8 y# X' |  tag_t matrix_id;
( R! c, \4 K# q; d% t  tag_t csys_id;
9 U) [8 y: G4 `  double matrix_values[9];
, [% a/ a+ O! a, Z2 [- ?+ ~' K  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID/ h. z: D: a% q0 w
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values% _6 }& g1 W+ f  O
  if(norm_dir<0)        //判断面的法向是否相反, b8 D" m! Z4 Y! V- z, k; z
  {
2 I: a& n) \& \& L$ d& {   matrix_values[3]=-matrix_values[3];# e5 Z) j, c  |6 \+ a8 Q. _# r1 T
   matrix_values[4]=-matrix_values[4];
- W" i8 Y+ I+ F4 D( k   matrix_values[5]=-matrix_values[5];0 n, k* }- n, }, m! U* ^
   matrix_values[6]=-matrix_values[6];
' G8 v7 P  i8 f) n6 ]   matrix_values[7]=-matrix_values[7];5 b8 b6 |5 y5 H8 L* d  t  r
   matrix_values[8]=-matrix_values[8];
4 f% h7 J- {, g6 A- [) y   UF_CSYS_create_matrix(matrix_values,&matrix_id);& d# ?! h8 ^8 Q' r! ~- d/ S
  }
! `0 W$ o- Y( b8 [  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
- `* v# a" D9 w2 R  C9 e( I5 F* r  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)5 J2 C1 [' c. j! d+ H) l4 j: x
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)& T- M! D7 X% G
9 `* x' D  k! v1 _/ f6 I
        double boundingbox[6];2 n/ W, f1 C1 _& o  T
        double boundingbox2[3][3];
0 P  v8 _7 h" A1 r2 S. G        double boundingbox3[6];
$ }8 o3 B6 m9 Q, X6 X' O  T6 N        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);* m) ^! P. _4 t$ I' [0 V

% W% k2 Z/ C3 P( v% X        if(type ==UF_cylinder_subtype)
7 B# N+ S* Y) i3 d" o) T4 [* W        {1 _! C4 X  d/ z/ ~4 O6 r9 k
                double cyl1_pt[3];
% S5 o, P. P% E- x                tag_t cyl_line,cyl_pt;' Y3 w9 U$ _; v
                UF_CURVE_line_t cyl1_line_coords;8 w7 ^- r$ t! R/ i9 O. p8 G5 m
                double WCS_pt[3];$ @1 a9 F* L( B) |/ o# B3 {  w
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
! j6 X# x% B, A                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs! [7 `  u/ \) ^/ C5 ^
                cyl1_pt[2] = WCS_pt[2];% b" [% k7 R0 T5 U' R- w

- Q9 \7 ~# e$ g6 W( i                cyl1_line_coords.start_point[0] = cyl1_pt[0];. R/ v" v# @. F, z
                cyl1_line_coords.start_point[1] = cyl1_pt[1];
. g# W, X" Y' f                cyl1_line_coords.start_point[2] = cyl1_pt[2];
: `+ D6 e- Y9 n* I! z+ O
" T, L9 F' X; U, D1 x8 B4 K* C                cyl1_line_coords.end_point[0] = cyl1_pt[0];
) F$ v& W/ W9 O( I( d( C                cyl1_line_coords.end_point[1] = cyl1_pt[1];
3 J0 _: N7 r# p3 o- y: F* F1 d0 L& F                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];. D0 T+ N/ W9 V/ ^

" ?  q# K' E/ T" G9 Q9 T                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标" N) u, V6 R6 h7 |
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标( E+ n9 b, f/ N' K
               
# x/ n& i9 I7 y4 g+ e                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
( D+ u/ \+ F* r( I5 X- `3 t                UF_OBJ_set_color(cyl_line,186);
! k  M3 V1 y  a, A, u! N                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
3 b) s* ]4 p2 j; _6 u3 N! E0 P: ~# {$ D
                UF_CSYS_set_wcs(user_wcs);
3 b; \4 O" X( f- k( Y- }                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
7 B: g* U/ C, f! g: Z% U: m% M( L, z
                goto l10;4 I$ }2 M- R# w* ^' }# y
        }
* ?- X/ ]/ G4 U# D4 V! i/ e5 A! j% \* `" V5 F

" W/ e4 Y: |: b+ f# f/ J7 R- Y3 d        double WCS_pt[3],center_pt[3];
% G1 y; T1 j( O' o1 I' E        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
2 A& M  Y+ s; A% Q        UF_CURVE_line_t Xline_coords,Yline_coords;, V4 [/ e9 C% E5 D! u& J1 g. G. z
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
) g( b' D- h5 k1 ^/ x0 {       
% Q$ F7 K) h" u! u, O3 v9 Y        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
9 d6 }3 I: U3 C7 Y6 h% L' N8 H6 K+ L        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;7 J$ G5 D. }0 ]9 o* s
        center_pt[2] = WCS_pt[2];
3 K7 o' m' h" g7 }7 F& Z& H- D. `
8 ^7 o0 q, ~: r3 m& k$ V. J( p- g+ @0 v% E
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
9 E3 h! K7 g( Z  ?9 X* u. d        Xline_coords.start_point[1] = WCS_pt[1];; ~( E4 p3 _7 J; i
        Xline_coords.start_point[2] = WCS_pt[2];
8 @5 h6 W4 l" s( ^: q        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标. c6 }8 S! L3 s$ Z
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);% J" W; e/ Z7 C) }; g  _- a) s/ ?

  K1 |! V. f- q% @        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
0 F' }  A5 ~6 H# f        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小" i8 Y: e$ `: P" _4 {
        Xline_coords.end_point[2] = WCS_pt[2];6 o3 u8 S9 e7 f9 z8 ]; e
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标9 q( @* ]+ l/ I4 q
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
) I# z, `* m; d! B! z* k
1 w& v' Y& o* U* |# T9 n  j( R% P        Yline_coords.start_point[0] = WCS_pt[0];
" ^" r" t& r! f        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;7 C! [+ p0 D# q' X
        Yline_coords.start_point[2] = WCS_pt[2];/ Y7 w4 J- w, f7 g+ J& x, c1 m% s2 r
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
  I) W# Z5 S) Y. ~//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
* L1 y& Z4 B5 a2 R* H9 i9 N
: b# e) g1 S4 `$ I) L# |) @        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
: j1 }; m+ \0 U; J        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;% d$ Q9 \* E  @) B( d
        Yline_coords.end_point[2] = WCS_pt[2];
/ |7 a* `+ U- O5 R* Z  W; z( |        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标. d, |7 n/ I3 @; @& M* \  z
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
) W2 ~& a( \. s+ U6 I9 {$ y        + s) N: ^: g3 m
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线: y+ m/ h5 Y% b( w
        UF_CURVE_create_line(&Yline_coords,&Yline);
( H) ?" X; r0 ?; j" H        UF_OBJ_set_color(Xline,186);        //设置颜色
  g. d1 \! C$ s  L- ]* O        UF_OBJ_set_color(Yline,186);- E8 o! U5 D$ |7 Q; h3 U
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
* ]0 k8 z) m9 D# V        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型9 k2 K: |+ X8 f4 o: S3 _3 z, A6 M
% z5 _5 _5 N/ T& k
        UF_CSYS_set_wcs(user_wcs);
( d' y1 Z" q/ ]/ n) Z        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)$ d0 p: M6 D% a$ o( b
        goto l10;* j' N3 M0 ^- {/ V6 Y& @/ g5 v
5 _8 @* q( A! y7 R% a
}  b: I3 _% d( R

1 \4 @4 o3 _/ x7 v" j' _extern DllExport void ufusr( char *parm, int *returnCode, int rlen ). V- [3 C6 @- \" D& K4 m
{
; s, s8 e) Y1 X! L; L* G% X: b; E    /* Initialize the API environment */
$ h; z1 q9 T% s  r% }1 P    if( UF_initialize() )
; v3 t/ s. y7 i6 t    {% ]% i; `) a3 A0 r
        return;' f: I+ N$ L* z) f% {* X
    }3 z0 K# i% C- J$ h+ E' _+ ?  p# ?
8 H) T8 f3 i( |2 c/ ]; A
        Create_Center();4 }6 f2 ^- \! E9 ?0 d, g

" F4 O" X: Q$ C/ G1 h  Q6 `    UF_terminate();
+ S: ~) m- G6 H1 y8 G' K) c}
# u* p! K. Q6 s6 }2 L$ Z3 X9 |" g3 {% O
* {9 G' s& F" J& f. {8 J0 W
extern int ufusr_ask_unload( void )9 I/ `' {* Q& P9 K' w' L
{
, G" h$ e3 j2 r& |    return( UF_UNLOAD_IMMEDIATELY );- ]  u/ M5 f) A; [, g4 _
}
- k6 i( q' |- k# I* k! d, q! Q/ [8 J- O0 _

9 |- V7 {0 j7 T. ^1 m0 B  x% m- K  X, A8 T6 v

' W# T5 o% M( R. Z  Y0 p4 b
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  a5 a5 n  x7 |
呵呵,终于写好啦
& D' y3 S, U% L& w! d
不错啊  
上海点团信息科技有限公司,承接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
$ A0 f8 t) p9 t! s& K0 |; K老师多多指点才行

% A: x8 ?' W$ g& G# }* N; D2 H后面把 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二次开发专题模块培训报名开始啦

    我知道了