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

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

简简单单 楼主

2014-12-12 10:44:01

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

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

x

2 c# b9 q6 \& S# G" \& h9 ^#include <uf.h>' ~9 {8 \1 {, H( @. O6 W& u
#include <uf_ui.h>/ ~( d$ [% }6 f4 {( p% Z
#include <uf_exit.h>8 s# R2 `) c! ?. V5 E0 F9 ^
; r# s/ K* H7 z6 r  e: q  s
#include <stdio.h>
4 b' {( \% ?% m( `% [# E#include <uf.h>4 U5 b* f. C5 F: w, p3 x
#include <uf_ui.h>
: H5 K& w' h3 ]" i#include <uf_exit.h>
' L, }$ L1 w# `4 n#include "uf_layer.h"
' I, \, r7 ^. `#include <stdio.h>
3 i0 z+ h$ f' R, Y4 G4 S#include <uf.h>4 c! m% E5 ^$ k# Z% C
#include <uf_modl.h>
- {; x/ E+ S5 G' K: x#include <uf_curve.h>( O3 x$ h3 F& ^$ r
#include <uf_csys.h>1 f& b9 X4 r5 B/ Y$ S
#include <uf_object_types.h>
& [7 C! E) G  I( v#include <uf_ui.h>
! x9 T. c' r+ a, [( O# T* }+ G: B#include <uf_part.h>/ s2 U8 _5 y! A
#include "uf_obj.h"6 b" ], `2 Y5 C9 S
#include "math.h". |, N1 |' d, D4 v3 `4 o/ l

/ c. r9 G* t+ A, X0 gstatic int init_proc(UF_UI_selection_p_t select,void* user_data)( r$ m" Z6 u6 j3 j0 }
{; X3 u* v6 C8 }; O4 G
        int num_triples = 2; //只选择一种类型
; ?2 a4 `8 {; R6 B7 ]7 [        UF_UI_mask_t mask_triples[] = {UF_cylinder_subtype,0,0,
% V8 v3 y* G6 D6 e( W$ {6 p                UF_bounded_plane_subtype,1,0};3 u% ?2 F4 k/ @
if((UF_UI_set_sel_mask(select,% g9 u* P% E9 |  x1 r* ~2 J: S
  UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
( U+ k9 z9 s/ e6 V# J  num_triples, mask_triples)) == 0)8 W8 ?% Z* i+ m' q5 `. ^9 z
{
( o, y% |) E/ |" z$ w8 v4 G  return (UF_UI_SEL_SUCCESS);
1 q; P0 R' {  r1 v }
: _3 u9 n" f2 Y/ @6 v  E else/ d1 Q$ ^+ ?) c( m! K8 y
{4 x" d! r0 k2 S( Y" N% L2 b# d, y' W
  return (UF_UI_SEL_FAILURE);3 r# E* @) m) `9 x' `
}
0 j- ?# R7 b) b4 z" l. a}! X+ z4 N+ N" C5 `3 z4 D
2 v9 o& g7 i; r
+ x2 U7 K% q! L5 e  m" d
static void Create_Center(void). w- M6 E( b, I( s, S1 G, c
{
- P% X, I- y) o/ ~) r- N: K        tag_t user_wcs;: Q1 S1 A( Q9 Y- m; E
        UF_CSYS_ask_wcs(&user_wcs);
, W- ?! F% |7 d# U9 v+ z( [- o7 n        char cue[] = "简简单单:请选择单个平面";
7 S5 ?$ S! Q' |8 ]3 A2 c  M, Q        char title[] = "简简单单:对象选择对话框";
9 a9 N8 J- B  R0 U4 T0 w9 `* P int response=0;* v3 B+ w/ R: w; M& C$ ^* n
tag_t object;
" `/ }: Y4 A- ]3 N int count=0;
1 c1 W) s- Z  _7 b double cursor[3];
% i9 [. X8 v9 m' k  i0 K tag_t view;* D- |/ P$ o: l( k
l10:0 k1 N% b) S+ b% [7 P9 K
UF_UI_select_with_single_dialog(cue,title,0,init_proc, NULL,&response,&object,cursor,&view);
; E5 n# M/ n+ W4 X& K9 E5 x! j if(response==UF_UI_BACK) return; //如果点后退就跳转到L10& k3 f" h# [1 J
if(response==UF_UI_CANCEL) return; //如果点取消就退出
( _# U3 {3 [0 }# ~ UF_DISP_set_highlight(object,0); //取消高亮显示
4 t% o3 n2 Y' @9 \: |# B+ j7 u
* n1 Q( |5 u) h* Q" d4 i# |6 E3 x  int type;
8 c3 n; L+ n9 R( {. k  double point[3],dir_z[3], box[6];3 z  k9 ?1 e6 n5 A( K
  double radius,rad_data;
4 J+ _! `( f; E+ O) H  int norm_dir;7 z/ V; o9 I# l. O7 G, P
  UF_MODL_ask_face_data (object,&type,point,dir_z,box,&radius,&rad_data,&norm_dir);        //得到面的法向norm_dir,+1为正向,-1为负向
& o6 ~, B; T( v9 a' T, `4 m8 K" f7 A+ S1 s+ L* n  e

5 N( D& ]7 M$ S  a: k  tag_t matrix_id;) Z, ^: O, C4 n' P/ k
  tag_t csys_id;: _6 `0 F6 i) f! {/ F+ \' g. M
  double matrix_values[9];
2 v7 o* R# u' {+ w9 O, q8 H  UF_CSYS_ask_matrix_of_object (object,&matrix_id);        //得到面的矩阵ID
( p4 x6 ?; M( ?; ^: e7 Q  UF_CSYS_ask_matrix_values(matrix_id,matrix_values);        //赋值给matrix_values, J( }; @+ G5 K  O( a5 G" ?
  if(norm_dir<0)        //判断面的法向是否相反, q. ?! O9 S: z
  {( T* }1 }" {. O6 C- k' A5 H% V
   matrix_values[3]=-matrix_values[3];
4 C6 r8 T, [/ ^! C* ]   matrix_values[4]=-matrix_values[4];' R, Y' v( v# {3 K, W4 Y
   matrix_values[5]=-matrix_values[5];1 E# ]& O- X: k6 d9 N- \
   matrix_values[6]=-matrix_values[6];- _  b& I& o* ~3 c8 {0 {* G% i
   matrix_values[7]=-matrix_values[7];
# Q7 i2 N' H) g   matrix_values[8]=-matrix_values[8];2 f2 L2 i' ~0 x# B) l7 M) h5 B
   UF_CSYS_create_matrix(matrix_values,&matrix_id);5 s0 k. w: X3 u5 e3 W. S
  }) X( d- `9 y$ @2 c( r1 R) [" r
  UF_CSYS_create_temp_csys(point,matrix_id,&csys_id);
. X" ?# s8 Z6 g2 F$ H  UF_CSYS_set_wcs(csys_id);                //设置面的坐标系(位置不一定精确,可以通过后面修正)
& o4 e( z- P. `: L UF_CSYS_set_wcs_display(0);        //不显示坐标系(解决显示移动)
$ |3 M6 ^* t/ m- f5 u6 x/ z* _  [5 f6 h% L/ C
        double boundingbox[6];
; r- d- A* t) b  \        double boundingbox2[3][3];, T5 R8 @5 f9 {% b* J+ w2 t
        double boundingbox3[6];' C5 }4 K* Y% ]* B& x
        UF_MODL_ask_bounding_box_exact(object,csys_id,boundingbox,boundingbox2,boundingbox3);
8 H4 ]# `# b+ l* C0 g7 F7 s9 g( y/ r6 |$ n' l  R0 V: E
        if(type ==UF_cylinder_subtype), U1 Q  `2 j# \& h0 j: C
        {9 a- k" e  I  _3 b
                double cyl1_pt[3];6 \. S4 p8 X# M2 J% f
                tag_t cyl_line,cyl_pt;
$ y/ o4 n7 s& U/ J: L                UF_CURVE_line_t cyl1_line_coords;& }5 `$ W" S# E3 R" B& `) F/ J' x8 {
                double WCS_pt[3];
1 {2 ^$ Z0 t% l) e8 k, p                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
; U  b2 e9 w" s6 {) c$ Y) t* @                UF_CSYS_map_point (UF_CSYS_ROOT_COORDS,point,UF_CSYS_ROOT_WCS_COORDS, cyl1_pt);        //绝对坐标转wcs8 W1 O/ q0 d& [- t
                cyl1_pt[2] = WCS_pt[2];
, Q" |& ?$ {; y+ z2 M$ P9 |
6 S$ x- P7 b$ R) f                cyl1_line_coords.start_point[0] = cyl1_pt[0];1 L8 p! i( y, [1 [; ]# f
                cyl1_line_coords.start_point[1] = cyl1_pt[1];+ X& l6 A0 N! L( q9 s
                cyl1_line_coords.start_point[2] = cyl1_pt[2];' w# R* J6 y7 K. e0 }; F; {

# V" ]% _7 t3 k$ [                cyl1_line_coords.end_point[0] = cyl1_pt[0];
: {( `+ L7 ^, X& _5 X( z                cyl1_line_coords.end_point[1] = cyl1_pt[1];
. m& h" V9 y: c' s' S& V  ~" q                cyl1_line_coords.end_point[2] = cyl1_pt[2] + boundingbox3[2];. R2 i7 v2 D# l# \  V/ }

0 N9 @& S; u. j) `( m                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 T* o4 G6 ^& Q# a7 a( E. Y
                UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,cyl1_line_coords.end_point,UF_CSYS_ROOT_COORDS, cyl1_line_coords.end_point); //wcs转绝对坐标
% ~& V& N$ [- R, ^8 ?  v0 U                6 r5 Q8 W9 I+ u5 q% F' p& w6 s
                UF_CURVE_create_line(&cyl1_line_coords,&cyl_line);. O+ S6 J5 ]% d8 N
                UF_OBJ_set_color(cyl_line,186);
* [: G1 r" P7 a* c8 |4 M) U: M8 t                UF_OBJ_set_font(cyl_line,UF_OBJ_FONT_CENTERLINE);        //设置线型  }# p' {% M5 k) q4 C$ h: W
* r# x. e4 Q: \! o
                UF_CSYS_set_wcs(user_wcs);7 m9 h0 ^7 _7 S- F
                UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)/ u; y# J  T( n* s8 J, I$ V" x

  A' z3 y3 {( F8 b; z$ f# f                goto l10;
: o6 _* C% }) c6 P        }) }2 B8 }' T& {/ r! E" {* d/ n3 s

3 Z, i- D! c: J! L2 ]
. i7 x0 C% @/ {! j. u3 q        double WCS_pt[3],center_pt[3];5 F& }. t2 F+ |+ A+ D8 m! G. E
        tag_t xp1,xp2,yp1,yp2,c_pt,Xline,Yline;
% O/ q! f' R* J6 a( f/ {3 Y        UF_CURVE_line_t Xline_coords,Yline_coords;
' e9 N6 i3 k0 s: r0 k6 w        UF_CSYS_map_point (UF_CSYS_ROOT_COORDS, boundingbox,UF_CSYS_ROOT_WCS_COORDS, WCS_pt);        //绝对坐标转wcs
/ ?8 {! ~; x' W/ _' m9 J" h3 U       
7 s# |+ j) B7 j8 G/ n( w5 I6 ~        center_pt[0] = WCS_pt[0] + boundingbox3[0]/2;4 ~6 O9 X* d! G, \( o
        center_pt[1] = WCS_pt[1] + boundingbox3[1]/2;
0 R/ c1 e5 w8 W        center_pt[2] = WCS_pt[2];3 H) K. L3 s* ^3 V
' U7 M5 f, Y& A9 Z
) V/ B; x8 f$ q3 V
        Xline_coords.start_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
) D) n* b. F" ?        Xline_coords.start_point[1] = WCS_pt[1];; |+ A# w6 |# I% t& C! C/ M, B! s
        Xline_coords.start_point[2] = WCS_pt[2];
3 }# u: N; d* }" F0 u+ B4 }0 F        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.start_point,UF_CSYS_ROOT_COORDS, Xline_coords.start_point); //wcs转绝对坐标
' P' F; K1 c4 [. a//        UF_CURVE_create_point(Xline_coords.start_point,&xp1);
" v* ^! O5 r% g6 O$ ^: I0 y$ k  E5 y* r2 j
        Xline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0]/2;        //X方向wcs的值+面X方向的大小1/2
2 B; ^! Y/ J# M        Xline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1];        //Y方向wcs的值+面Y方向的大小2 v4 r  M* z- I
        Xline_coords.end_point[2] = WCS_pt[2];4 j8 \3 i, f. C: l
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Xline_coords.end_point,UF_CSYS_ROOT_COORDS, Xline_coords.end_point); //wcs转绝对坐标) l( `& c7 [* t4 E: A! J
//        UF_CURVE_create_point(Xline_coords.end_point,&xp2);; ~5 b+ A$ n8 B- x
' L6 m% J  @( s
        Yline_coords.start_point[0] = WCS_pt[0];7 \2 K' A) A* _, S. ~! s7 K4 p; X! U
        Yline_coords.start_point[1] = WCS_pt[1] + boundingbox3[1]/2;
- y* r0 {/ v2 t        Yline_coords.start_point[2] = WCS_pt[2];* P4 [2 M3 ~6 r. w+ t+ p
        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.start_point,UF_CSYS_ROOT_COORDS, Yline_coords.start_point); //wcs转绝对坐标
1 k  F+ i7 g: {5 K  }//        UF_CURVE_create_point(Yline_coords.start_point,&yp1);0 ?. E& {" P, C' Z; Q8 ]
+ P$ S- `8 ^5 Q4 u6 e+ V4 y! Q
        Yline_coords.end_point[0] = WCS_pt[0] + boundingbox3[0];        //X方向wcs的值+面X方向的大小# ~2 N, {5 ?/ U! ]3 r. r% a2 W
        Yline_coords.end_point[1] = WCS_pt[1] + boundingbox3[1]/2;8 G1 n3 O' X! G, w
        Yline_coords.end_point[2] = WCS_pt[2];
% Z7 r7 ]3 _- d; Q" O        UF_CSYS_map_point (UF_CSYS_ROOT_WCS_COORDS,Yline_coords.end_point,UF_CSYS_ROOT_COORDS, Yline_coords.end_point); //wcs转绝对坐标: \* y) z2 ^4 k; Z9 V
//        UF_CURVE_create_point(Yline_coords.end_point,&yp2);
  F% n6 J& j7 l% U       
' t9 p8 h$ ]4 U( J        UF_CURVE_create_line(&Xline_coords,&Xline);        //创建中心线1 t% N& W! Q! U; H  G! H
        UF_CURVE_create_line(&Yline_coords,&Yline);3 O9 y& n- L/ q: \! u
        UF_OBJ_set_color(Xline,186);        //设置颜色
4 u$ f8 P4 I; [/ X/ ]8 {/ L  M        UF_OBJ_set_color(Yline,186);
% X; m& D4 l$ ?% I$ v8 D        UF_OBJ_set_font(Xline,UF_OBJ_FONT_CENTERLINE);        //设置线型- G0 j, N% e7 n: u$ [: v
        UF_OBJ_set_font(Yline,UF_OBJ_FONT_CENTERLINE);        //设置线型; _- d3 ^1 G; \$ L

( D* F- m* G* k6 J; s  h, j. K        UF_CSYS_set_wcs(user_wcs);
# U% Z3 O- Q# n9 Z& b5 J        UF_CSYS_set_wcs_display(1);        //显示坐标系(解决显示移动)
7 V1 k& z( {/ ?4 w/ ]1 D        goto l10;
+ [2 b7 O, M% Y. Y' y. {6 X' m. O3 F
}
' a: H3 D% W: j# |) q; a  E# ^+ `3 m; o  p- f
extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
2 W; r  y" Z: U& @{
, p$ P3 O" L5 J3 @# f+ X! b, B    /* Initialize the API environment */
: D% W( e* ]2 H1 Y4 [( N; p    if( UF_initialize() )
, T% G/ U9 M6 K$ ]$ L    {' J; ^4 }0 b3 o! C+ @
        return;: J9 e* g7 j0 @; S& a
    }2 p" c3 P, R. }9 [% @& Q

# C4 q6 O3 P2 W  t) R! j4 K        Create_Center();) |7 B$ ~' Z6 P0 s; ^7 ]: j7 M
' D3 g& K8 k' E+ M& z
    UF_terminate();* `" R: {# q$ T) t4 c
}* Q! W5 U5 V7 R* L! s+ i3 l: ^  ^  D

$ h, I; K7 ]. f3 R# Z, |7 |! y; ~4 N1 p% D$ O* g9 }; ]
extern int ufusr_ask_unload( void )
# b; I& W5 ?2 m1 D3 o5 G& V7 V{- N/ s: t# }3 W8 A' K4 m- f
    return( UF_UNLOAD_IMMEDIATELY );
# D6 \' l. h# ?4 K3 w}/ w( ~3 z+ M) d* ?0 `

3 [, b! j% h0 y1 {' {
% n7 |, D% N0 r/ A
" U, A  m6 X, r8 D( i! G3 Y0 T6 ]0 |  A" U! ^) p
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
  `* ]9 N" f0 R呵呵,终于写好啦
  }4 |) y  I5 u* G8 T
不错啊  
上海点团信息科技有限公司,承接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
# N( o. i! j$ _: l5 E1 X4 ?老师多多指点才行

0 B0 z; Y+ ^7 Q后面把 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二次开发专题模块培训报名开始啦

    我知道了