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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
, A/ |# K/ H' H* \
#include <uf.h>
; h8 s# u! T- V/ S' t& n' w#include <uf_ui.h>
' ]# I' ^: b* M- |+ x' S#include <uf_exit.h>
( |9 J; Z) D5 p; i3 }6 J( S. A0 u
0 n# h) d) y" @! s7 ]) ?% E#include <stdio.h>
1 E% S8 r; U% z# `) ^#include <uf.h>
6 a1 x6 j4 y/ U# p; F#include <uf_ui.h>$ G  n3 x4 S& O" O
#include <uf_exit.h>
7 o9 M. o0 M: O9 z; s0 A8 M* {" x#include "uf_layer.h"4 r& s! j, l: z8 t6 q, E
#include <stdio.h>
  G6 ]& J3 c0 A  X#include <uf.h>0 }" e+ O1 @. U: L+ @! F5 s# j0 Y
#include <uf_modl.h>: K2 p- A7 M4 E3 C, }, _
#include <uf_curve.h>% p/ s, l* [- G  K
#include <uf_csys.h>
% k" \' r5 g8 X: H#include <uf_object_types.h>
* h. m* k5 X. y4 U#include <uf_ui.h>2 t" W/ D% Z$ l. a! Y( y
#include <uf_part.h>3 J& Y6 O1 l% O- O6 U1 \# G
#include "uf_obj.h"
) K- ^. l, J1 M$ O8 J#include "math.h"4 @1 J# J5 ~$ q. q. N

' D9 f, B" y5 }8 Nstatic int init_proc(UF_UI_selection_p_t select,void* user_data), E% g. s4 m0 z; A, s
{- H) m: g$ P, k- e; N) a
        int num_triples = 2; //只选择一种类型: p- Y7 ?; \/ }- m5 {% z) _5 O4 E* @
        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,; Y* \5 [; @! N* k0 e
                UF_bounded_plane_subtype,1,0};
