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 4348 5

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

5 B; i5 P* q7 h* P# U#include <uf.h>
5 m  ?' o7 u9 P7 o5 `) `& @#include <uf_ui.h>$ j& q1 `8 v4 k4 o. n" j
#include <uf_exit.h>5 q/ A' |& i3 V% i# y6 ^' L6 W
6 T/ t( Y; M6 L- d; C8 q6 c
#include <stdio.h>1 a8 A2 i$ B: t2 [8 B2 o& F+ d
#include <uf.h>  N8 X( ]  T$ C( t# u7 t' g
#include <uf_ui.h>7 B# ~% Q+ ^) n
#include <uf_exit.h>  ]: u* b- \% R7 y5 L# Y
#include "uf_layer.h"* r8 O, H  U- d% u- Z: d
#include <stdio.h>0 I$ L- g4 Z- n. r' Q" g. s# t* b
#include <uf.h>
& q: U9 E' L2 `8 }- Z+ _#include <uf_modl.h>* x- S; J% r3 I4 @' p( p: A% D6 w
#include <uf_curve.h>
. s* h! y9 k  p; s#include <uf_csys.h>+ T# W! O' V  o" C! o
#include <uf_object_types.h>
- u( Z1 O: [3 j6 ]9 C6 s% a. l#include <uf_ui.h>7 Z6 O4 G6 c' }& L8 t/ O
#include <uf_part.h>* T' V& }* v; [- X3 ^; J* b
#include "uf_obj.h"3 _/ E6 t( H, h. h0 t
#include "math.h"7 v, ]2 S0 ]7 B( z. ?( @$ u/ I' C
/ E! Z. b, J$ _  ?2 `, m9 z. b( q3 J7 C
static int init_proc(UF_UI_selection_p_t select,void* user_data)- q+ h! o6 P/ U  |* O- e6 s% N; Y
{/ ~7 u' [+ Y5 X# P% y
        int num_triples = 2; //只选择一种类型
  B4 ]! A( K4 x5 k        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,6 p4 c3 I! B9 [1 }; |
                UF_bounded_plane_subtype,1,0};: p  F5 U) z$ V* P3 G6 A! I
if((UF_UI_set_sel_mask(select,
4 O8 L2 |9 c7 B# j! x  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
$ T6 q! m1 ^2 |/ @" }% G  num_triples, mask_triples)) == 0)
( A$ U, f! ^+ n8 e: b {
  Q* t6 D9 L$ J1 X( ^1 Q& Q) f  return (UF_UI_SEL_SUCCESS);
8 k9 y; F% W, b) G2 `2 K }
) E; e- n7 I0 n4 {0 ], k! U else. }, ^: K  Z. P# @; F$ {9 {* [
{+ |9 L1 [9 {) c4 f
  return (UF_UI_SEL_FAILURE);7 x( j$ g1 G% t6 R# T" ?
}# o) j8 |  H9 w* f" p) Y
}; }% n, s$ x7 `# b3 M; a

" _; A5 X- p- H  K  V# S8 f/ v' q
, v6 U/ K# ^: D5 \  lstatic void Create_Center(void)
( u/ i" A( {* y" N. i( [{
- x" v2 l" V# i' v% h        tag_t user_wcs;$ }* {  `: n: M$ s* R  s
        UF_CSYS_ask_wcs(&user_wcs);
