PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

[资料分享] 选择平面,创建中心线

  [复制链接]

2022-12-21 19:59:03 4224 5

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

3 H; G- {' u, m3 ^, H3 y* K: O1 b#include <uf.h>/ A  ?' n. @! R4 d  v$ ~* L
#include <uf_ui.h>
: x+ O% Q5 J! s4 J0 x#include <uf_exit.h>
+ Y4 v* f2 M" s% `  a' s. O
* H5 u; d+ ^9 h3 @% L#include <stdio.h>+ q2 a4 l" Q1 ]5 `
#include <uf.h>
" X1 T" r7 a* ?0 }  J$ @" ^0 d4 J#include <uf_ui.h>0 A, _4 i9 P2 L' a
#include <uf_exit.h># ^' H+ I( @6 g$ c( m9 S4 W
#include "uf_layer.h"
( Q& j- d, p9 w) }3 E2 K. C. E#include <stdio.h>9 {. ~9 ^( n' b4 s& I' B
#include <uf.h>7 X+ e4 @2 ^4 h
#include <uf_modl.h>5 h; j% g/ S0 Y2 g7 V
#include <uf_curve.h>
/ s, _! Z7 Z7 o) K+ b#include <uf_csys.h>
( Z. A9 h; J6 \#include <uf_object_types.h>3 E' @9 L+ [. o
#include <uf_ui.h>
! ^7 L( c* x4 s7 V6 s#include <uf_part.h>
) g$ n& z$ Q) W0 o#include "uf_obj.h"1 g" D2 U& Q6 |  V) J
#include "math.h"# S- R! g! g+ P6 P/ V

7 x3 H/ u0 y. ]7 P& J- `6 xstatic int init_proc(UF_UI_selection_p_t select,void* user_data)1 [. @4 I0 I$ O+ r* l4 z
{
( r8 I+ [& i' G% c4 D; V& m        int num_triples = 2; //只选择一种类型
/ f( T& ~8 S& U$ M0 E; b- p        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
2 ^) p& c6 I- R* G& P" P, V, |# F                UF_bounded_plane_subtype,1,0};
6 k& X% U: T& D% {0 ]2 z if((UF_UI_set_sel_mask(select," b2 w$ I7 j9 b: j/ E
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,: Y; }( X. o) h* T
  num_triples, mask_triples)) == 0)/ }' `3 {" g* ?* N
{; I: I3 U, s) {1 s" S! ]. u3 w
  return (UF_UI_SEL_SUCCESS);
8 [6 V$ Z) h. ]6 h) }3 t, B8 K }
9 R6 g) w. |' r* E0 A, M else' E, e. ?$ n. D! R1 ~" S, P+ ]
{6 z" n4 z# I: L2 \- z0 ?$ I8 [( S; F
  return (UF_UI_SEL_FAILURE);
1 P  b, }5 c0 i! v8 o/ `: T }
$ i8 `* V& K* E3 \$ v0 S/ ?- ^}
- y4 k+ X7 z* g9 v! Y2 t
. D& V! z/ H4 z& F7 V6 U3 ?  y' l! N
static void Create_Center(void)$ v) V7 Y1 q$ K
{
4 W6 O& h0 c9 [) O& N7 H        tag_t user_wcs;+ J, X5 I+ D% u% K
        UF_CSYS_ask_wcs(&user_wcs);# w; G6 e# i) g
        char cue[] = "简简单单:请选择单个平面";3 v8 L; ^5 l3 ~! a& }
        char title[] = "简简单单:对象选择对话框";! [7 _; M9 i% f/ \  r' H
int response=0;
8 T" B3 F% t- F tag_t object;
. C& u0 C; T% b# ^+ Q int count=0;
4 H* P- I! j) d double cursor[3];' C+ Y. T) Z0 F
tag_t view;" C+ c" z* }2 x  t
l10:
2 a9 \) d' L) F2 Y1 D  {: b UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
) M, |" A5 Q7 k4 w* _9 J) a if(response==UF_UI_BACK) return; //如果点后退就跳转到L10
8 @  a! D$ m7 g. d7 U, }  l if(response==UF_UI_CANCEL) return; //如果点取消就退出
2 e) i. k- B  F! j UF_DISP_set_highlight(object,0); //取消高亮显示0 w' m4 c" a0 E1 A: i" i2 n0 m

