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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x
9 m7 r' G' C* p* ]4 u
#include <uf.h>( c! V/ z( H* e- q( }
#include <uf_ui.h>- O2 D. C) ^# Z$ U& \
#include <uf_exit.h>
0 @! s) B, l- y+ F) E( A" N* s  W# @/ t% G* E- ^& v: C2 x
#include <stdio.h>- U6 l( L6 H$ ^( E9 _; i- J
#include <uf.h>
: V9 [! y2 w) a: M#include <uf_ui.h>8 O* f* M& l/ c
#include <uf_exit.h>
- E6 _- Q: {! y5 `& k6 T+ g! \#include "uf_layer.h"2 l/ o+ t/ G$ w6 H& v5 l/ [
#include <stdio.h>
1 u  R, u) R7 I: W3 _: W( t6 |#include <uf.h>8 j" B5 A1 t/ ~% ?) O
#include <uf_modl.h>
" e: _5 T& D1 A5 i3 [1 k  S#include <uf_curve.h>
$ J9 |0 X( V7 m9 A: |6 ^#include <uf_csys.h>
1 K3 F/ S* w8 @8 D/ A' }#include <uf_object_types.h>
1 _. b, \( C( T( p3 C#include <uf_ui.h>
" g* m" X, w0 Y( I+ f#include <uf_part.h>
: j- ]; c) p' U9 ]$ Y6 \( Y" W8 p#include "uf_obj.h"
' v' k. F" d; Q. ^$ s# B#include "math.h"
; A- c. X2 a5 y  D5 M5 O- m) q) G; t
static int init_proc(UF_UI_selection_p_t select,void* user_data)5 c* t; Q$ r0 M) w0 D% m2 w
{
+ B1 M0 y3 Y" V# |        int num_triples = 2; //只选择一种类型
# q3 r: m" o* h( ^; K# _1 W! b        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0," Z8 j4 ?, Q: K0 N# l. `( g; x, l
                UF_bounded_plane_subtype,1,0};
; C8 A* U6 j5 e# g4 x6 f0 s if((UF_UI_set_sel_mask(select,4 \0 _5 i" e) g
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,% b" E2 j1 X6 p- g
  num_triples, mask_triples)) == 0)