4 @6 P  y  U. Q8 F5 N/ \3 Y( r  e3 B% I        char cue[] = "简简单单:请选择单个平面";
" v5 r5 f, G0 a% ?4 r        char title[] = "简简单单:对象选择对话框";
* E0 i' u1 x0 z' h int response=0;
, F3 R+ e6 t; t" l6 b/ c) S3 O4 F tag_t object;5 Y5 k& f$ ?7 k: w& Q& a
int count=0;4 F& L% N$ E' i8 H4 J4 k: @
double cursor[3];
+ V# J5 _3 o2 s tag_t view;
4 X+ e$ L1 H3 i/ w6 ^, Ml10:
  |3 ^: k9 X( {: p UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);1 r2 B' `. W/ o7 z* h
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
' N( P9 |0 N4 } if(response==UF_UI_CANCEL) return; //如果点取消就退出/ r. U) X+ z$ E7 k) \& H2 M
UF_DISP_set_highlight(object,0); //取消高亮显示
7 X9 s# H" }. s( z/ M$ G/ ^. c% h. x) Y' c
  int type;  L/ q% q; O/ U5 t/ D; `1 e
  double point[3],dir_z[3], box[6];; x  [, g- g! t
  double radius,rad_data;
. a+ L6 L$ {3 s% B' K  int norm_dir;
3 `9 p8 ?) z3 c7 G( H  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向5 i' ?: H" S; }

6 X3 t3 [7 p, V- h# b7 E* R. Q8 o' _8 H2 o
/ `5 d) y" l& q# B  tag_t matrix_id;+ E7 V! |0 W4 h+ M$ T5 s. Y1 Y
  tag_t csys_id;
3 H( g& Q4 I1 m0 Q1 b8 _  double matrix_values[9];) c" p+ \6 t' f+ S
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
+ p2 Q" l4 G' A9 C; ?, F  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values1 C! l: N) o$ D) s% m
  if(norm_dir<0)        //判断面的法向是否相反. T% L9 M- [3 r7 V' |
  {* M0 ^" b: v+ t( u
   matrix_values[3]=-matrix_values[3];  A/ l& V1 V1 e, n7 r4 D0 g- u+ @' O
   matrix_values[4]=-matrix_values[4];7 i) ?4 L" w/ }7 L# p3 |5 @
   matrix_values[5]=-matrix_values[5];
& u; _$ d: j# \8 J, f3 S0 Q   matrix_values[6]=-matrix_values[6];
$ C1 O3 e5 j. X- i4 u4 L   matrix_values[7]=-matrix_values[7];
/ V. L, F: K& N) j   matrix_values[8]=-matrix_values[8];
2 C. }! z8 A/ ?- c8 b7 }   UF_CSYS_create_matrix(matrix_values,&matrix_id);
& ]2 E0 C# m4 w  }
" J; p6 F1 Z9 }1 A4 o' W7 k  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
( ]9 H0 Q) k9 T6 {: i+ Z  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)$ H2 i: a# O0 \# h. q
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)# \( \. U2 m: g: \5 X6 V3 R

9 d" S3 Y  C( d! W! o        double boundingbox[6];5 z% ?: o, d" ^2 |
        double boundingbox2[3][3];+ ?1 t& ^: L( F- j+ S
        double boundingbox3[6];
3 O& _+ Z# A$ _9 o: x9 b        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
' u+ z& Y; [: N. a3 {# k/ p
/ K3 V" ]% r. y7 i- f8 H        if(type ==UF_cylinder_subtype)
9 ]2 o  V! u- ^3 V        {
3 D* o; f9 o0 v5 A                double cyl1_pt[3];* @! I5 D! x( l) g
                tag_t cyl_line,cyl_pt;6 ]6 T+ M& r* l6 ?# G
                UF_CURVE_line_t cyl1_line_coords;
3 x, H" k8 Q' ^1 S& r                double WCS_pt[3];! c' H, T/ h3 L& y( M7 S1 h0 n3 h
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs" ?+ B+ _/ m  c( v  d
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
* `" h$ m1 g' U& [4 S                cyl1_pt[2] = WCS_pt[2];# ~( N& k" U0 u6 |3 C
/ s7 n  p* a0 ]( A' [0 e8 N# ]
                cyl1_line_coords.start_point[0] = cyl1_pt[0];) a5 \# Q5 R% O5 a# X/ q
                cyl1_line_coords.start_point[1] = cyl1_pt[1];9 Q! E1 F+ n$ u% Z1 ?* E
                cyl1_line_coords.start_point[2] = cyl1_pt[2];4 w' N* s) ~9 M3 W

/ Z& |' I7 P! V: t2 P; r) m                cyl1_line_coords.end_point[0] = cyl1_pt[0];; [" C  T1 N/ p1 ]+ n2 X
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
% A$ T4 G, x3 I1 p$ n  a                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];/ O) A" k5 w  z3 T. A& I

+ W6 f: s/ O. O$ C                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
6 W3 D& h0 Q6 G/ W) V1 e/ W                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- `' O6 b7 C( {- R7 Y
               
$ H: K+ H8 @7 x/ |! V                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
! H( Z6 S2 X4 J6 o4 H4 h                UF_OBJ_set_color(cyl_line,186);
+ `( Y& f- w* U% b- ]( X' g2 r                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
) B2 k+ C2 ^5 |2 R
0 v7 ]6 h+ T* a3 n$ x4 f8 q                UF_CSYS_set_wcs(user_wcs);8 t% V, K$ B9 B0 {/ A
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)' p" c6 I$ N. I1 m6 z
2 p7 x8 ^/ @; s# s9 l
                goto l10;+ f2 V( a' `5 q- w8 U2 |8 ]
        }
