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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
# g" U  K3 p& z6 S2 a, y
#include <uf.h>
1 R' {- ]9 X* f: L#include <uf_ui.h>7 K5 O0 u5 C% L; ?5 Y
#include <uf_exit.h>! C' c; }: p5 M1 Q2 g' K: S# w

- T2 F* o) x$ U( B9 ~; f#include <stdio.h>2 `# B/ q, K$ x0 B/ t
#include <uf.h>
; q& d2 w2 F2 _& A#include <uf_ui.h>1 o& ^) y5 M) z; W
#include <uf_exit.h>
; \. G  u- c6 X7 }& h  n3 |#include "uf_layer.h"- r7 k; \) ]- h; s" @% q4 ?% }
#include <stdio.h>
2 H4 g; q! u) a#include <uf.h>
( q- J3 N% S9 f0 W8 a1 N#include <uf_modl.h>" ?: f# n  [! Q& G5 Q3 v
#include <uf_curve.h>; u7 k$ e# L9 t: U0 U
#include <uf_csys.h>
4 R( {* U2 b, a% T: Z! V: D  g#include <uf_object_types.h>5 g% ~& W. ~3 k3 y' {
#include <uf_ui.h>, P5 D9 h1 f3 _1 M0 |7 r
#include <uf_part.h>
3 s7 @1 J/ r7 Y#include "uf_obj.h"
# L) r% `9 \8 A5 C- W, ^  W: O$ h#include "math.h"
) c$ [  }5 L0 e0 C" R; {( A9 E4 v$ V2 K) Y$ O
static int init_proc(UF_UI_selection_p_t select,void* user_data)2 D% ?# Q( Z) q1 ~! L+ ~# ]
{
2 N! _8 u1 V. ~% ?) k        int num_triples = 2; //只选择一种类型
4 W' m, D) t- P/ x$ u' @        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
6 J! @* G" W# \8 C1 J) r- q) W                UF_bounded_plane_subtype,1,0};" ?# W% v: x9 x& s7 G8 m* \$ R
if((UF_UI_set_sel_mask(select,/ j( A" r7 w  I( S* {
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,: N8 _( }& V7 P" s6 h1 e% H
  num_triples, mask_triples)) == 0)( ~/ b+ }0 i) P* ~
{' M8 A, v. ]- Q+ W- A1 c' ]& z& d' ]
  return (UF_UI_SEL_SUCCESS);- q7 ]* J  k* z% K) O! }
}
* x& F; z$ |! t! @4 |* o else2 Q; |+ @+ D" n9 B1 r- ~
{; V' T. \  e% U" [: Y8 o+ n
  return (UF_UI_SEL_FAILURE);) x' r. K, {/ `$ |" j& T! L
}/ n' b( w, L) E9 g& V' q
}9 q  X) F) e5 y6 j7 k
" u- s" S  U9 ]3 |! B6 t, W

% q3 Y- f3 y/ ~$ [8 Astatic void Create_Center(void)
2 D1 D5 p% e7 ]{
+ }4 m. ^( N: B        tag_t user_wcs;6 Z) N1 Y! y$ L3 G4 a  ]
        UF_CSYS_ask_wcs(&user_wcs);% c/ o) U8 q. n' [* b! k+ }
        char cue[] = "简简单单:请选择单个平面";
