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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
5 ~, A% K1 ?; X! d
#include <uf.h>
/ H) C1 \% W7 L! P; T#include <uf_ui.h>
% J7 y* D, ~$ Y0 s#include <uf_exit.h>
" w  [8 j5 R9 z) x: Q/ i
8 T: F8 N: P" |: B& h+ W#include <stdio.h>- p+ M6 p3 c- p$ S5 I1 n
#include <uf.h>
* x2 `( s3 ?! d! k& o+ L: m' X#include <uf_ui.h>
+ @5 e' @9 C% r% l  }" h) i#include <uf_exit.h>( [. P: E: b8 {; q9 e( q
#include "uf_layer.h"
3 Y2 c& G" J& h$ j4 U#include <stdio.h>
& S, k$ r7 H4 A8 i3 f/ g# N#include <uf.h>! G1 T3 \5 J$ s7 j) b$ i
#include <uf_modl.h>& I0 c0 Y' ^' r/ t
#include <uf_curve.h>* j2 T( W* n  |& B6 e
#include <uf_csys.h>. z4 ^! K' T! t+ k* G) Y
#include <uf_object_types.h>: n: C' {: O2 k# V# @# Z
#include <uf_ui.h>0 d0 o  q" Q2 ~; H( X& f
#include <uf_part.h>7 }+ S; o* g" j9 m/ d  @
#include "uf_obj.h"
: C5 f2 V- ?' Q# L0 V7 k9 N8 o8 \4 `#include "math.h"# l% o- Q" _; o$ i  ?# s

+ ]( K, R( w  _$ p9 z1 gstatic int init_proc(UF_UI_selection_p_t select,void* user_data)8 |$ i2 V6 c% o) B5 a
{
$ [* H- H% ?: F7 K        int num_triples = 2; //只选择一种类型' {- f+ n  a2 ?8 I) g7 U, t, u* s
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
1 B7 v: H3 [8 h  l4 K& p7 o                UF_bounded_plane_subtype,1,0};' q; D: K* o* V: V. `' i
if((UF_UI_set_sel_mask(select,
8 }" P+ G  p- x; I; t3 H  J# k  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,2 X" A9 D8 U9 u7 ~( i' e
  num_triples, mask_triples)) == 0): G9 f' V# M6 ?4 x9 T  b
{) {( h; V+ h  m; S+ k  v) q+ w: k8 e
  return (UF_UI_SEL_SUCCESS);/ t, l1 Z2 E& m+ h
}) ?2 R' e0 i$ s: Q8 W& p
else3 ^1 J) ^* S  d1 ~0 x  X
{
/ f: {6 B: u3 S' ^) H3 V8 @  return (UF_UI_SEL_FAILURE);. S: X7 X) ^( i. y" ?; g" R
}& v, h: @% `4 X" [! S
}  Q* s# O# Z# w

% p, F! B5 I" l" f/ G; W4 P3 Y3 o6 {) O& ~. [( w
static void Create_Center(void); D( R2 w2 j5 i0 p: o2 _9 m
{
, D. G& k$ G; Y7 j" V        tag_t user_wcs;
3 c( [  c* N$ W2 O        UF_CSYS_ask_wcs(&user_wcs);
, n9 n) A! t3 ]        char cue[] = "简简单单:请选择单个平面";' X' l6 N& }: c* R5 v0 }
        char title[] = "简简单单:对象选择对话框";3 O/ Z5 m" }1 B9 o! Y% U; e
int response=0;
" l' N2 ~( D2 y9 v tag_t object;
2 s2 j. q4 i/ R, s. m9 W1 L$ Z# Q int count=0;
5 O0 U& J2 D( }5 ]) }1 o' M! E) P double cursor[3];) e( V0 r. C4 |, Z2 Q9 c$ O" e* b( x
tag_t view;8 ]# P5 F4 H, V4 B
l10:
6 T$ g( V2 x7 t0 [' P- B2 ^( L  z5 s4 W UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
0 C/ R( V8 r3 X8 |2 v if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
( n& \$ N8 Y# l' Q- Q) o& {4 q' | if(response==UF_UI_CANCEL) return; //如果点取消就退出0 A% s' M4 `, z3 r- }  f7 g% @7 k2 J
UF_DISP_set_highlight(object,0); //取消高亮显示0 d. E" K! d3 J* j
+ i. v. A. p  M$ D! U4 y
  int type;
3 Z- H7 m2 X* M9 b* `  double point[3],dir_z[3], box[6];2 J! a' r) n3 r7 K) a# K
  double radius,rad_data;
  u  T5 t7 n7 X. ?7 D  int norm_dir;
' R* V: J* ~/ }/ c& a2 W2 A) ]  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
; h0 [! X" g  W+ s0 n3 q8 P9 S; x' e3 y+ L$ O/ K1 K/ Y# Y
3 o/ |8 N0 j( P% L  E
  tag_t matrix_id;
# U" s7 V$ I7 G6 c. w3 {  tag_t csys_id;5 }) T' [! o3 e0 n; `) U  E" M) F  z
  double matrix_values[9];6 F) H4 {* s) }/ ^
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID, d" x$ e" E7 b- e
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values. ^& }0 _$ `- I6 q4 _" Y
  if(norm_dir<0)        //判断面的法向是否相反4 U* ^; b8 A" y7 p) g: o( [
  {
$ r8 U8 Y: ~& X! A- o   matrix_values[3]=-matrix_values[3];9 F0 \0 S# `9 ?+ q" h* ]% r( F
   matrix_values[4]=-matrix_values[4];