$ I9 E1 [" ?; T4 \! H  A1 F if((UF_UI_set_sel_mask(select,
. u  _+ b7 u. B9 W  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,7 l* V, r2 ~% Y/ i, T
  num_triples, mask_triples)) == 0); k4 s% }# J# C: P
{
4 |6 a4 ^5 a6 s( r8 o  return (UF_UI_SEL_SUCCESS);$ B7 Z# I6 b2 t7 K# g$ J) m
}: v, @3 S1 b8 T7 ?
else+ a- W# [: C  [
{( E6 P6 i, h8 U$ x3 r; n
  return (UF_UI_SEL_FAILURE);6 A% `1 |. N9 g2 i% \% D/ d$ q
}
+ `$ L+ c4 m9 S0 S' H}5 E; n8 H1 m0 W% u# L
; b5 ]( g$ ?" V" b

  R4 p8 C3 a" R7 ]: a% kstatic void Create_Center(void)2 @* \5 n7 F- D4 c. R9 k8 U
{% z9 h1 z1 t, t) F
        tag_t user_wcs;
8 T4 M5 {+ r1 X# E3 i" t7 R- T* y0 q1 J        UF_CSYS_ask_wcs(&user_wcs);- C: u1 T! O2 {4 {; M4 h
        char cue[] = "简简单单:请选择单个平面";
3 [  u' r3 ^' a9 o, b7 d7 C        char title[] = "简简单单:对象选择对话框";& q0 J2 z# r- @- g* ]. _
int response=0;
' [8 E+ X  D3 l) |- ] tag_t object;
, C& i6 R8 U( a' K3 i# S+ v3 j. S int count=0;1 u3 r9 D% H+ M. ?$ C: _
double cursor[3];7 W5 Q3 C" `+ Q& [4 c) u" n; F# q
tag_t view;
5 `' o9 S9 Q" p5 u* z) D. hl10:
" l0 ~: h) a5 w: O1 o( D8 W. Y UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
/ G/ M5 ~5 `$ _4 V- P if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
- }8 u! C3 t) ?# y8 U# P if(response==UF_UI_CANCEL) return; //如果点取消就退出/ b1 a6 E. v& N
UF_DISP_set_highlight(object,0); //取消高亮显示
5 j; v; x: G' `* _( D
2 p$ ~( W* [# Y  int type;
' _, b: s/ E- U" @  double point[3],dir_z[3], box[6];% n# G( }/ G5 q2 Z: I5 Z/ Y1 v
  double radius,rad_data;
1 a6 m) y5 H8 V6 P" s  r. q+ a  int norm_dir;6 |8 T/ @/ d6 F6 T
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向1 B* T! }0 x6 S0 g

" U3 h) `/ x/ z6 z* y$ D' D2 u* w) `( d# [$ p( f9 W$ V. @
  tag_t matrix_id;
8 o3 }- P1 s% O: A7 g  tag_t csys_id;6 u" V1 J" v5 H# Q, _9 S
  double matrix_values[9];, J$ G# H& X+ `1 j6 a" n* z
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
4 {! q( p9 A. ^7 Q& X  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values& t: C5 s7 s6 j! }4 A
  if(norm_dir<0)        //判断面的法向是否相反
5 d' {! i3 X- c4 B# o/ J- l3 C3 b- J/ r$ w  {* O+ \( h) k7 Z5 a% [
   matrix_values[3]=-matrix_values[3];- z9 C7 \5 n2 g7 @( \) j: F  i+ b; t
   matrix_values[4]=-matrix_values[4];
& G2 l7 _; g$ e$ ^% C) O" x   matrix_values[5]=-matrix_values[5];; K7 h2 ?+ D# E5 G- [$ G
   matrix_values[6]=-matrix_values[6];) j% @& ]5 {" B/ v: m8 C4 }* j" l
   matrix_values[7]=-matrix_values[7];
+ ^6 o; u3 ^# j5 p$ }' p   matrix_values[8]=-matrix_values[8];; X1 [4 Z1 I" I8 f5 [& `4 y
   UF_CSYS_create_matrix(matrix_values,&matrix_id);
- j3 l5 \1 _/ u# ^+ n0 v  }
* [6 f4 Q' _/ p% E3 ~  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);8 E/ G) V2 C: r: t; i3 ]
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
3 b8 S" Z( F- X- d0 w- M0 Q8 m UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)7 e6 b. X& `. u. ~# U+ O

4 V9 l% [+ }" d5 D/ ^1 W8 r        double boundingbox[6];
4 d% N' \8 P" k: z! M/ p        double boundingbox2[3][3];
" q$ Q* R" L$ ^) ^2 t        double boundingbox3[6];" }) \# H) |7 U  O: z- n& L
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
7 N; R5 J% ]/ h6 O' j' m$ e
( e" G+ N7 y9 p3 ~5 Z6 s5 h% c5 Y  Q        if(type ==UF_cylinder_subtype)
8 r" h, k& Z; `. ~        {# M8 x0 `0 @9 u$ E1 A
                double cyl1_pt[3];& k7 p4 a( j8 s/ A
                tag_t cyl_line,cyl_pt;
9 G# i1 }! j- L  {& ]                UF_CURVE_line_t cyl1_line_coords;
) x5 q! R! \4 G1 Y6 x* Z. d                double WCS_pt[3];
0 I! E6 L& c. M( F' g' N& s                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
2 t+ |3 F1 u& ~# x3 l                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
* _; q$ m( ]4 C; v* j! D, g                cyl1_pt[2] = WCS_pt[2];
/ v) q; h0 x2 Z) S0 v
9 B! A' @+ J7 G! o7 `7 m$ \7 @! s% Y                cyl1_line_coords.start_point[0] = cyl1_pt[0];
! w9 d* `1 v  H$ P                cyl1_line_coords.start_point[1] = cyl1_pt[1];" x5 r5 [9 S2 r, g; E% z# w& {
                cyl1_line_coords.start_point[2] = cyl1_pt[2];0 h% B3 f6 g: c9 ?) B
! s" J9 U: o$ \3 o! S
                cyl1_line_coords.end_point[0] = cyl1_pt[0];4 A7 u  |8 o6 L* G' ~5 y1 T
                cyl1_line_coords.end_point[1] = cyl1_pt[1];9 n  h) t7 h) Z: e9 y: s7 y$ I
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
. d& `" n0 g+ G5 `4 N) A" Y* K8 S9 o7 @2 @
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
0 R% L/ T0 D7 @5 U; k5 i3 a) I                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
4 R; ]) Y/ X# X4 z5 J* l                , Q6 E. t) z( c
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
& O( m, D$ |! n5 P7 q5 o! E6 d, i                UF_OBJ_set_color(cyl_line,186);
7 s3 J) }% y# e$ I                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型/ V! i. e1 s2 w7 v
& |$ U; i. a( X& m1 {# m8 c$ H1 T
                UF_CSYS_set_wcs(user_wcs);  Q: g, }4 x) {0 }% _7 H2 t( Z
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
! P- |7 s: w4 X6 w9 `2 \8 j% B+ c% b; C/ S
                goto l10;
0 R4 Z) H& h: Y  @" t        }
- g  p. ?" ?7 j+ m" F, `; N. ^2 f
  D  S" V  B1 Q7 C, I1 u% |0 [' x- f7 H, W& |/ e4 A+ M& P9 }- t/ o. y7 g
        double WCS_pt[3],center_pt[3];
5 K4 c/ H/ s# n5 i; G* {        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;5 f/ `1 w0 q7 ?0 ~! _" J# w
        UF_CURVE_line_t Xline_coords,Yline_coords;
6 k$ ?% I; G' I! O        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs  ^2 ?0 V: k# A
        1 R/ E. X" [" p
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
$ \9 ]: D0 F$ w; ~        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
: v/ J1 t/ b' K$ X9 v, n, P3 r; f0 m& c5 h        center_pt[2] = WCS_pt[2];
  c& M7 u" V6 s& j% F# R8 n3 v2 D( n0 W" L
