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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
, A9 G8 p) p  s- _, d
#include <uf.h>8 x4 k; k' `" }- u2 ^# R) u
#include <uf_ui.h>) Z0 U5 |; w2 |; t/ k1 ]
#include <uf_exit.h>
* g1 ~5 H$ G1 Y. F# z4 N0 D
; Z9 d" W( t$ W( T+ G- O2 H, B/ k#include <stdio.h>6 R% a- R6 B* r* L; v8 H: b/ ?1 m8 i
#include <uf.h>( X6 B5 n& U* M1 w3 r; W1 z) R4 x
#include <uf_ui.h>- {6 m! l  n9 Z" i
#include <uf_exit.h>
; {5 C: a  \  c9 B5 T: |, X/ I#include "uf_layer.h"
8 G. Y( v) \) O8 m, Q% R#include <stdio.h>% ?0 b; V( [. U. X8 R  f7 w- c
#include <uf.h>
* S% {3 i9 z' b7 k9 T. K/ x#include <uf_modl.h>
( E0 C: \3 F2 \: C' d#include <uf_curve.h>
) k% j  A. h1 C+ M3 [4 e! ?#include <uf_csys.h>
1 _. ~( e5 t6 F. J5 E#include <uf_object_types.h>
. Y2 v8 N. M6 x9 U. w#include <uf_ui.h>
- x3 ?0 V3 B9 \6 v$ W8 D#include <uf_part.h>
; j/ G" @9 w1 Z& G' u5 o' [* M' s$ e' M#include "uf_obj.h"
3 E/ r6 U7 K" m8 L1 [#include "math.h"5 o1 Z: Z3 x/ c

: p3 Z  E, F8 F) u! f$ u5 \9 x- astatic int init_proc(UF_UI_selection_p_t select,void* user_data)" I& m/ L1 x5 U- M: h( a/ Y; [
{
! k4 V" b) C6 a: k1 x4 k. r% r        int num_triples = 2; //只选择一种类型
$ [5 S/ W4 d, |4 c# C5 h2 ]' o0 Q0 C        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
. H, |& P5 ~7 R, P* V( p+ @4 a7 X8 m                UF_bounded_plane_subtype,1,0};! P* g; B- p& m, c/ P4 Q
if((UF_UI_set_sel_mask(select,
$ U# f" o3 F: q' f* T6 x. F  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,7 r" ^: t: z: Z$ z' Y' I
  num_triples, mask_triples)) == 0)
9 B1 _1 e" u) S {% ~& }9 t. U3 M7 s9 C/ \
  return (UF_UI_SEL_SUCCESS);, w8 d! ~+ e0 f8 b  g
}
; r4 A% S% f7 }  U* v' M else5 @% S; o& W+ m: x4 P9 v
{% v. _: E- W3 S4 Q4 A
  return (UF_UI_SEL_FAILURE);5 Y; ?) s' g1 y: J, g0 u! x
}4 L6 U; |& {5 _
}& _+ m# |9 i9 b+ z( ?& h# ~
5 V( I- M/ l+ K8 |* ]
0 L# J0 I+ y/ n5 |: f' ]
static void Create_Center(void)
' O2 i3 D; O- o, X' \* \{+ ^# [1 w* Z' |
        tag_t user_wcs;
/ d- j5 V2 D- q; Z$ t( f        UF_CSYS_ask_wcs(&user_wcs);
1 g" K# I! Y! l8 E' y8 L  P( F        char cue[] = "简简单单:请选择单个平面";, }4 G5 T" Q' s6 @) v3 x0 b
        char title[] = "简简单单:对象选择对话框";: H5 p: n9 K1 i2 l% q7 e$ b
int response=0;+ P" K) W2 a  _& Q+ R' E7 ?. M
tag_t object;1 ~, z4 `/ e& j7 s& C. _, M# V
int count=0;
0 t  H( {- d$ G6 I) f  {( e' { double cursor[3];
4 s6 T* n$ M$ \/ x tag_t view;6 B% ^- \8 D0 @" Y
l10:3 l9 j; ~- F0 }1 M- W" }
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
3 P. ^+ q! M5 K if(response==UF_UI_BACK) return; //如果点后退就跳转到L10' y% q: e' a" U' `
if(response==UF_UI_CANCEL) return; //如果点取消就退出
+ l( Z" E! E; [5 a2 H, S9 `& R UF_DISP_set_highlight(object,0); //取消高亮显示
/ D+ B% x- I/ H
: }# |) g3 M5 ^2 ?& ^$ U  int type;
. F' h4 a% _" w$ y; a2 p% e2 B3 u  double point[3],dir_z[3], box[6];4 U: F$ C" t8 _  E7 q5 Y  S: i7 s
  double radius,rad_data;
1 m3 S' [8 H# V) K  int norm_dir;+ }$ h  A7 Z' O* `. w& w) H/ F( D
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向+ o0 T- ^1 a  P
% j& W4 p" b8 [. H$ J- t2 O0 _' N

) T. V$ L! m4 r& M" q  tag_t matrix_id;  Q/ }8 B, j+ \7 N1 X  Z) a3 E5 J
  tag_t csys_id;
5 n! [% N2 N$ X! E  e1 {  double matrix_values[9];& k5 h5 ]2 J* c: g7 X# ?0 ]
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
, y" W8 a  \, B; X2 _  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values  {9 `& T; j5 F
  if(norm_dir<0)        //判断面的法向是否相反
! d0 |, W/ ?! W3 `  {
+ j5 p7 E( L7 ~# G2 o   matrix_values[3]=-matrix_values[3];* I8 A$ q: A2 F/ }: c2 [0 C4 K
   matrix_values[4]=-matrix_values[4];4 S" |$ F7 ~/ ^$ s/ t1 R
   matrix_values[5]=-matrix_values[5];% ]' Z8 d: ^0 ?0 S; D
   matrix_values[6]=-matrix_values[6];
& s2 K# R  n& X; t* D: a   matrix_values[7]=-matrix_values[7];4 a1 ?9 C/ |5 b/ R. Q
   matrix_values[8]=-matrix_values[8];
; c) O# X  }" B- h8 M   UF_CSYS_create_matrix(matrix_values,&matrix_id);
& f1 e+ X( P% ^  }
- F" a* c$ V: b3 I. P9 X  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
* v% X4 k0 P- e/ k4 P  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
8 G+ I, ]5 [8 G. ~/ U* K+ y% E UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)8 q8 l6 A, O2 h1 f7 l

6 b3 w1 K0 e9 |# C! B        double boundingbox[6];7 c5 ?& g9 g/ a" R& U
        double boundingbox2[3][3];
9 X2 e' \6 G, n- t. O! Q5 [        double boundingbox3[6];2 c4 Z4 o, L) x$ c2 ?
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);0 Y5 B  f& L# M5 _1 O- p
5 k1 N( ~3 R" P" W% b. L* A# `+ H+ X
        if(type ==UF_cylinder_subtype)
$ Y' f3 N4 l4 f- o, `        {" S- z) G0 O/ ], c
                double cyl1_pt[3];! C  X2 R( j. a
                tag_t cyl_line,cyl_pt;
' o- N- L  H; w2 n( t/ S- i9 G7 k                UF_CURVE_line_t cyl1_line_coords;8 K# c, n  ~; S" \8 m# i5 b- k( _
                double WCS_pt[3];
4 f* [4 F' D' B* H* M                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
! g2 z; P+ C# t4 N5 O                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs; e1 U2 _# H3 C9 D* Y
                cyl1_pt[2] = WCS_pt[2];# t# d8 F* U$ v( Q
8 x" Z- d# a3 H4 {, A9 M! B: z# h
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
% W9 I$ y3 m) T% }3 z' B+ t                cyl1_line_coords.start_point[1] = cyl1_pt[1];
2 m3 B$ L+ r+ G6 B0 ?                cyl1_line_coords.start_point[2] = cyl1_pt[2];  c  x/ a9 @2 u3 ~" T! o% F( X
+ |& q! a- c% F! d' x$ p
                cyl1_line_coords.end_point[0] = cyl1_pt[0];
4 N& Z9 A( Q/ i- @9 N                cyl1_line_coords.end_point[1] = cyl1_pt[1];6 F$ f3 J$ d/ X& F* J/ J! I1 Y4 V
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
7 g7 [6 G" C3 P2 A0 w7 p) g4 R5 u. B3 w% r# C" ]# K! H. R% s2 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转绝对坐标: d4 O, J  G/ \) Q+ S+ y' ^
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
1 z1 s- P: M5 o/ m8 a% t                : D# G/ F' h) A7 ^3 N
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
: L% ~! f) P5 n4 g6 P                UF_OBJ_set_color(cyl_line,186);
1 r/ m4 U2 N4 z3 V- ^4 z                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
. \) o- v& J6 q
" r5 _# @" H3 g' q( S                UF_CSYS_set_wcs(user_wcs);
# L# f0 k& K0 v0 a1 P( T( m. w) H                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
+ m3 Y: X, C* z6 \+ o5 p7 S
4 X% `0 [1 G( }                goto l10;  M: l3 M( v, `6 a
        }; s7 S3 A" K6 x6 s! ^0 `2 D

; G2 J4 s) k) c( O. K$ x' H* S6 J! b: J& d7 t8 s! M( M
        double WCS_pt[3],center_pt[3];
$ k" ~& e! s6 O2 C# P* @" w) O        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;# b1 {0 v3 m' ~2 ^7 {/ v
        UF_CURVE_line_t Xline_coords,Yline_coords;& y& T/ ^, G8 d
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs. _  q3 n8 S1 s8 {1 c- B
       
3 {0 x  T3 f% Q1 W3 k# Q1 u        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
0 G6 [, y2 k7 S: q/ O% h6 H& q' P        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
- V) {+ x! V  _& f) f9 f        center_pt[2] = WCS_pt[2];8 @6 w1 E* ]* V/ [" P; Z5 M
4 D8 i! `( p1 r/ ~: ^$ G
$ r4 V$ V- Q9 v" B+ f. c% q9 k
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
, Q/ K7 I- T4 {8 A$ V/ ?3 a        Xline_coords.start_point[1] = WCS_pt[1];) P5 J. ?2 q7 @* K' _- q6 V7 a
        Xline_coords.start_point[2] = WCS_pt[2];
2 Y4 n% M- \$ b6 ^; M. i8 g1 q        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
, _5 x+ c4 o( C' T' ~# ^+ B//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);- A4 n' |' C. s

) e8 E" Z: J* z+ V/ k        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
5 k) k9 F! d$ b        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
6 L- x5 |+ y  l        Xline_coords.end_point[2] = WCS_pt[2];
+ ]! F/ L- L$ ~" l% i6 H: a        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标! A( b- D$ b- |$ ]  k# H2 W
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
8 x/ }/ z" G" y7 [+ ?  ~6 P6 ^6 @
        Yline_coords.start_point[0] = WCS_pt[0];: a9 I+ c5 q. }! m
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;, L  ^$ b' y0 K  i, o1 o: T
        Yline_coords.start_point[2] = WCS_pt[2];
6 I6 j& y( t2 i; o' S6 O        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
$ ?. k$ I7 b5 a. P/ `2 `//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);: e7 n% Y: Z& ]/ X6 Y  \+ W9 ]# P
# B6 Q9 K  f! x' ^4 s% e
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小2 C1 E; g$ L( Z; D0 O
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
6 v. e+ q+ X, |2 }4 U, O" @        Yline_coords.end_point[2] = WCS_pt[2];& Q" z7 Q' z: Z* S3 ^
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标; l& ~7 T# L4 O0 J( }0 K
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);  i; m3 x6 U0 y# h
       
+ Y' k2 y0 P: w+ i) [& C/ Q        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
" u3 w0 [3 N9 x* T6 m3 B        UF_CURVE_create_line(&Yline_coords,&Yline);
& f' H% a; u; h2 j) {        UF_OBJ_set_color(Xline,186);        //设置颜色
( E- a4 c! r6 d. a  i% D1 [% E9 g        UF_OBJ_set_color(Yline,186);/ P) _0 ^% C+ g& P7 |2 b5 o" c6 O  F
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型5 Q4 j0 e1 p& h
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
" q6 D) L) U& F/ g! O6 o9 N" Q' W9 |3 K
        UF_CSYS_set_wcs(user_wcs);1 U; A: ]" ^' R6 R8 j8 F) K
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
$ a( b0 J* P) c3 p7 _6 F7 s, u, K' A        goto l10;
+ j7 b; \. I4 K; M5 z( @: [5 o# d  J
}
: r& b& n) P8 V+ f/ g! [
2 _- M! L2 j7 q0 M: I0 a" zextern DllExport void ufusr( char *parm, int *returnCode, int rlen )- b" x. s% m8 T8 m
{) l5 B* c5 Q  Z+ ]0 b5 w# |8 H' `8 M
    /* Initialize the API environment */
" m1 n7 Y: W, g# U" s3 x, M$ o    if( UF_initialize() ), ~& s8 S& z  V
    {
7 u" D# p. }9 p7 D5 `+ ?        return;$ E/ \  N) p! ^
    }
6 r, t$ @' d$ O4 Z6 R3 \( L/ ~. W" G' K, h2 P8 J
        Create_Center();
% ~: H7 o- A7 v/ x+ G; [  {: N( x0 C3 u  w% x
    UF_terminate();/ y+ G* r- ~6 M# v! e
}8 Q" v0 Y) \! X; a
' D8 ]4 P4 U! ]3 X
. h/ x0 A, ]2 m- U9 ]
extern int ufusr_ask_unload( void )
: [: g1 J/ r, X2 N  ]" X9 `) v{
; ^. Y9 |: ?3 Y* A    return( UF_UNLOAD_IMMEDIATELY );
& P3 R' B, c6 R( B0 A7 P* A7 @}% F* M( S3 X1 H4 J' _' S. U

6 g- B. C( f* T; b( y) g; |$ V0 K6 n6 {& I
$ {$ [1 d$ }; j- V8 m  Z
5 O6 \, |3 \. h! q9 u
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; U& I, I; v2 A% V  c  q$ \
呵呵,终于写好啦

, S* h8 }+ X) k3 v: o/ v不错啊  
上海点团信息科技有限公司,承接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
2 R  _* u2 _% X/ C% J$ \, N; s2 C老师多多指点才行
* G* _/ t% c+ v6 g( B+ S5 W
后面把 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二次开发专题模块培训报名开始啦

    我知道了