1 E) j. e1 a) X! P8 {8 K: ~   matrix_values[5]=-matrix_values[5];  T' ]+ Y# w; ^- |; r
   matrix_values[6]=-matrix_values[6];9 h0 a1 L. U; {1 @
   matrix_values[7]=-matrix_values[7];
0 _1 y; _% s* ^$ B+ r! Q" t   matrix_values[8]=-matrix_values[8];7 j* S2 q4 ?" a# d8 J1 A* l8 [  i6 A
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
" u$ v: n8 f8 t1 r/ U  }/ y- \# ]. z; k* S( i
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);  J8 \' A) Z# G4 y
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
/ u$ Q2 E7 D% u$ r/ g- {* ^ UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)( [0 d( y( l* {" r* Q
# ^: e8 l2 X- a' @$ _
        double boundingbox[6];
8 A4 `  \% m: K+ K$ {2 z, D        double boundingbox2[3][3];
3 [) x) D8 I* d9 P9 _        double boundingbox3[6];* i& x8 o# x" m! s# K
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
- u9 O" n3 I( u  c4 ?) g. T  k' J, L6 G+ a  Y
        if(type ==UF_cylinder_subtype)" _# A# _' U# X  y& B  ~# K
        {# H6 _( @) w5 l- h5 M$ F" j
                double cyl1_pt[3];$ i% u; G! [8 L( H  g5 Z+ n
                tag_t cyl_line,cyl_pt;
  x0 `$ f+ ^$ H8 ]3 d$ c                UF_CURVE_line_t cyl1_line_coords;
% Z5 U! J# n5 \" d4 _2 E                double WCS_pt[3];( ?( _: Q2 U# I0 B3 B, t
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* t1 T  j+ Q  c0 V& ]  R
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs+ T  U+ e% N; y
                cyl1_pt[2] = WCS_pt[2];' @4 V8 y* v: j' b) \$ Y) g# P

5 `& U7 K: B- L: ]; x" I( p7 y" h                cyl1_line_coords.start_point[0] = cyl1_pt[0];
3 F0 S8 P& m$ L8 i: }3 |) F: J- z                cyl1_line_coords.start_point[1] = cyl1_pt[1];% [% l* q5 q4 N/ @6 B
                cyl1_line_coords.start_point[2] = cyl1_pt[2];0 J9 _! ]; C. @' G2 r# z% @

  H3 u# H1 y% a0 @7 U5 l- u" _, M                cyl1_line_coords.end_point[0] = cyl1_pt[0];
7 e0 y  I" I; C' g                cyl1_line_coords.end_point[1] = cyl1_pt[1];
1 ]4 r2 Y4 s  f, `$ F( p1 z. Q' C                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
" H( r3 @2 h) ]5 a- t. C9 \+ S8 [" q# |  `2 m; V+ ~+ 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转绝对坐标
  T* y. {7 p* L3 ^                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
' D" p! f' ^! L  P1 A  e/ G3 @                % ]3 t/ k' g( j
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
  L2 m% i/ `4 z! o. `: \4 N9 c                UF_OBJ_set_color(cyl_line,186);% V3 {) f. q/ L
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
; N& w* {1 {0 e+ F
3 q9 _6 ~8 h2 I2 Y9 z                UF_CSYS_set_wcs(user_wcs);0 J" n' N  ]. A1 F2 e# Y
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
! ^5 g0 J! }8 G; e8 f# D$ Y5 s7 ~* c3 [& D2 B& u
                goto l10;9 A7 f0 i8 J4 V
        }
4 g% x! B0 `: b, f7 g" f3 y0 s7 y
1 M/ H: C7 w- \; x  E; j' }" b1 Z- B9 m9 k. N, Q$ u7 S, f$ K
        double WCS_pt[3],center_pt[3];
& V( I9 a, p, `$ v0 K9 ]        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
8 ?1 a; u5 z6 y% ^4 e* z$ J; X5 v        UF_CURVE_line_t Xline_coords,Yline_coords;- m8 S  |- e. a# t
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs5 r5 `- N& b* H3 Y: h
       
/ z: x! F8 `7 }  ]        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;4 i0 p9 Y0 z0 [' u% ]: P/ _
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;8 C1 d/ j+ ^$ ~
        center_pt[2] = WCS_pt[2];
  B6 B, Z; Y( o! Y9 j* E
& t7 B$ u; r) Z- u: \7 v. M+ L5 z1 ]1 r9 H* h3 B$ ~' [
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
" o/ T- U4 B7 ^, @* \% n& H. d2 @        Xline_coords.start_point[1] = WCS_pt[1];5 N: s8 y9 {, ^( g3 c  e
        Xline_coords.start_point[2] = WCS_pt[2];