* R0 N, P5 {# q: S# R3 f* P. ^3 }% M2 D( t1 ?+ Y

& N/ d+ z) m; i: g. F4 `7 A6 O. B        double WCS_pt[3],center_pt[3];
4 ^, n5 ^4 `  V% a0 I        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
7 ~: ]3 Q- ~. \8 O# k        UF_CURVE_line_t Xline_coords,Yline_coords;* y& A+ f( y( ?0 C7 j
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
6 E$ O1 K% k& R/ H0 N& R! x       
0 S* _. `6 K5 p0 T* C( P        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
2 L- q' O5 u. g% a0 T9 z4 z        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;! v$ u, T6 A& ^% d
        center_pt[2] = WCS_pt[2];+ u5 O! [& j+ F: h/ E

3 D4 s3 n, j' K5 T* e
/ \$ |+ t- ^6 i' q8 E; O        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
$ L& r6 X, w8 O/ r        Xline_coords.start_point[1] = WCS_pt[1];! Q4 x7 o' A1 A3 l" ?
        Xline_coords.start_point[2] = WCS_pt[2];
5 f  z2 e+ v3 V$ a7 g5 G9 f4 w        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
3 ~9 _! I% d* V/ ~//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);, e# l5 y8 V0 E% A( L
5 r, O, \+ _8 l/ C' ]4 J
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
' S' |$ I& \! g6 W( k! d  o        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小" z0 K: F4 O+ ?# m" b
        Xline_coords.end_point[2] = WCS_pt[2];& ~4 {2 O  h7 B* y) `# B4 X% m8 r
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
5 Q; [2 J1 ?3 ~* H) ]" E; a. S//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);, v6 ^+ [$ R: Q& y/ p
1 p( T9 c7 j( x, a
        Yline_coords.start_point[0] = WCS_pt[0];  f0 N- Z( p7 N* ~8 H$ J4 D6 m, c
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;% i/ R* T- W! j) Z$ T
        Yline_coords.start_point[2] = WCS_pt[2];: [7 E/ w" I1 \2 ~
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
  l! ?4 w1 j  O+ F; q$ i- ?//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
4 ]5 G8 s3 `- H* N# u% z: \3 U3 i/ @/ p( X
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
+ |+ B1 T- C3 W- ~' Z/ k        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;) R% [: j6 a' d4 X: \
        Yline_coords.end_point[2] = WCS_pt[2];7 ?: ^) L' A& q& _& j+ E
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
' t+ z+ o0 W+ c3 A+ ], C" `4 e//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
- F  f6 e1 H* C, B4 W9 ?' i       
7 z1 M" U9 j6 v        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线: _- z, b! R- h2 S+ y5 Q
        UF_CURVE_create_line(&Yline_coords,&Yline);
. }; [' Y  h. |        UF_OBJ_set_color(Xline,186);        //设置颜色
# l8 [  |$ y' G7 |        UF_OBJ_set_color(Yline,186);1 l5 L! }# l: X+ t' @
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型, D! ]1 T, D- X" y$ J/ }; j; K
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
3 P/ Z; M, z2 E$ U3 y  b9 v; i
- Z- i7 `( E; o% f: l8 i- V        UF_CSYS_set_wcs(user_wcs);
" s- F! m, l2 `$ ]9 D        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)0 f, V& q6 A4 r( W& e
        goto l10;
8 e5 Q: q& |+ W, R5 I$ M  {/ \" I, q* h$ G
}
9 m0 g& F5 m6 N& ]1 j  C8 z! {4 F4 R2 r; B- v8 I
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
! n" h+ z7 s/ u3 e! y; @{. i/ C+ U0 _$ J
    /* Initialize the API environment */7 G" `- E2 v2 l& d$ P
    if( UF_initialize() )
7 z* S  w# @, l& V: P    {0 U# o3 q" l& F, q. }
        return;
( G6 L8 G- X7 ?& t8 [    }7 b. Y/ B5 {: n+ A. z
% h: `/ j% C) w  Y
        Create_Center();
; z0 `5 ^$ |: K4 u8 E4 H5 \7 P" b8 T
7 u; U( |# v" _7 W( K* R    UF_terminate();
  L7 W* P6 f# x' ~}
" ]4 x0 Q6 Q! ?, \4 R& q" ?! ]; m
9 b/ v2 R6 G& N1 V2 H3 H
extern int ufusr_ask_unload( void )
+ I* `" S5 }4 B{' m2 r( s8 O$ p1 [. z
    return( UF_UNLOAD_IMMEDIATELY );
! O& L" z$ T& n7 w8 l}
+ m* L6 Z7 q% f  w( y, ]4 B* X$ H1 p+ k* f
  Y) ~- c- |5 N

8 v, f8 L3 r4 `
, Q/ r/ m' f4 Z) s5 {1 M' E. g3 x/ S; i
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
5 O4 |- x  q4 [: e, e呵呵,终于写好啦

, H$ k. E+ S$ r* y, F% W7 Y不错啊  
上海点团信息科技有限公司,承接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:015 F8 l( Y' N' H+ w; Z5 v' p3 j. K5 g
老师多多指点才行

4 j6 w  u, y' p% i5 J/ M后面把 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二次开发专题模块培训报名开始啦

    我知道了