; Z. B* W+ S% h( I) l8 B4 ~
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
6 D  w' Q7 x* e        Xline_coords.start_point[1] = WCS_pt[1];
: {8 N' }0 R/ o7 B0 U; b+ c% s        Xline_coords.start_point[2] = WCS_pt[2];9 z% N6 p8 `- h$ X, t2 W
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标- {6 P9 n0 b, [  d/ N
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
5 t2 a- @, ?  Y2 P5 S$ P
6 h% ~) L% B8 I8 r        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
* ~7 u1 y7 d/ ~+ a% i4 L        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小5 U$ U( I$ g2 J' U
        Xline_coords.end_point[2] = WCS_pt[2];! @# n) X9 z) ]* P+ Y
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标( a1 ~' n! @) r8 L  o
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);0 w& [& |) W# ~& i/ h( ]

0 s5 V# n8 D3 |7 R' B  ^  \- a        Yline_coords.start_point[0] = WCS_pt[0];( e% y9 a* I( p' s& T4 y
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
8 e; i# I# _- [+ X3 t( b        Yline_coords.start_point[2] = WCS_pt[2];( i! \7 }7 c4 k# e
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标7 m2 k8 w+ x, X' w0 ^6 f
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);) |; }8 Y6 t! }
; K1 W) F6 e3 `& z
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小7 S7 K" B  K7 r- ]
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;( ]6 a* g& Y2 h
        Yline_coords.end_point[2] = WCS_pt[2];5 Z8 _7 y! k  x0 M. w
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标8 A% K* G" f: ^4 O
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);" k; s$ W  v% R7 b' E# `
        2 k' ], z  _3 M9 x5 A6 O
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
' B1 i4 {2 F+ S2 J& x& _        UF_CURVE_create_line(&Yline_coords,&Yline);
! D/ R1 R  A2 w! c4 b; O        UF_OBJ_set_color(Xline,186);        //设置颜色+ z) v1 y) m/ Z$ x, j0 n
        UF_OBJ_set_color(Yline,186);
/ B5 K; `0 H- h; |! w0 Y7 Y        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型" Y3 U2 Y6 d& R/ E. [2 }+ O  G
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型; N- D/ F; H, t% v1 J8 L# [! f

6 T+ ]8 Z& e7 j  P' O: a        UF_CSYS_set_wcs(user_wcs);: q* h7 P+ S0 k% l$ ?
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
( Y, M0 P5 `, L8 M        goto l10;4 _+ Q" b) f) X# Q( Q7 E% ?

0 V* S9 d8 M8 J0 Q5 K7 B- R7 D}
1 ^& ]0 d5 A# |% u# m+ G* a+ W* r: A$ U5 Q. c* u4 z
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
/ b8 h) ?4 k# D{, w: e3 R* R, Q; |. J) g
    /* Initialize the API environment */
3 Z! w! _; @1 P6 x" D8 b    if( UF_initialize() )& R9 I, O/ g2 U/ G6 V& \
    {
. ?  I9 s, O& Z        return;
2 ~7 w' y" g, Z- X& B/ P    }
! e" Q9 U* C+ Q, P% |. u$ Y0 H+ Q+ H5 n6 Q& _" K
        Create_Center();6 s; ~! t4 C" T" k% g
: t' o" L: B4 a( w9 g0 e: X7 D
    UF_terminate();
7 V* Q* N6 J8 X}
+ G; k& y9 y# \% R5 J+ N9 J: i- l7 i
8 f$ z4 E7 ~7 U4 ]" M" v7 \
extern int ufusr_ask_unload( void )
) v- J* w( q. M. N, n{
) I( @- N& O% N8 N    return( UF_UNLOAD_IMMEDIATELY );# H& N" y. r2 Z
}/ Q+ T. p/ p3 |" {! J- L

5 `/ o/ @. h9 M) S) Z$ t
1 n' Y% E6 l  B9 L' C) q5 z2 X2 ]$ D0 M

2 @! X, ~- m- a; H  e; _
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
8 z0 M+ N( Y% Z呵呵,终于写好啦
7 O4 ~1 k5 G" ?7 n6 ]6 i! U' c  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:01
/ ], D' s6 X0 i老师多多指点才行

  j# g: A1 ^2 x后面把 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二次开发专题模块培训报名开始啦

    我知道了