7 s" p2 T- \/ J4 t        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
; E0 D- e5 ~; y2 U2 y//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
( S! n$ D. G4 j" [! G& ~: n3 s2 E' J
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
. I. k! ^/ \% D* x4 Q0 a+ f; g  w        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
1 G1 ]# e  |  X        Xline_coords.end_point[2] = WCS_pt[2];
  @! W7 o3 e! m2 }        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标- y) h& [& m1 C3 L
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
6 v2 Q. Q) L7 {5 [4 ^8 w
5 I4 r* z/ O8 Y0 p5 d2 }        Yline_coords.start_point[0] = WCS_pt[0];
$ p+ E0 }3 _* U, l7 M1 s( o        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;3 P& x: z) x5 K1 B
        Yline_coords.start_point[2] = WCS_pt[2];' N  h( Y$ ^$ L" o$ v4 K
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标  @9 W, n1 D& S7 d) [( c( u+ b
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);8 h, h5 N$ g- ~) e7 Z( a
4 p  [- I% y- ?# }7 w
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
0 {: X) R& }7 A) M( N        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
( H: K( u7 p: }( R- C0 ~: t        Yline_coords.end_point[2] = WCS_pt[2];8 f/ c7 y" h% z$ P
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标0 y7 b( P, a. v' O; [
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
$ ^( c* m; h& I5 @* Q        3 a8 C: ?8 G- H( J
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线! N: O" y7 X0 c# o
        UF_CURVE_create_line(&Yline_coords,&Yline);' u* P# |. ^# F
        UF_OBJ_set_color(Xline,186);        //设置颜色8 B! S5 F; j. u/ s$ v, D
        UF_OBJ_set_color(Yline,186);+ i  x" ^& e+ {1 F2 D1 i5 s4 {. ?+ Q
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
2 E" M9 b4 ^& T. f: Q7 b: M, O        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型, N" A7 x9 A) `7 \
1 y5 o2 }& U) ^/ M% K- A
        UF_CSYS_set_wcs(user_wcs);- K7 Z. `0 Q7 A% ?. }
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)- c7 w1 W9 y4 d8 D; B: V1 z
        goto l10;
+ ]7 a( W  F/ A. }/ {1 m6 b( J& V3 k( G" ^
}( A; C# t, x6 Z0 P) o' k
; J" B  ^# N8 M- M7 X8 ]: j
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
) y4 J/ ]  w9 [% z% ^4 b{
- P% G0 x! O$ u2 z! b+ d    /* Initialize the API environment */. `" b# j4 Y$ T+ i
    if( UF_initialize() )! q$ t" [( f  Q9 n: e, W0 [& @
    {: Q( H1 X  Q6 ?  K
        return;4 Z/ K( ^2 t: b9 K  T
    }
, d% z! v, a' _9 \3 H* d
& q- |1 [2 b& Z  g, k+ M2 j        Create_Center();
' D0 S6 Q! ]* l( d% h/ D+ P9 d( E- K, V8 ~
    UF_terminate();' o6 ?" q- p2 v2 g
}, N9 w+ E4 W; ]; B- P2 s9 k

: {: F( _& \2 W2 l. X
, a# X8 O- F: P5 f4 d3 jextern int ufusr_ask_unload( void )
  p# G0 R. V2 Y{" H; U0 _2 d0 j; O' f4 {
    return( UF_UNLOAD_IMMEDIATELY );
: b# \4 ~9 t& B$ p2 V' |& W}
* O3 h' v5 X+ c: B6 y/ C1 D, g' ]9 L( x
# X4 M" m; [, x+ Y

! Z& k7 z; s$ y5 F& f, I& \& j7 q% _" e* P
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:445 k  F& }1 t9 f- h
呵呵,终于写好啦
1 I0 Y8 v: O& F# z5 ~9 m
不错啊  
上海点团信息科技有限公司,承接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
) }6 U( s5 ?) E; w9 K2 ~; n老师多多指点才行
# x. \) w9 c' ~6 [9 j: |0 @$ d2 a
后面把 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二次开发专题模块培训报名开始啦

    我知道了