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

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

  [复制链接]

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

8

主题

58

回帖

896

积分

培训VIP会员

积分
896
发表于 2014-12-12 10:44:01 | 显示全部楼层 |阅读模式

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

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

x
) b4 r$ D( _2 _9 |' W" S- z2 U
#include <uf.h>8 K* L) n+ c. m, g
#include <uf_ui.h>& ~- W6 X4 e4 @  Q' p( G* y
#include <uf_exit.h>
$ K5 L; R/ a2 f/ e( \( V8 t/ K, X) A* D' s# z  R: M
#include <stdio.h>3 |; }( }2 E9 M& {# C  P7 r
#include <uf.h>
# J# m* y$ g  m5 S5 E' ~* ]#include <uf_ui.h>
* c; C* z; i' p$ u3 [#include <uf_exit.h>
( T! A7 l, B) u#include "uf_layer.h"  W0 X8 V9 P* V& U% u
#include <stdio.h>
! F: B, Q& A5 ]- @) m#include <uf.h>
4 j3 g$ R9 }3 X6 S#include <uf_modl.h>" Z6 N" F  V" N/ M
#include <uf_curve.h>
/ n6 _$ E$ x  R& T- ~0 h. U% j#include <uf_csys.h>; Y4 O& q3 L! D! y
#include <uf_object_types.h>
2 c# |" a; h9 M6 J#include <uf_ui.h>8 V6 c  i/ w/ {* I# c$ n1 `
#include <uf_part.h>/ A7 T9 D* s+ J2 z" o
#include "uf_obj.h"
% ^6 u5 o% @% D, J/ N# P$ M- W#include "math.h"6 U, [: Z# l. m( X