& j7 x2 F- W3 D5 ^5 Z {1 L( i* e5 z  ^! I2 H/ I
  return (UF_UI_SEL_SUCCESS);1 E9 M5 s2 A; S2 @. L/ G
}
' \# J+ I3 W5 I7 P6 @$ o9 {+ D7 b else* A; x5 k/ R/ l6 l
{
. `4 X0 J! t! c+ E8 p1 u2 A! P  return (UF_UI_SEL_FAILURE);+ x; k5 m2 |* R1 ?9 P: o. @
}# E& ^/ ?  G8 @: i2 X0 ?
}. c" n- t9 q5 h+ D  [

1 f1 M2 ^9 I5 o1 y
8 p- q" M9 U% R+ Dstatic void Create_Center(void)
3 [0 B; z, C5 M5 v' u% _{8 t' K) `1 |1 m% w: t
        tag_t user_wcs;$ x6 C5 Q& _) r* t+ a+ \4 {) O5 m3 B
        UF_CSYS_ask_wcs(&user_wcs);6 \' R; H+ b# q  c: [
        char cue[] = "简简单单:请选择单个平面";. e0 S6 p- b' H. {; r8 p, R0 k$ L
        char title[] = "简简单单:对象选择对话框";
/ i& Y2 m) `% @# V  P2 ~! q4 p0 j int response=0;
( z. A8 b- x# t+ U- k' u4 v6 r% [$ c tag_t object;
. |' J. i2 B0 b. `. u' e' v int count=0;, [- }0 a- M8 i' I; d1 N
double cursor[3];
4 a3 D1 Q( D8 u tag_t view;& I! w5 m7 b7 B8 O% ?& K; U
l10:
+ [" B: B- Q+ y7 D+ a3 z3 U* o% B* q UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);( O6 `& H+ S) S
if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
/ s% J( j; }0 N( [( f3 k if(response==UF_UI_CANCEL) return; //如果点取消就退出
; w" a4 T4 Z0 }6 Z: n0 y UF_DISP_set_highlight(object,0); //取消高亮显示+ f/ ^7 e/ T6 J6 m& T8 H0 f

+ M7 p4 x  f( Z" Y# S5 x- K" f  int type;
( l. V, Z7 q4 G' ^1 ^) X  double point[3],dir_z[3], box[6];
, M0 f* T: K+ T  n/ `  double radius,rad_data;4 R2 l5 C6 l4 {8 j% y6 p: Z! q
  int norm_dir;% R% t5 M3 ~' V, b/ v; x  G
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
) s6 f! q( `5 G( y
1 v: ?! B+ B6 N6 I+ s' p, r( ]' E2 J. R, A, o3 B
  tag_t matrix_id;
0 E8 Y2 ~  z8 ~) D& C  tag_t csys_id;3 p/ K- q1 [/ p: E1 d% E
  double matrix_values[9];5 C. k* ]9 @9 N5 ^* l" G* p* Q1 H6 _
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID+ w$ P! \0 U& t
  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values8 S$ y1 n( @4 G. g* N
  if(norm_dir<0)        //判断面的法向是否相反- b0 O) y) k0 m
  {
0 m1 Z+ R& `5 M' r2 I0 Z   matrix_values[3]=-matrix_values[3];8 k: U$ J, T7 e8 M
   matrix_values[4]=-matrix_values[4];
$ j& _: a' h' F3 Q, A   matrix_values[5]=-matrix_values[5];
! \5 m& c+ I% I% b9 F   matrix_values[6]=-matrix_values[6];
- f/ \; f% V3 Q# t) S' X   matrix_values[7]=-matrix_values[7];
- b5 a/ D2 d* g   matrix_values[8]=-matrix_values[8];$ h: X( q3 V! t# e& ^0 M/ l4 @: @
   UF_CSYS_create_matrix(matrix_values,&matrix_id);* B% s' |, N9 o; f! E
  }" b# `8 B) @5 \; K8 I7 _1 @  t7 B+ {* M
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
$ ^9 T$ e3 q" ?4 ^1 N! `( j8 L  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
8 p: p8 l  T* k0 c UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
( G+ h8 r" i8 h) B1 W
0 v( |4 @5 z/ G2 _" [        double boundingbox[6];
7 M$ ~2 a" A8 i/ d        double boundingbox2[3][3];
4 l4 l0 t" `' D, f        double boundingbox3[6];7 I" `' X7 _# ^* F9 N0 \% |
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);; y8 b+ u* g) V

2 Y! @' Q! w$ S$ e        if(type ==UF_cylinder_subtype)! i" z9 p/ K( r  e1 N1 M
        {
3 @% ^1 R3 J) ?9 c- Q                double cyl1_pt[3];
  {) S- c% U7 {/ f                tag_t cyl_line,cyl_pt;
9 G; N; y. B: h6 G4 t0 @. r                UF_CURVE_line_t cyl1_line_coords;, w, s, c9 G) a& e2 v
                double WCS_pt[3];2 B6 M  y# r; f6 R
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
+ _% L5 J3 \  j8 X- E# }                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs( U: ]+ r8 e! K7 {# r
                cyl1_pt[2] = WCS_pt[2];
$ r2 G8 Y5 f# p3 b8 b, E. v8 ^8 N. B. x. ]4 {: z
                cyl1_line_coords.start_point[0] = cyl1_pt[0];: T+ f! g* f; w+ B, l* n" E/ Z; P4 o
                cyl1_line_coords.start_point[1] = cyl1_pt[1];; g0 J4 f5 r6 Z9 z& |
                cyl1_line_coords.start_point[2] = cyl1_pt[2];
- o: p) w+ P. u1 K
% p3 k! Q! a' y. c8 ]$ P, H9 u5 C. f                cyl1_line_coords.end_point[0] = cyl1_pt[0];8 U# X+ S0 e: b- v& C" S, ]1 X
                cyl1_line_coords.end_point[1] = cyl1_pt[1];
: l. v  P0 G  D/ Y* w9 X7 O                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
0 q0 Z: s# A& Y3 L- e0 x7 E% D' I! F+ Y. n
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.start_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.start_point); //wcs转绝对坐标
. t7 }; u4 `3 Q                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
6 T( w$ ?4 H$ B" H+ E. \               
9 q4 o6 p; ~0 x: E0 J  j                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);; r1 q% P. }% V4 h7 J; n7 Q) |' Z
                UF_OBJ_set_color(cyl_line,186);/ _# b7 O& H& f$ U& D  E# S3 D# W6 q
                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型
- j/ B1 W5 t. c4 n7 m3 {, B1 F0 }& z& u( f. d
                UF_CSYS_set_wcs(user_wcs);
) ^/ @. v$ v, @) ~4 k3 t, T                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
! C5 D1 b; C* }) H0 L. h" q
2 ~2 q7 e, z6 J) k! b$ w5 _                goto l10;
" l% d" X( [6 F6 M# ~6 e2 ~! M' L        }. H8 `' }5 \' g) E  l* ]4 Z/ ?! s% G6 [
2 t9 h. c! s9 m* h9 F/ j9 R2 y% j

& c( ~; Y: j% }! x3 W# I        double WCS_pt[3],center_pt[3];
; {# S: r% w; p% H' t        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;& o" l9 _) [0 y1 |$ A8 g
        UF_CURVE_line_t Xline_coords,Yline_coords;* p2 p, i/ {) }; D
        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs4 x! w- K' w2 x
       
5 Z7 \9 a: [/ j% y% m        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;+ }9 `! M: P+ u
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
+ f- W& K: n& v5 R        center_pt[2] = WCS_pt[2];1 M# w% J' g' @9 c, {

9 M  K5 X' {; a$ O; ^4 e2 Q
' L& |# c( ?4 ~) ^        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
3 x" [. u* D3 F, x8 \& x        Xline_coords.start_point[1] = WCS_pt[1];
3 y. _6 [$ E2 i* H8 i4 S0 p        Xline_coords.start_point[2] = WCS_pt[2];% p5 E# j% s: f, m" n( L
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标8 T! `$ D! L  X6 x+ S/ f7 N
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
, a) ]" f  f! C! Y& e( l# p6 ?6 g( Q% |4 G( D+ \& d
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
' m0 K/ b5 |& ~' f( H* n0 N        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小
: ]3 g, A5 p* E+ d        Xline_coords.end_point[2] = WCS_pt[2];
8 C% ?& }* D5 H7 P, @        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标' E8 t" ~0 u3 [! R8 \$ T3 Q( E0 J
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);
6 z2 E- @) I+ }( X7 D" R7 |' r- Q5 m' ~1 O! o$ N+ B
        Yline_coords.start_point[0] = WCS_pt[0];
5 w! P9 o9 l# q; l/ |7 [        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;: M) J  b: J# @, e$ K1 y
        Yline_coords.start_point[2] = WCS_pt[2];
3 ~% Y* ^+ V! Y, d) J" ~& y1 D# {        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
6 Y( ]4 Y/ a! t! a& j) a//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);
* L' h# @# Z' Z" d3 o' f$ c8 V7 M9 g7 c8 \
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
3 `$ M+ ]! y; u: g        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;
- o( }3 n/ h6 @0 ]3 p: q* t        Yline_coords.end_point[2] = WCS_pt[2];
# U4 k; b9 n: x7 l5 h  D        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标0 c& Y& s& q, D# N7 \$ T
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
* n( g1 B" j& g8 W0 n, Y. S        5 F" e8 p9 y- w+ E' g- ]
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线
" U2 ^- N7 n% d! \' D/ U        UF_CURVE_create_line(&Yline_coords,&Yline);
# U( i* W5 ]. K  a$ d        UF_OBJ_set_color(Xline,186);        //设置颜色# S6 y) P% G! V* s; r
        UF_OBJ_set_color(Yline,186);4 I4 U7 u/ T: o3 n; p9 }! _
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型$ P' M/ V5 |* H! P% o2 }
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型, P0 Y2 Z8 E- w. K; t

, Z! `% }  b# ]! c% l, _        UF_CSYS_set_wcs(user_wcs);
1 W: N9 T) H6 m4 Q( N  }" z$ Z        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
6 {7 g; q& W; Z        goto l10;* N! m; I* ]$ T# r0 U