6 X0 z. u: {, O  int type;
% q1 ^0 N6 U4 g# Q  double point[3],dir_z[3], box[6];, x0 W2 h8 f% d4 O# p' v5 u, K7 Z
  double radius,rad_data;
3 c; d% F, x, w+ D( u2 P" H  int norm_dir;) [5 S: g! e/ K0 D
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
  u" @8 i7 I4 g% ]' u0 q# m$ u1 D
9 V2 Z; o. T/ L$ f$ O3 L3 j
" j7 v2 _4 W1 M" ~+ n  tag_t matrix_id;3 F3 Z9 q# p7 V; E- L0 t
  tag_t csys_id;
0 {  {  O# q* t  `0 h1 i" i7 T3 ?" v  double matrix_values[9];" r0 O  n- h9 P* i, I
  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
3 t0 K. M: h$ p! g/ t; M+ l# K- K9 ]  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values4 a8 H: T% y* O  R- Q1 g
  if(norm_dir<0)        //判断面的法向是否相反: R1 T$ r1 k' }4 `4 }0 a
  {
- _5 V) Z2 x; E3 I   matrix_values[3]=-matrix_values[3];
0 o6 ~- R( Y3 w! |2 I' T5 Q& x* d   matrix_values[4]=-matrix_values[4];" D/ S2 N/ K4 M- S4 \
   matrix_values[5]=-matrix_values[5];, E+ P" W: P6 j' [
   matrix_values[6]=-matrix_values[6];
' {2 V* _- X& N( |3 r   matrix_values[7]=-matrix_values[7];
& O* ^3 s: [* u0 S4 ~   matrix_values[8]=-matrix_values[8];
  G6 n: {% j+ r& W: s0 o' M* k- z   UF_CSYS_create_matrix(matrix_values,&matrix_id);
7 t+ k9 z% s# {/ m  }
7 @9 Z& ?) y5 j& I6 h  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);) l, y( Q8 ?5 ^4 i
  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
' X2 R  Y! ?5 W2 \- F  L( ?- R/ L UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)$ O0 A. d  m8 f. k% G

' p" F7 K: \8 O        double boundingbox[6];, @( f1 K; |3 Z
        double boundingbox2[3][3];0 }* Q) V7 e' z+ K3 ^& ?
        double boundingbox3[6];
5 e; Z! g( _" M" o        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
6 O! C# S( a( a7 h9 ]
1 Y+ z) D9 F% x4 \! U* f        if(type ==UF_cylinder_subtype)
& Y4 n+ F9 O- B9 ~, q! A2 u        {. e, }1 y4 v0 b6 \9 f/ K) `
                double cyl1_pt[3];
0 `) j8 c7 d* F; U0 Q' C                tag_t cyl_line,cyl_pt;6 w" Z9 j4 q* N% P) O* n
                UF_CURVE_line_t cyl1_line_coords;
! z2 j9 S+ ?7 J% ^: `                double WCS_pt[3];8 m, n0 X/ P, e
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs" \  K, G" [, m7 L0 m5 R
                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs
$ ]- [2 ?$ j3 c5 D, O                cyl1_pt[2] = WCS_pt[2];' ?* I& _% _. `& S6 v+ u9 f/ y9 r
; U* q; c" |% u* E
                cyl1_line_coords.start_point[0] = cyl1_pt[0];
9 B1 G% d! ?/ C4 h) X( @8 H, E                cyl1_line_coords.start_point[1] = cyl1_pt[1];( D* H' U  H2 N3 v
                cyl1_line_coords.start_point[2] = cyl1_pt[2];6 O/ B  g% }: [4 J; L

9 q# ~7 ^1 Z: N% a/ c                cyl1_line_coords.end_point[0] = cyl1_pt[0];
; Z+ M8 C; I1 D+ l9 ?                cyl1_line_coords.end_point[1] = cyl1_pt[1];+ ?1 V+ u" e& F7 F
                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];
& V3 [. G% [* C7 @+ ~! M" B7 W; j
+ d7 X$ @" t* 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转绝对坐标
3 J; @, F7 R7 w; q' O                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
! j9 k) o2 _) C0 J                / a+ c# @2 U3 c: o
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);
# T$ b: M7 O* ?6 v* J( i5 j- _                UF_OBJ_set_color(cyl_line,186);
+ m9 b# N+ ]& [, c, Z" G0 I1 c8 X' T                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型3 U0 [# C6 Q; H5 m" X6 |
* ?1 f$ T4 e1 i9 L
                UF_CSYS_set_wcs(user_wcs);2 A  [% q7 @$ f% `9 A) b7 D" P
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动): Z8 F6 k& x2 y- v3 B
* c$ n! O8 T4 W5 K5 K. m; P8 P1 m
                goto l10;
* B& D2 T( T( Z/ q  v+ H; V3 |- s        }
( m/ _, |, m# |! z$ _6 z; W2 h. V8 H1 Y; b* I1 I

8 O0 y% A2 \" D" n. C3 Y) C        double WCS_pt[3],center_pt[3];
5 T& n6 `# W. s3 i- g/ a        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
- p# d& _7 v; [# A3 D+ _4 {        UF_CURVE_line_t Xline_coords,Yline_coords;
8 `' W8 r- q4 i: `  h* j6 k        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs* v) R- z& P- `7 A0 V
        5 d2 X& x, Q: g; l  j5 B: l
        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;
/ K: L3 K6 c& Q- p7 k        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;! z2 z; B" u3 g, @
        center_pt[2] = WCS_pt[2];
: ]; O5 m) ]' f, {3 w3 R9 s0 i% ^" [! s7 v# q/ M) t

; d2 y" v. e; h4 I        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
/ [3 T& f+ C$ t0 M1 F+ G6 E        Xline_coords.start_point[1] = WCS_pt[1];; T4 x+ o. W: x3 b/ c2 C# u  N
        Xline_coords.start_point[2] = WCS_pt[2];
1 ~0 ~, `5 x/ g        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标9 i: B, U, Z# C  F! C3 T' \
//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
# P( @+ T. G6 @3 E0 ^- {6 I
# f: N0 x! S" J% k+ l        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/28 e) w: u2 g. g3 b& W2 z2 ?/ V
        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小% c8 R* f- i# [1 A- [
        Xline_coords.end_point[2] = WCS_pt[2];
  Z* {; B0 ~6 D- D        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标
; b# S: P. X' }. [  _1 b//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);5 J2 N# j% G  Z- _9 G; @5 a
) R7 }+ Q. c, s9 [$ [0 m
        Yline_coords.start_point[0] = WCS_pt[0];
) `) y, s7 Y. J, V8 h/ b  e0 m) N# f        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
0 j9 z4 h* i5 c6 G  B; ^7 b        Yline_coords.start_point[2] = WCS_pt[2];% b3 H' V9 b$ J6 H* }
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
# b5 m+ `- V, X2 u//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);" m, Q. _) O$ F+ |8 H

  j2 `% }& A! ?+ }8 T1 ?        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小
7 Q. T& M0 @5 |  e& j5 k( m0 n        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;6 S8 M' a& i6 S. C0 j
        Yline_coords.end_point[2] = WCS_pt[2];
) H5 k; @9 i- h, g6 J        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标4 X+ W6 T; Z( A! O# r
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
; @5 }- E! ^9 m9 x4 H. u& K        $ e: M3 \' ?* y) ~
        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线  |' i7 ]) T; t
        UF_CURVE_create_line(&Yline_coords,&Yline);
7 {0 h, w# h) J$ Y/ c' c        UF_OBJ_set_color(Xline,186);        //设置颜色
  c" C( I2 W" Z& B        UF_OBJ_set_color(Yline,186);9 S/ i" J2 f  W) a( V
        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型; Q: H0 E  R: |9 |% H$ n3 L" ~" M
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型
3 L: w- R/ h* R4 J  N* k4 p6 k. `. O* ~& _
        UF_CSYS_set_wcs(user_wcs);, z) O) u* w& t% ^
        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动). s" u% g* b' Q7 W0 B" v
        goto l10;0 K! R1 p, `6 Z% q7 H) q
0 h  x6 N  Z" ?$ p1 W
}) P+ U6 O3 t+ v( u3 B0 M3 n
4 u- U5 d5 s) B! w
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )& {8 s, o2 X1 N5 w  T9 b' w: S
{2 @, Y: w2 T/ z6 a. P( k5 N
    /* Initialize the API environment */
( t6 T0 P+ `4 L8 R6 x5 {% {) g    if( UF_initialize() )' k: S; N# O: Y+ |% Q
    {& G  I+ s4 d* r, p7 l
        return;
( M( i2 \. x* s! B0 a7 U3 J9 W$ A    }
+ M6 F, y1 \$ w9 ]! E! A+ ~! R' w. q2 }! t$ @: J0 d
        Create_Center();3 T9 O: B/ G+ }
0 C/ f$ m& P- D+ n7 t
    UF_terminate();5 a# u  h3 o. @7 t5 R0 G
}# V# |/ `. t/ b3 r" ~9 T

  Q# M6 O3 |( E+ r- y7 t+ p9 p) F+ Q9 s1 {" r
extern int ufusr_ask_unload( void )
) u' Q" k* r, l' C{- B6 I" W/ S4 v
    return( UF_UNLOAD_IMMEDIATELY );+ U4 W+ w& J/ Q& I6 `
}
3 E4 l: `' n3 }7 r" J7 m5 _4 L1 F1 ^" v" a

$ i: _! z0 X# V3 m( O1 r5 L5 g. g+ |* S. ~+ \2 ?& d
1 K/ y0 r& S' J% j8 j6 o
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:441 y& i3 ]* x# @* s3 h8 R2 P
呵呵,终于写好啦
7 R2 |1 J. B, x* Z
不错啊  
上海点团信息科技有限公司,承接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! R) R/ [* _* f- \; r# R9 S* s
老师多多指点才行
. \7 \8 z+ x# r4 y# r* F
后面把 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二次开发专题模块培训报名开始啦

    我知道了