PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

  [复制链接]

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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
/ l( F/ l, ?0 y" ~) \0 s+ Q
#include <uf.h>( S$ k& G+ L8 g- o+ O# T
#include <uf_ui.h>
0 `  W# V! N; o5 C. d9 k: N" g#include <uf_exit.h>& z+ ^. p- d; O6 M' S+ H
& \' t1 }+ e- T& ?3 g
#include <stdio.h>
: t' i# c3 x& V& S#include <uf.h>
. i3 l- c- v" M& T) j3 C#include <uf_ui.h>; p! B' {: M/ O9 {; M
#include <uf_exit.h>4 g/ A6 n# m1 w
#include "uf_layer.h"
' W* D; n$ [( O#include <stdio.h>
% x/ T) O; a! N* ^- _3 y#include <uf.h>
0 j3 u/ }' E) I# p#include <uf_modl.h>- _5 q) _% D  v. T$ t) }
#include <uf_curve.h>
  Z. e& I+ P1 u6 g#include <uf_csys.h>
% M' N! @0 q5 X0 m8 H" B4 B: s#include <uf_object_types.h>
2 T9 ?: m* P2 V) M  t#include <uf_ui.h>
2 F0 o4 ]8 h" @' U#include <uf_part.h>
7 C0 ]! b" S8 m7 n#include "uf_obj.h": d- E/ G8 J' X7 S* m) p! n" X  R
#include "math.h", W6 ?6 ?3 ?1 e3 y% B" l

+ S7 A6 o4 Y$ X7 ystatic int init_proc(UF_UI_selection_p_t select,void* user_data)0 Y4 N# f/ z7 u. \5 c4 s
{
8 h' O4 ^; _, B# `$ q        int num_triples = 2; //只选择一种类型
; B5 j& f) y4 I        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,% H: r7 c# |( d/ @
                UF_bounded_plane_subtype,1,0};: d8 m) H& {( Y& E( `" q: f" s2 i
if((UF_UI_set_sel_mask(select,
! T) V( o4 v7 g7 i9 W  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
8 R* ]3 j% V5 l+ c  num_triples, mask_triples)) == 0)- Y, A- {! p  `) i$ u3 T" j6 z
{
* h. Y4 K2 G* b% i5 `' ^4 }  return (UF_UI_SEL_SUCCESS);
- [3 J; g& r/ ]  {4 } }* `% D3 q9 @* q: [+ {8 A
else
( L; T+ U, c; i+ o0 w# \4 { {
7 E! X. m% t( T1 y! ]6 X  return (UF_UI_SEL_FAILURE);
6 h) H: h# l3 c  K }( E; F2 O8 T2 J/ Y% H8 _
}
. I+ v6 H2 u- M  z" h$ l$ J1 {1 m2 r  ~# G' p; S

: c; @8 P  |! W7 T1 k) I. b9 lstatic void Create_Center(void)
; M0 @7 i! [0 O  R) r* ^{
* h/ e1 L# E0 I        tag_t user_wcs;* c3 E4 {/ `0 g' U" X/ F
        UF_CSYS_ask_wcs(&user_wcs);
6 O! K/ V# i; N% b1 v' P        char cue[] = "简简单单:请选择单个平面";
  e* u* E% T' o" o& Q) N  ~* v        char title[] = "简简单单:对象选择对话框";, A( n, h+ U; |  w: D
int response=0;6 Z4 b2 g" ^, G/ s
tag_t object;5 w) A8 l7 O  {; j5 }3 }" h5 a
int count=0;6 j# r9 C9 V6 K$ b( k3 X
double cursor[3];. r: Q/ L: R. g  g  v1 P
tag_t view;
# a. r7 w2 k0 R' o; G3 d- N8 al10:
5 J$ ~( a" Y& b1 T( J, Z! y UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
1 z( O) J5 }- R5 h( A( O, V if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
- `  z/ d& R* V  s& a7 d, E* x if(response==UF_UI_CANCEL) return; //如果点取消就退出
6 @8 t. j4 P8 [( W" H' g UF_DISP_set_highlight(object,0); //取消高亮显示
6 w$ A# M3 i4 x# ?4 ^# U( Q- r
3 j+ S. H$ o3 f3 V$ l5 b* o  int type;
. K( U. S- V* X# H. ?5 g  double point[3],dir_z[3], box[6];
4 ?! Z5 L% ~, j: t  \* \8 A0 Y  double radius,rad_data;/ _, d% @4 G% f& j1 h! }
  int norm_dir;
$ T& t" h3 A2 s) v$ k7 n" I  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向/ ~3 S6 a* O3 L/ M5 e  ]5 d
5 }5 r. Q4 X# ]9 l( v6 M
- `1 Q- H6 W) l: c: m2 h  a
  tag_t matrix_id;
) f" L6 ?7 `, {" s1 F! o& I  tag_t csys_id;2 |6 E' B' u% D* W# C
  double matrix_values[9];
8 b$ E' X; M  m  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID+ E6 h/ T: x) G1 v
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values/ ^8 y% b, D! @$ g$ w, g7 S
  if(norm_dir<0)        //判断面的法向是否相反1 R( @. |( ]' @1 w2 n7 R
  {5 n5 Z% G& c4 q( ^# t& a
   matrix_values[3]=-matrix_values[3];: o9 S% J5 B9 ]' [" i9 N" I
   matrix_values[4]=-matrix_values[4];9 _' x" e: H$ a& K& d9 q! s# d- a  R
   matrix_values[5]=-matrix_values[5];
8 D/ [; D  y& t$ n& v1 {   matrix_values[6]=-matrix_values[6];
2 B; `; D- d  y) f   matrix_values[7]=-matrix_values[7];2 ]- F3 g0 K' ~7 m4 ~% ~
   matrix_values[8]=-matrix_values[8];2 v( S1 B; M. c$ r( y
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
( {$ a5 _9 a$ Y9 f  }* d# w- g3 k& h8 e8 s
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);; J/ e  \% _$ ?1 J6 C8 ]5 }5 x9 C
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
; A  q+ U9 }/ ?( I UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
* A, l( @5 }& o2 h: ^1 z( Y& U8 ~/ A# I0 a0 }. o5 o1 u
        double boundingbox[6];! r1 E' v7 i" `2 L; n
        double boundingbox2[3][3];! R* o3 B2 x/ S6 r3 z$ x3 I
        double boundingbox3[6];
1 p6 L4 V, G4 }) W9 w) L1 t% |        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);; l' \: e9 M% h- p! R' w" I; m* j
& r( G( I" f5 @
        if(type ==UF_cylinder_subtype)" e# v) t/ ~  @+ v4 J3 _6 y
        {
) N6 i( O5 i! `' i                double cyl1_pt[3];
4 w0 r1 K' {7 u8 i. [                tag_t cyl_line,cyl_pt;
5 ]. N2 h3 K  J0 `& ^6 Y                UF_CURVE_line_t cyl1_line_coords;* w& a7 U* _: [: v
                double WCS_pt[3];0 R; ~2 B2 g0 {
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs2 K1 \' j6 L8 s  d
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs7 A8 F: l/ W  ?4 v' l* U; F
                cyl1_pt[2] = WCS_pt[2];' _) ?/ U" B5 Q6 Z4 @
* Z2 x9 U2 @4 ]2 I/ F
                cyl1_line_coords.start_point[0] = cyl1_pt[0];  w& O# J) j, a9 h  Y
                cyl1_line_coords.start_point[1] = cyl1_pt[1];
2 a" Y  B2 c9 v: q& `# R                cyl1_line_coords.start_point[2] = cyl1_pt[2];
2 H& E8 H% j; S" f6 y! h/ U  ^! H
4 Y. }& G- G6 O% U; p4 z                cyl1_line_coords.end_point[0] = cyl1_pt[0];
) @4 k5 Z8 @6 j, s6 @" }                cyl1_line_coords.end_point[1] = cyl1_pt[1];
- e( Y: ?( [+ k5 {- g6 E                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];6 U, K$ t# E: J$ B
8 t; l" E  E) o  e
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
, c5 i' }2 Q. C" L* }0 S, p                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标. A, u, d$ Y. s/ j
                * Y9 ]- V7 P" N, @# }: C
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
9 S" V3 k5 i8 G+ s& A2 U- Q                UF_OBJ_set_color(cyl_line,186);! O. v! D0 P7 f: E
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
, s+ A2 ?  ^4 C6 y5 H  ^
! G$ ~. w; k6 a0 B: h2 ^& P* b                UF_CSYS_set_wcs(user_wcs);7 Y% O- t; X7 G- r
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
' X* ~( h# h1 ~, b: F' K0 t( P3 L$ W$ D' e( h
                goto l10;" L: Y) G! H9 S  I) ?4 k: B
        }
) |: j7 Y) Z  M; V4 Q* e; y5 D) }0 `2 |% b" ~) |4 J- a2 I1 z9 V5 H0 b
! _  Z- K, `5 n. U8 {1 h
        double WCS_pt[3],center_pt[3];
, g' k& b6 c, y+ }7 Y6 c9 ~( w$ {" I        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
3 I3 S/ q" k, R: k5 @        UF_CURVE_line_t Xline_coords,Yline_coords;3 V  L) }* A" F0 s5 U
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs, [+ a$ b" I9 f" J# _/ I% o
        / T! c7 y- I0 c# @0 h
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;4 R( b  u, p0 n: j( |
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
& O( N$ B& Y6 l0 Q- V' |& n        center_pt[2] = WCS_pt[2];$ I9 P  l; z  ~& Y- B/ s
' W* J" x* }0 ~( \' u

" S* s" S& d5 S7 n5 [        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2: H. w3 _* S9 k/ r- R
        Xline_coords.start_point[1] = WCS_pt[1];* r) d6 y+ Z4 R3 c! S( Z
        Xline_coords.start_point[2] = WCS_pt[2];
, Q) j) X! H/ V0 c        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标7 W4 k8 _* i9 k; _/ H! V- J
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);/ `9 K! C7 A; _+ J. T3 s8 g
8 i6 J. F/ N+ h
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
( v" X2 N7 B# u: S1 V' v! D3 S        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
( p" x/ Z: T! N* Z        Xline_coords.end_point[2] = WCS_pt[2];( W) O- r5 Y% E9 P
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
8 F( u6 h# a! b//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
- @6 h* U# s6 d* \5 d8 ~) t* p0 U9 Y% M, s$ U. Z) |
        Yline_coords.start_point[0] = WCS_pt[0];1 D3 F  l" e/ g  I
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;( Y: ~+ [2 p7 ?
        Yline_coords.start_point[2] = WCS_pt[2];8 ~! |1 y: t7 v' w/ [3 J
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
8 s% |6 s, W6 Z! k( n( d, M//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);" k5 i: `; t) {" P. C
' J6 G; r. I/ y" S- e
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
) D% Y; H% v  b5 {        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
5 }4 D: W  N! c( u7 n& `        Yline_coords.end_point[2] = WCS_pt[2];) N1 k, o9 A& ?
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
1 S  i- |0 v& r% H( q7 G8 ~//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);  I8 A' p6 e! k. B' o# T) N$ C; l
       
& X6 B, y- Z+ @8 ]) a        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线9 O# O. m# U+ J% {' n7 p* K$ g
        UF_CURVE_create_line(&Yline_coords,&Yline);  y8 l* f) t+ ?5 N) A6 l2 e6 j1 Y
        UF_OBJ_set_color(Xline,186);        //设置颜色
" j* m& l& _! A- H        UF_OBJ_set_color(Yline,186);  [! R4 ~% l' J" c, M
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
7 a- [  E6 ^) y/ S& W( B        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型9 p7 M+ a* |- @6 D: S/ `4 J
7 N& ]4 ~  n& Q5 }) c
        UF_CSYS_set_wcs(user_wcs);* F8 F0 t# p9 \8 o$ G$ B" i
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
: d% ?2 k, Y+ a        goto l10;- Y1 c- i3 q3 i+ W7 O& s
0 T$ I: K- p2 s4 K/ E% K& F3 {) [
}; ]" Y+ O. c. a- i* b5 S7 y

) w3 W) e0 x' B7 z* `extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
3 X6 [0 t) l! q; |$ W{
5 q. g5 h& V; C0 v: h    /* Initialize the API environment */
2 I0 Y: _  a$ [3 j; J9 u, ?) o    if( UF_initialize() )) c- c' w3 I9 [1 B% u
    {2 C/ Q$ E  A# B/ Z4 y. H$ y- ^2 J
        return;& ^: I9 T: _0 w( e
    }, Q: S' l( ~9 E6 R
" ?5 r7 z2 t, T  F
        Create_Center();
/ s3 O1 u/ Q$ r8 T( }
% u+ u+ s- ]* w    UF_terminate();4 M6 _2 f* _  K+ r
}
  \$ U0 n6 V: ^2 R% I) A# t- p7 z, z
0 n; D4 G6 d( Y+ h  h3 M- o
extern int ufusr_ask_unload( void )7 m9 c6 r* {8 W/ u8 N! u
{
: s4 W. `0 s8 B& R: b    return( UF_UNLOAD_IMMEDIATELY );
1 v7 e& S6 G& r) u$ l}
8 N# o  M9 c- Y0 I) T- e2 c" r0 E' C, _# Q% ?# E% |* z2 P

9 G0 Y& }( W0 A4 m- k. H6 M8 o9 D0 S! C2 j' d) T6 j7 o/ c
, `/ r  H9 q  r% U' Y8 c
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& }- }9 L- J$ L. j) k9 }7 y2 j
呵呵,终于写好啦

1 Y/ R1 t' R7 v+ f不错啊  
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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/ R+ J4 D& w% C( Z1 H  f
老师多多指点才行

2 B6 N8 w  Z5 I, K1 w* K; Z) D后面把 UI  加进去 就很强大了
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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二次开发专题模块培训报名开始啦

    我知道了