0 ?; \4 ^, X1 O# |7 s) N: q; |6 y        char title[] = "简简单单:对象选择对话框";# P0 r8 p4 H+ K8 {
int response=0;
6 K# K, y& W" b' K( J tag_t object;
, u) t% Z  N  M; ]) g8 e% ^ int count=0;
! I$ f4 c  f+ ^4 C& ` double cursor[3];! t7 i, m" T2 D8 d
tag_t view;
7 E( g  i- {- o% b  e5 a) ?. El10:, A% d+ O) J# D
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
9 _4 E' w5 r0 @, r2 }! s if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
' U1 j0 H& \) g% A1 Z if(response==UF_UI_CANCEL) return; //如果点取消就退出" Z3 t0 w" |% C/ L  n# ?
UF_DISP_set_highlight(object,0); //取消高亮显示5 B" a' A6 Z- Z; ^# X( O3 x' f: ]
4 h1 C. P( Z( w3 ^7 T/ V9 v
  int type;7 E$ d  e: J  @  W  R% }( p* N
  double point[3],dir_z[3], box[6];
4 j5 N( x/ G+ s6 {2 Y  double radius,rad_data;
  j+ @, O' r# g& k# t; D  int norm_dir;
: |3 q& \( d0 E# S# y" J4 h  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
2 X+ e  n0 ?3 l
7 D! z! _# S6 [. Q7 D1 _! D
& o( x! \1 z. J2 V- R9 M  tag_t matrix_id;0 a/ H% N' p- x( f
  tag_t csys_id;- V& M; Z  `8 \1 o
  double matrix_values[9];  N/ A2 ]. Y3 `4 H
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID& ]  W, @: e/ |3 e5 w
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values
+ N9 ]1 }/ i0 B. N. L  if(norm_dir<0)        //判断面的法向是否相反3 q4 D8 t7 F$ Z+ u$ M( B* ?
  {
6 m# b% o8 o0 w5 N4 ?! s   matrix_values[3]=-matrix_values[3];
7 {: f, e! _" r! n! U   matrix_values[4]=-matrix_values[4];
/ J+ q2 O$ f; t/ j+ Q: |' C   matrix_values[5]=-matrix_values[5];" o0 R/ y$ |) k& T7 q9 p) G$ K+ {/ z
   matrix_values[6]=-matrix_values[6];
3 j+ C3 C2 W2 ~( ?   matrix_values[7]=-matrix_values[7];; ^% {2 ^3 j0 |$ m0 p& G, q
   matrix_values[8]=-matrix_values[8];
5 k. L2 c+ s/ D: d& g   UF_CSYS_create_matrix(matrix_values,&matrix_id);
% a4 H+ h+ {1 @; z7 z& W* W* p: a: m  }
; q( O7 J5 _/ X/ G3 f& t  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);) O( X6 ~- k  H* o" m' T: {0 Q6 W) h
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)2 P4 V8 K3 g  c( b9 M- E
UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)' w. S5 w8 X& |2 m% P, ?" J
; \& y; g* ^) h$ a
        double boundingbox[6];% K  K  b4 Y( ]) A. y2 d' h
        double boundingbox2[3][3];
! y3 G5 _0 I! s% s, w9 a2 Y) o        double boundingbox3[6];- [- j( T* F3 i- [
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);7 F. g6 `( P7 e5 A

& g  |& y+ \* S% x& Y9 e        if(type ==UF_cylinder_subtype)
  ?  \& S$ E. U7 z% _4 V* Q        {
/ v8 a# i/ k+ A                double cyl1_pt[3];7 \2 m# |% S( [# e6 F7 b( n5 I5 m
                tag_t cyl_line,cyl_pt;$ O  q" a8 U/ C4 M1 \, v
                UF_CURVE_line_t cyl1_line_coords;/ G- h, ~, Y& D
                double WCS_pt[3];2 _" ?; ?* [2 m) K6 S9 |' {8 e
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs+ L/ U$ n4 t7 C% x- ^6 n
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
6 T0 o+ U( o$ a1 U# p8 n+ L                cyl1_pt[2] = WCS_pt[2];
8 V8 C3 G( h" d% |5 z+ }" x  U/ D; [, }- j2 r0 w/ W$ x( k* Z( S
                cyl1_line_coords.start_point[0] = cyl1_pt[0];6 N' o7 b. U2 c9 D' h+ o& U
                cyl1_line_coords.start_point[1] = cyl1_pt[1];
% G$ M7 n; @  F3 [3 E                cyl1_line_coords.start_point[2] = cyl1_pt[2];
2 A- T$ L- S3 d5 r- {+ B
/ Z( R# x7 f9 n- _" r/ y/ l                cyl1_line_coords.end_point[0] = cyl1_pt[0];+ x7 d8 E! T6 I5 Z$ W4 [
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
) t6 b$ n& p; C* _6 ]                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];" ]  W4 `8 }; F% i& D

5 s; z/ `, t6 V) k                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标7 }& t% e% V9 s/ A5 U+ x1 P5 ^
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
5 N( e6 c9 b  x3 V2 ~9 A$ S                ( R( v6 K( e2 R' F. ^
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
' w2 P% N% a( K( d6 ~, R( |. g                UF_OBJ_set_color(cyl_line,186);( p+ ~% K* P5 L1 j$ e* E0 V* {
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
$ w: d1 g0 a; \; q' ?  d- c  J. D( K! {0 \
                UF_CSYS_set_wcs(user_wcs);
5 w& o# N3 d* M6 G! E                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)8 B& I) w, }$ P7 O: \2 U% V' T$ }$ ~

2 u+ w( D' o/ R* r* M4 [& h  c                goto l10;: R8 g; K' E8 e7 y& x
        }( p7 ^  X/ P3 p( M6 x4 I* R
; n, y: A; g  |$ `* a8 Y

4 J7 U# n! D( e1 z% v0 [. h$ S0 f        double WCS_pt[3],center_pt[3];& y1 z* B$ A7 V+ G4 V
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;  v5 m3 F  i0 L2 w  m
        UF_CURVE_line_t Xline_coords,Yline_coords;
0 N5 i2 w& J6 B4 i7 A2 }6 Q        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* R/ ^6 H' Y% Y) F
       
: H& K* l, X- j2 g, N        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
# a" m) B" N9 Y; O9 h        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;) B/ [3 L5 E; U* a7 ]# A/ q
        center_pt[2] = WCS_pt[2];
* H! Y+ }1 q8 N7 _" \9 o, T0 P; G( E2 p" ^. q7 n/ z
1 S$ G# `2 t" a1 |3 K, g
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
' Y4 j* h3 {* [        Xline_coords.start_point[1] = WCS_pt[1];+ U2 r( u# O7 W: c
        Xline_coords.start_point[2] = WCS_pt[2];$ A& n# F# B# j% a) z
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
" v: @# z3 v( \/ r% @9 Z% _9 e//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
% q/ N  G/ {) }. f, A! X$ j5 B3 R6 ]& q, t3 C7 z' Z& O
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/23 ]) F2 ~  ~# E' u- R
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小! \1 S- ~; e! }5 F
        Xline_coords.end_point[2] = WCS_pt[2];
