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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

2 C# f& r# Q8 M  S3 D8 U' p% j) z9 u#include <uf.h>% {' j2 B6 Z8 b4 U' n
#include <uf_ui.h>
) j8 G& I+ g5 q5 ?4 M#include <uf_exit.h>( C3 O$ Y8 X2 v9 y0 }
4 V0 r/ @+ T2 c. x3 @. u. S& s
#include <stdio.h>
" q  e8 h: Q2 ]" F5 y#include <uf.h>
; [4 x0 @( H2 U, f#include <uf_ui.h>1 q+ T; o( e" A
#include <uf_exit.h>
* y7 A: K. |" d$ I#include "uf_layer.h"
$ [- p7 H2 L' W" {#include <stdio.h>
& x: Z9 e2 ^; n  q7 r) H#include <uf.h>' |: `" x- H. v8 Q
#include <uf_modl.h>3 a  h& q6 q" y1 e( v# z
#include <uf_curve.h>
6 U: ?6 o& [. L1 Y% W9 j" V#include <uf_csys.h>
* C% R% l& f! @, b* _#include <uf_object_types.h>0 s8 [1 g3 C3 K% Q( Z3 g9 \# G8 k
#include <uf_ui.h>
0 d/ A+ l- W5 N#include <uf_part.h>  |, i, c$ t3 L/ E  c
#include "uf_obj.h"
7 c, F8 u1 b6 K; [" n! L6 b#include "math.h"( n1 I' Z# i7 ~) l: G

6 ?9 z/ x; t9 [5 o2 l( l: u9 wstatic int init_proc(UF_UI_selection_p_t select,void* user_data)
. w9 f* P; a6 R5 p6 K{
0 M8 {5 w, b& X3 d$ R  z1 |        int num_triples = 2; //只选择一种类型
% i. D' E. K- y" y5 r- m        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,6 Z  {8 W! r" i# L
                UF_bounded_plane_subtype,1,0};+ ]* h& G+ W. P/ }
if((UF_UI_set_sel_mask(select,, l9 t' V) @) r2 r. j* x- u& m- E
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
* E0 n7 B( \+ o  num_triples, mask_triples)) == 0)- c  j( _, g7 v
{+ G7 u8 E) F- {1 H1 X2 G5 V
  return (UF_UI_SEL_SUCCESS);
2 x. O$ {6 U9 }& P }
; J! A! I7 R# a: x3 `+ E5 v else1 D4 c) u+ C; Y; x4 f$ p/ U
{) C+ `4 F+ A' ?/ `: e+ g
  return (UF_UI_SEL_FAILURE);! F4 U7 A+ }% p# V8 Q$ n
}
4 j" z5 {* g: }}# P8 V, v/ }% G2 ?

( z2 d1 ]* A3 m* o
  f, I0 [- G1 T; C( f  vstatic void Create_Center(void)
1 p5 P: u6 A# b" {- V- P$ m{& P  ~) {0 y( u$ T3 V
        tag_t user_wcs;
( O3 {5 U( T4 X3 X4 f! A$ Q" w- M        UF_CSYS_ask_wcs(&user_wcs);1 {" J2 p0 I! I: T+ t5 D" e
        char cue[] = "简简单单:请选择单个平面";
! S( K' D4 L; I' I        char title[] = "简简单单:对象选择对话框";
" K6 I* D' E) |- V7 p int response=0;
0 e0 \- I6 P  p+ [1 [& U. T tag_t object;: w; S% o$ p2 o; d
int count=0;& l1 T  K* G% v% H8 @
double cursor[3];0 h' {: U. x- G+ j. W( ~: T( G
tag_t view;4 p9 G& {2 N- |( l8 k
l10:: Y$ `  H( `- f2 W
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);0 I, H' n9 g! G" ]5 `% w* m% a
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10' \, v  p" g4 h3 q" L; d7 k
if(response==UF_UI_CANCEL) return; //如果点取消就退出/ d' i# f& C+ p  C/ k% D% g
UF_DISP_set_highlight(object,0); //取消高亮显示
, N5 h2 S+ ~; s4 _; z& }7 N8 o- T3 n) U! T$ p1 ?; C+ P1 \
  int type;3 H3 f) j0 T9 {, H: x5 V; o
  double point[3],dir_z[3], box[6];$ F3 _4 F! z7 k5 Y# `
  double radius,rad_data;; J" Y% X) ~: I
  int norm_dir;( Y0 J6 M! {7 \/ V; f- |
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
+ F: K" e7 a4 w% v
( h$ j" v- m: y  {7 P, ^
& K3 ]/ |5 O9 [+ s$ ^7 R5 e  tag_t matrix_id;+ ^  p* H6 m. g% M
  tag_t csys_id;: d! ?2 r6 u( ^- @) U  I1 k
  double matrix_values[9];7 b3 T. U; Y" F( J# U* k
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID5 ]/ [, D; }# S1 ~1 p
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values2 s  r4 g) [, g, ~( T% V
  if(norm_dir<0)        //判断面的法向是否相反
% C, ^( r! |: R  {
5 b1 E/ `9 k' x9 u1 O  I, V   matrix_values[3]=-matrix_values[3];
" g8 g+ b4 e, i; n7 w2 b5 j# o: J   matrix_values[4]=-matrix_values[4];- R' R' P! \( ]8 n7 G, G# ?
   matrix_values[5]=-matrix_values[5];+ }, p- S0 i! i# s
   matrix_values[6]=-matrix_values[6];# i9 Y5 h5 q  e! x, M
   matrix_values[7]=-matrix_values[7];
3 I% z! r5 I7 U. R: f   matrix_values[8]=-matrix_values[8];
6 c3 H0 D4 C( R- @1 F5 J, U; R   UF_CSYS_create_matrix(matrix_values,&matrix_id);
8 l* U& B/ m7 P2 f  }- |* E$ q8 \) O) k- E
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
4 v0 i' ~) A* {1 M  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
: O$ \4 U3 ^9 I5 m0 e UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)0 [; [0 ]- }( i
  d3 f0 G( J' v) U2 r) b
        double boundingbox[6];8 ?4 Z- \8 n3 ~- q
        double boundingbox2[3][3];
" F. s1 {/ g7 x9 L        double boundingbox3[6];
6 w6 D0 [: k. K7 ~: |9 l; w: P9 k        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);/ ?/ ^3 g/ Y9 a" u
# s5 _2 q3 L4 A" m. a- E- G8 [9 L
        if(type ==UF_cylinder_subtype)
( b+ {5 C: Q$ W) `, C* @        {
3 @% z- O; j2 O& [) p' O                double cyl1_pt[3];3 Z$ Y7 ]8 r4 w8 r
                tag_t cyl_line,cyl_pt;
3 C7 R0 a* J; x( t                UF_CURVE_line_t cyl1_line_coords;
( A/ ^' B* N/ U2 T( d$ e& l4 `                double WCS_pt[3];- E  I9 M4 ^( |9 j7 [
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
# ]( `$ k5 M3 A; ]3 s                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs, Z, V( U' w) M4 x8 ^, F3 ?
                cyl1_pt[2] = WCS_pt[2];( d$ ~2 R; H3 @4 K
0 v. Q6 W* ?8 v. ^: h& `
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
4 u  q# w. G; }9 X9 u8 O# T. _                cyl1_line_coords.start_point[1] = cyl1_pt[1];
5 H/ F5 w& s  l% R; O& ^- r+ f                cyl1_line_coords.start_point[2] = cyl1_pt[2];9 h' W9 T) |9 K( w
* ^0 `" H4 _. ^5 Y1 P4 d- G1 w. Z
                cyl1_line_coords.end_point[0] = cyl1_pt[0];) c% S  K* z! D( d& K: d& j3 a# R! V/ x
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
. C# N5 e! r9 L. j% K: W( u                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];. r0 {7 B1 }6 x+ u5 d4 A

" o' a) d" f( L' i7 x/ p" e- [8 o' h. G                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
1 }) ]* j1 R. r0 f2 g                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
; O7 V; ]0 y7 q: l4 K1 J4 D               
1 @( X% w8 w# p0 P4 |                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);; ]! Q  W% F$ M6 f+ F
                UF_OBJ_set_color(cyl_line,186);
, P7 D3 C* }$ q; V$ c7 N7 b8 A                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
9 e8 l5 t" W8 J% @; Y: c# X+ |+ R, B2 l8 t+ G2 X
                UF_CSYS_set_wcs(user_wcs);
! G& `7 d+ {: D. ^1 Q( q( E                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)0 M. B  W5 F( T( s  o
" {6 D7 H* o: S- F' W3 H
                goto l10;' r) U& u$ U- v4 L$ a( J
        }$ r+ J7 K( k: x

  c) o- C5 S- d+ g1 `$ J$ T' E3 D; F) x& f% Y$ `* T. H
        double WCS_pt[3],center_pt[3];2 o9 k+ P  S5 G4 J+ {, G
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;6 ~, @/ x8 ]5 X& `6 L0 I1 S
        UF_CURVE_line_t Xline_coords,Yline_coords;
4 Q+ t0 B9 R! ]' u' o% h' t        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
- _' W) A7 @1 X       
. F) B2 m  P4 @2 r* {8 l5 m        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;7 G" A9 V3 A2 q) K2 Z( }
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
9 o' i& F$ N" f        center_pt[2] = WCS_pt[2];
- b+ e$ X/ t6 G3 `  w* k& D/ e" u& o. {' Y) E" U

) ]. n+ u! Q1 d        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
0 e1 M: V# W$ D2 h  k& @        Xline_coords.start_point[1] = WCS_pt[1];
& I$ P, l6 _  J# m        Xline_coords.start_point[2] = WCS_pt[2];
. ^! I6 A  z8 z6 a3 o        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标3 @* h( U% M0 G" e) O
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
$ v+ P- A, y( u' \/ O. V# }6 k/ c' L: ]  q) t; R" u
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2  D1 e9 `/ Y8 v
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小$ _& L1 j& z: b& t+ a+ v7 x
        Xline_coords.end_point[2] = WCS_pt[2];# i8 u: L. o1 U! D3 B
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标+ b5 W) |, F" x- T3 B4 I
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
) E, o+ ~& A% ?8 i7 r' P: [' @( G$ C2 D( `* {7 @
        Yline_coords.start_point[0] = WCS_pt[0];& y) X2 [+ v* k
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;  m1 k( ]6 y+ i2 b7 o# N7 U7 M
        Yline_coords.start_point[2] = WCS_pt[2];5 y. M/ E; `6 L2 m3 p2 {
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
) f- v' F9 x8 u  \4 v& ~//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
" o  s; A' h( r1 l1 q
! T( R# t9 _, A" d        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小7 D2 y: N0 }8 l2 {6 T  W' q$ j# Y% G
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
) {- f1 R$ w1 D9 X. p0 C4 H6 U8 X        Yline_coords.end_point[2] = WCS_pt[2];
3 r' O, i$ [9 L8 Z0 a, G        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标
; e2 t- _( _* _7 N+ t4 t//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);$ t7 q: e8 A9 W8 z1 E' k: O
       
+ T& O9 s5 C5 v1 T        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
4 S" n0 b* O0 X# i% P, [        UF_CURVE_create_line(&Yline_coords,&Yline);
- S- M& Y9 G/ v" H+ p        UF_OBJ_set_color(Xline,186);        //设置颜色
  s- _" y  d% Z0 l; F9 \        UF_OBJ_set_color(Yline,186);8 I% i- j7 n5 N8 v) d
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型! Z% P2 @) c. X+ p* E  A
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型6 S- {+ l, [7 `3 D1 X4 J
9 I' Z) N3 e5 R2 d2 K
        UF_CSYS_set_wcs(user_wcs);1 {! S1 s) u/ T2 A
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
* W) U8 l) j6 {! q- G        goto l10;5 l- H" A* g5 A: o+ |( U' q- F4 B  ^

- O5 f5 P1 u1 Y+ d$ e& ^; w}
! u% n2 s* T2 @2 q5 P. Z$ {
2 d$ D- n: c4 t% V7 I9 o  Textern DllExport void ufusr( char *parm, int *returnCode, int rlen )
& g9 P: S3 z5 s) B: Z{
. ~. k" V2 l5 {8 F    /* Initialize the API environment */
9 M3 D- Q  V$ P( R* L' M; z2 V    if( UF_initialize() )
. _. j0 g  B, q" R' l    {. T7 ?% |  q! O* @4 m! l  ]4 A7 M4 e$ p
        return;& A4 X% {) R& g9 ]" R
    }
, `5 H5 G& U% x8 e5 ]" ?: L- F
9 w( z, L2 Q# s/ I        Create_Center();9 f) t8 p2 `( ~7 O. W5 M4 ~4 }" d5 c
; ?; S5 t3 ^  x
    UF_terminate();7 `' ^, G% c( |  [5 P3 z0 [1 B! _2 l
}$ D% W" R! P, A* O7 A) U8 L$ u
9 `  ?9 b8 s/ a: j# f

4 D9 f; x7 l: F9 c* @extern int ufusr_ask_unload( void )
" w/ Y& r. r* B{: g8 A! n2 X2 L7 n1 R# ~7 v/ p6 r
    return( UF_UNLOAD_IMMEDIATELY );
7 L/ Z  M: U" p* O' v}
$ N  _; s0 |: N- ?, ?' g- q2 ~; U4 `) B" K- v: m$ R' W: E1 ^; K
  n' V! C; G  m+ H6 t

/ m- j4 N, Z# K7 U' `- w
! Y6 [2 e1 E3 L/ J# a
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
) B- ~9 i- o. d  e# k. q呵呵,终于写好啦

- }4 ?' S' K9 b; {& E6 h# ]不错啊  
上海点团信息科技有限公司,承接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
, J/ E" D& t6 K% m: t老师多多指点才行

" ~9 M' ~" \; y) y+ g* 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二次开发专题模块培训报名开始啦

    我知道了