2 c! _# }$ F, d$ k' q7 `& ~}
$ F$ n% ]( x, [2 _) u7 C/ C) W) S4 H0 {% d
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )" |* l  b9 U. ?
{
* Y) s; z4 N- X! O. ?( n) |! B3 Y    /* Initialize the API environment */
* K( Q" V" T# d9 ?1 _  U: D    if( UF_initialize() )
( ]  a0 V  _3 t5 Y# o+ B4 v! D  N    {
1 u4 M3 e$ e2 _1 {1 E        return;
% k7 C3 z+ e% }1 c  O3 L" {    }
0 q3 F' n/ ?$ U2 K3 G# F) M6 W" l. a) z# y/ `2 `
        Create_Center();& P) |4 D/ o) f4 E1 e

9 ?2 K6 n* l) h1 r! y' P+ u    UF_terminate();# _' u/ D& k1 u" \/ L" h4 K$ C
}) c. [( H1 A# Z4 c) `* i8 R5 q

+ u2 \3 }% Y' N
2 Y2 g7 o. I# I" kextern int ufusr_ask_unload( void )
5 z! a& w! j  h, M& G# Q# r( f{  P' k) _/ z( t8 c( |# K3 U
    return( UF_UNLOAD_IMMEDIATELY );
' S$ n" G" T) @7 t; w5 b}
4 W0 e& ]. ^( w3 F8 _2 J3 v
4 o/ g3 z- D$ b6 \5 L
; y! K; v2 W/ R9 }1 T0 v5 _2 g$ @
4 ]# @3 M  ?% I$ `7 |2 U3 L  Z3 v# ]) C2 e& U
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
6 i9 u* j1 f$ L7 H# r( D/ T呵呵,终于写好啦
) \: B- I' W6 y7 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, {8 M0 Y0 ?9 a' U5 D- O( e
老师多多指点才行
7 _8 P1 }- n1 ]& _! s
后面把 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二次开发专题模块培训报名开始啦

    我知道了