7 [/ e8 ?; g5 o        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标& _1 h+ B1 y2 g5 o% u4 S
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);. r6 m! l5 h2 o  }
5 x- m8 u) W/ b- o
        Yline_coords.start_point[0] = WCS_pt[0];# ?) a$ V1 L: U" C7 s& I# K0 M8 R7 T
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;* T1 ~: Q* I4 I( G5 J; B% O
        Yline_coords.start_point[2] = WCS_pt[2];
' d4 K& i; Q' w# n        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标! }3 c( \6 {: g  k7 H% C+ m. y
//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
6 A# b( K2 j% h+ e" N6 ]
0 F+ [' E. _8 V& P% ?        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小0 q9 q; b0 w" ]+ \  k0 c5 j
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;1 x( V3 c- s3 }& P; l& v! f
        Yline_coords.end_point[2] = WCS_pt[2];% _: {  F- b  j% {8 p  c# c
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
6 m8 O; ~+ }2 z# G9 ?! q//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);4 @3 i3 v& \  m) X. a  l
       
- q9 i& F+ _# L; c5 O        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线9 \, T. f2 Y7 G( N) H6 i5 p
        UF_CURVE_create_line(&Yline_coords,&Yline);" z5 W9 S% v5 Y) u, z/ |* \+ W
        UF_OBJ_set_color(Xline,186);        //设置颜色0 A6 Y* Q7 {' g4 T- p1 c5 i' ^
        UF_OBJ_set_color(Yline,186);
0 ^( G( d. U% q! |        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型
* x8 i  \2 W6 ?' e6 a& J        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型8 A2 r( F. ^9 K# e/ s

7 a; f( x# w5 _        UF_CSYS_set_wcs(user_wcs);
$ _  b$ O; f! |0 d        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)7 C& Q# d$ A" _# M8 f
        goto l10;
/ a1 D# v' T! ~7 A- V
( l! T5 ]; F2 |" \9 Z: C}" o1 ], P2 G; b. \; a! O1 T& Q

1 A( G, X4 b; n* z1 {# q, P- Uextern DllExport void ufusr( char *parm, int *returnCode, int rlen )
- d5 H7 X/ j+ ]8 H) s9 r. D$ l{
+ y' f" a% q! g$ n    /* Initialize the API environment */' o' K$ w* S$ R
    if( UF_initialize() )/ y* ]* t& ^6 e- N" H
    {
' l. E* u, A  y* q2 ]        return;
1 E" X/ [  k' {2 P% B9 M    }
- E: L- g" X' _$ g8 T' T
% x3 W, L' L5 W7 ]/ Z5 d+ }        Create_Center();
3 Q( p# B1 ^3 r
# F% ]: t" S8 _" d7 r) g8 U, L    UF_terminate();  R, _) {8 O: ]4 S; t1 {! [
}
' K% ]& V9 w5 \2 }
+ W# K) w. Y/ C" N" P9 ]0 |# R* U" ?* S- e
) J5 b$ d5 {9 m. @" g: Eextern int ufusr_ask_unload( void )
8 ~  o) L3 K9 p7 }6 X/ `{. ~6 ?+ n+ G' a; M# U9 r# r
    return( UF_UNLOAD_IMMEDIATELY );
, p- R5 q; T) S5 @) c}$ k. B4 S+ X- G

) l1 X( N; U$ L' h
* A( v, |) F6 k1 ^  S' a+ K: J2 Z0 S  `% X. ?+ M
6 a8 d7 Q9 e( X  ?( b+ H5 v
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
+ n2 {, N. i# a! u- s+ q0 t呵呵,终于写好啦

  r7 m) [6 g" N. ^  w. A: d不错啊  
上海点团信息科技有限公司,承接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:018 _' V4 @) [0 [. G
老师多多指点才行

6 N9 M. u1 }5 D* G1 i后面把 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二次开发专题模块培训报名开始啦

    我知道了