, a" H1 C- n% pstatic int init_proc(UF_UI_selection_p_t select,void* user_data)+ e/ t% i1 Q4 M& g( \( W
{
  ~: \* f5 P  y1 }$ j* C        int num_triples = 2; //只选择一种类型1 y  a7 Q$ E5 c8 _! \/ d
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,9 r- d0 \7 c! q/ Y
                UF_bounded_plane_subtype,1,0};! ~* p0 B3 ?$ a! W1 `; x. Y; Z
if((UF_UI_set_sel_mask(select,2 m3 L3 m. P/ `" A0 P/ i1 z8 O" a! B
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,( j7 s% u8 `. L. m
  num_triples, mask_triples)) == 0)
/ }- z- B% a+ t& c {
) E& I% Z; r/ c! c8 Y5 c  return (UF_UI_SEL_SUCCESS);
; x9 A: p. V7 s" K7 D }+ y9 t! _7 L4 M4 p$ |: o
else) E( x6 {9 ?, z
{' V% l, x& Z' l- X
  return (UF_UI_SEL_FAILURE);! Y% n! ]4 R9 N+ ^& F
}
" Q- [- i- a1 M! `& P2 n) v4 S}
% I# m+ j3 d( n$ L
+ z3 g- u8 l: Z, R4 e7 t, ~' K/ Q! U* Q! \7 K4 ?: B" `) P
static void Create_Center(void)
4 f) w6 J: S. v% G9 Q' E6 K2 S{& w8 Q; d) T. G. w$ B1 \4 _
        tag_t user_wcs;" o% B- x" H/ ~& l( N& l
        UF_CSYS_ask_wcs(&user_wcs);' l/ z3 N5 V9 U3 K; A
        char cue[] = "简简单单:请选择单个平面";6 k' D+ {" A0 W% a  {( _1 F/ ~
        char title[] = "简简单单:对象选择对话框";
  V7 L+ m1 C# {) o int response=0;% E3 C% m3 f! s
tag_t object;
8 K1 `3 l& w2 D int count=0;
: H9 A) o! Y6 { double cursor[3];* {+ c2 q+ |5 p. ?9 }  z1 q
tag_t view;; k1 G3 r, m" s1 \2 ~' e7 T
l10:; z% f) Y& y; s6 x
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);3 h7 O0 K# B5 j# \
if(response==UF_UI_BACK) return; //如果点后退就跳转到L103 y$ g, ~+ t) t  q) ?) f2 S5 _; D+ w" C
if(response==UF_UI_CANCEL) return; //如果点取消就退出
3 f" P& Y! K! X# l- l  {! O UF_DISP_set_highlight(object,0); //取消高亮显示
$ P6 J; o/ i$ d: `( g
, a5 A& r1 }& ~5 Y5 ]' |7 \- E  int type;
  C# O# i2 J- M  double point[3],dir_z[3], box[6];& [1 \, ?5 |! h; N" ~
  double radius,rad_data;' ~1 N% C' F' R% M* ?
  int norm_dir;& J8 j5 w3 B" ?- Z
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
9 c- [* p3 O+ I% j3 K: K
; o% N4 [, k& O8 B8 V
# [" G3 c: o  k- D  h- k( F- O  tag_t matrix_id;9 `9 p, r& h+ J+ W" V! R
  tag_t csys_id;
! x, c6 [5 u3 E: A5 ~* q5 I; i  r" I  double matrix_values[9];
6 q2 v2 N) q! m- Q: e5 y  s  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
+ [! A1 J! f  f* v7 ^' J! Z  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values) Z8 Y4 G, p+ _8 N( p
  if(norm_dir<0)        //判断面的法向是否相反
4 V( ~) C5 D( K- T  {
9 j7 f+ v. G, H' f- j; s   matrix_values[3]=-matrix_values[3];1 `; `4 M# M7 w* P- ^/ X
   matrix_values[4]=-matrix_values[4];
, i" i/ p, I9 |9 d   matrix_values[5]=-matrix_values[5];
' u  f0 t/ G3 ^1 j   matrix_values[6]=-matrix_values[6];3 H# a9 e/ c+ J  T
   matrix_values[7]=-matrix_values[7];
4 E$ V5 w* x/ f" f0 R; K, \   matrix_values[8]=-matrix_values[8];- |" E0 g; l3 K/ Q' N4 u; Y' _
   UF_CSYS_create_matrix(matrix_values,&matrix_id);& @3 l+ I9 R* ~, q" y# [) B. X) t/ J6 I
  }2 k0 y+ }8 q8 V* [+ ^9 R
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);  q# K: p9 m8 q* x& M! ~
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)9 k0 p  F! w: \+ x% r
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)- V3 |$ j" }0 ~" \1 r; F4 C+ J

1 ~! P8 J9 P  j) k        double boundingbox[6];
9 z7 z3 W& r8 {: Q: y( H9 n# f& f        double boundingbox2[3][3];
& I5 C* d0 |4 c+ r' O* b        double boundingbox3[6];- q+ m1 {, J+ o3 h  [7 l
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
" |( h+ L; F: ?6 j+ B- [
+ |0 Y; |- q: ?5 E6 ~, z3 h        if(type ==UF_cylinder_subtype)! l: ^) r8 X. R, ]4 b
        {
% Z$ O! M2 Z4 [3 k$ `+ E: W                double cyl1_pt[3];& ]! }$ |& h+ h
                tag_t cyl_line,cyl_pt;
3 a6 U/ c3 V  j( v                UF_CURVE_line_t cyl1_line_coords;
* Z7 X# K6 s7 J0 k4 B+ s: n                double WCS_pt[3];
( x1 d  Q% F" A6 a                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
' H' e1 r- c6 L9 z9 }& r* D# C                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
4 v4 Y) E6 e8 M* ?                cyl1_pt[2] = WCS_pt[2];
0 `0 i7 q. \$ E3 `; b& J% n
2 x, L1 P6 I0 }                cyl1_line_coords.start_point[0] = cyl1_pt[0];
1 b" U7 N. q6 M. K1 v. P                cyl1_line_coords.start_point[1] = cyl1_pt[1];
) }9 H  \' }6 }% U/ T$ u6 }& d                cyl1_line_coords.start_point[2] = cyl1_pt[2];
! M& d4 Z9 w; J. a; ]
  P) H2 p: r$ a0 ^, n                cyl1_line_coords.end_point[0] = cyl1_pt[0];. E- w# d1 w, _$ ^, W0 f. A- I
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
: H) V3 H" O3 F) T0 L5 e6 O                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
+ `$ c. a/ j- V0 O8 g/ X) q* H$ r9 d, _! Z) q& Y, D
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标: _4 }/ r! [' K7 M
                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+ K- Y8 O* D5 V' e/ w/ {1 S               
. [3 v" {1 H1 Z5 K) X4 b                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);) q% u, \6 U9 G* o, W4 O
                UF_OBJ_set_color(cyl_line,186);& }4 y, I* ~2 j# J
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
3 t, j. }# {6 t. b! l( Z/ v' G- P3 A- {1 K2 l1 Z6 Y
                UF_CSYS_set_wcs(user_wcs);) ^( l, d" H! H) B6 l' I: ~- N
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
0 F1 a, ~' n4 I; H+ O' Z' o9 B% s7 u4 t) R% u5 T$ d4 |: X
                goto l10;
1 F9 s* {& @+ f! W7 d: X        }
' M3 g# e& _6 r5 [# O+ L/ w  _% P" N% y5 f' S$ K
$ H# n) i) P0 y5 Z% m
        double WCS_pt[3],center_pt[3];
% u* w/ F" o, @7 O        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
- F( i; N7 D/ D7 c: J        UF_CURVE_line_t Xline_coords,Yline_coords;2 I8 D& c/ ]4 J7 U) P
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* c! l( d# S' X1 }; D  a
        % T- z: G7 i# v9 f
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;& O' ~, D: c' U/ |  M
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
: \- s& i! ^/ a, y& u4 A# O) r" C        center_pt[2] = WCS_pt[2];4 b5 r7 i. Z: m% n0 d- R' M
6 L3 ?: A0 G/ y
- W/ Y+ z- E  f9 `
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
; }6 u$ t+ W  G/ a! u% b4 p. }, \; r        Xline_coords.start_point[1] = WCS_pt[1];& @3 n! R: q+ i0 z: T
        Xline_coords.start_point[2] = WCS_pt[2];
8 x" S. `3 k7 L; `2 c        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标. P7 ?6 R  u2 ]9 j' M5 n
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);( ~0 K* V7 i( V, K% T* b, l
/ m. `- J* D8 K$ o- v. T
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2/ q0 K6 t2 w, P0 t! I& H( L& k
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小# T) N4 a1 t7 c
        Xline_coords.end_point[2] = WCS_pt[2];
& e5 m, i6 r0 ~: [9 t: ?        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
  {, t: U" S5 }2 R5 n/ p//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
0 N9 g: M" ]) \; Z3 ^- n+ w) r3 \- y' P, Q$ V  L! z
        Yline_coords.start_point[0] = WCS_pt[0];
& F/ a8 ~, v; c7 L# A1 }        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;( c2 v: g0 j7 ]' m6 O
        Yline_coords.start_point[2] = WCS_pt[2];+ Z& s: M* q; q* g
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
/ H7 [# R( J' G//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
% A* j" c3 N* x0 b% d
+ J: F& j7 l& w. V) q3 M        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
. W$ G. i7 Y) d, @* B9 F7 i        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;, z( E: S' l3 |3 p# V2 J2 U$ X4 Q
        Yline_coords.end_point[2] = WCS_pt[2];4 B% Y. W0 e- {- q0 f$ f
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
. X& v5 W/ ]2 [7 s//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);  r0 e; b3 }& e" C  T( j& e
        5 h& G) p% x3 \; O0 B9 t
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
/ k: h9 a; ?+ b        UF_CURVE_create_line(&Yline_coords,&Yline);
4 ^3 a4 d( F4 A. M% X        UF_OBJ_set_color(Xline,186);        //设置颜色
5 \* B- h. x$ J. h0 N        UF_OBJ_set_color(Yline,186);3 V' h* P6 Y, c( N. u7 `
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
) J9 f9 O' @+ v0 ^4 `' s& \- m        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
0 X3 E9 D4 R: V6 K# _7 P( I% @9 w7 n& Y: U$ [
        UF_CSYS_set_wcs(user_wcs);; J5 u3 e& H/ C
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)6 x% Z5 @/ C' k+ Z0 g
        goto l10;, H6 L- W. i5 u
) D. a7 A4 h4 a% M+ ^0 q; U
}
0 I* f, z8 ?1 Q% s$ R5 f2 W% ^" `$ x/ @  A' }2 m  c. \
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
# y8 n& w* N& R% t  S. L9 Y0 K# Z{
! ^* N8 l0 q6 X& P3 M) Z    /* Initialize the API environment */& f* U; M" M; H
    if( UF_initialize() ). z( O, `1 `( m! a
    {/ A' N' K& z) }; m" A1 `, p
        return;
* u/ T. m: ]4 O  |. S! }; \: [% I    }3 J$ d9 `+ p3 p3 @" z
1 ?3 @8 K2 Z/ P8 z, g
        Create_Center();
# }% m. \/ T( d% \: i. |1 T9 [5 |0 \- C6 K& |
    UF_terminate();
" N% C6 }1 a* b7 @# `  R. B5 {}& N+ b, c9 i6 r) W; W- h5 a
8 H( r2 `# L# B. ^
1 p- E# Y' y$ y* d: X% d
extern int ufusr_ask_unload( void )9 C! n* a, D( |, I5 D
{
3 C  H% Y0 u9 O: x0 C2 o' }# H    return( UF_UNLOAD_IMMEDIATELY );
* i% o- R( `+ U, M, M, X' g}) i, d! }5 p6 i, ]

8 a; @  w' m0 V) a
7 @; k8 M! g/ T3 x3 e6 L' z/ `6 o; ?, b+ Z- B4 T
9 i/ ~2 p: F: r) I
11.gif
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

全部回复5

8

主题

58

回帖

896

积分

培训VIP会员

积分
896
 楼主| 发表于 2014-12-12 10:44:43 | 显示全部楼层
呵呵,终于写好啦
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2014-12-12 10:48:43 | 显示全部楼层
简简单单 发表于 2014-12-12 02:44
/ P$ u# x8 |5 c; M- \. y4 X呵呵,终于写好啦

4 L: u5 I3 }# f- N# ^0 E不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

8

主题

58

回帖

896

积分

培训VIP会员

积分
896
 楼主| 发表于 2014-12-12 12:01:37 | 显示全部楼层
老师多多指点才行
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2014-12-12 14:24:54 | 显示全部楼层
简简单单 发表于 2014-12-12 04:01$ ~) ~4 ^5 L6 ]+ P( t
老师多多指点才行
$ P0 v5 r8 W  D
后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复 支持 反对

使用道具 举报

0

主题

21

回帖

56

积分

注册会员

积分
56
发表于 2022-12-21 19:59:03 | 显示全部楼层
好人一生平安!楼主好人啊
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了