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

[二次开发源码] NX二次开发源码分享:一个孔加工的创建过程

[复制链接]

2017-12-9 13:27:49 5129 1

admin 发表于 2015-3-17 20:41:02 |阅读模式

admin 楼主

2015-3-17 20:41:02

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

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

x

/ @% w9 ?' J5 x& \* A8 q
" _! q" e* R3 z0 p! g
9 z; s# }/ H( q$ H# g, H! Q/***************** Include Files *******************************************/
& ^, z, s& m- h5 v#include <stdio.h>
  D3 N8 _, b2 D0 n" \: M* U* Q#include <string.h>" z* B7 }, R9 Q" S0 m3 m
) P) R, n/ Z4 N$ t" r/ O" a
#include <uf.h>
% ?) {% n7 Q8 d& z) s#include <uf_defs.h>$ h- c9 x3 V! @9 X4 e7 t. W, r
#include <uf_cfi.h>
6 Z6 B% h5 u$ a: [+ _9 F: V#include <uf_cam.h>) q$ x6 G5 P! F, s& T! X$ J' D' Y
#include <uf_ncgroup.h>+ q6 }7 F! D( Q( A+ I- @# \* A
#include <uf_part.h>
" b- @$ a( ^* {& v#include <uf_setup.h>
, u( T: }% p. i4 Q! I4 M$ Z#include <uf_fbm_geom.h>
2 d: {5 J: p, f5 Q' p  }#include <uf_ui_param.h>6 C; v! O. z) m) M7 [: y! _
! c8 ~) b' b+ |: v
/****************************************************************************/2 l4 r# E4 G0 V9 J6 G" s5 C
) G) i# u# o# U) r6 J  H' R
extern DllExport void ufusr
1 [" B7 q- P1 X7 x' b(
  U5 u. v" Y$ V7 t' P   char   *param,
" Z$ C! \  z& o; _+ X8 E   int    *reTCode,; ^( v" t* p5 L& E7 [; ~
   int     param_len$ D- ?2 {$ Q7 e+ ]
)
: Q+ [* t) @4 L9 Z; G{
' m( y. z  S# H. ^/ t4 M. z   int error_code = 0;
: Q/ l2 K7 ^: e* y& U4 k8 H   int i = 0, count = 0, part_units;+ x% |) v- C: }* A  T
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
" @* v5 ~  _/ {0 g   char *env_trans; ! }0 t. m& D: @8 h. S( b* N% L6 D
   char opt_name[ MAX_FSPEC_BUFSIZE ];2 l! B9 v/ E; j( [- X" M" A; E1 g+ m
   char part_name[ MAX_FSPEC_BUFSIZE ];; v( g5 l1 P# S
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
$ ^2 G- M2 l% S   char  **feature_names;7 f7 g: ^% a+ u! D/ W+ O
   UF_NCFEAT_t *features;
' Y8 S6 }1 e7 Q: a5 H/ H, u  B. P, Y6 T1 R* J+ V
   tag_t setupTag = 0, wp_tag = 0;
7 G  d6 R; }$ z, o   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
1 v# m! X9 b/ i  b1 j9 o   logical answer;
! n7 Q  `4 }8 B- h1 ~; r6 I& U
: _9 o- }2 t. d" n  A   char **criteria_list;2 |3 j8 T  _: S/ A8 x1 q( K, A3 X
   char                         **criteria_to_consider;6 ~6 D) q0 g5 }9 [1 B3 \
   int                           num_of_classified_sets;& [" A! T$ }9 o9 a
   UF_FBM_GEOM_classified_crit_t classified_sets;
; t+ ~% T- Q* e& U4 @0 w) l6 D   UF_FBM_GEOM_crit_value_type_t crit_type;9 y/ Q8 l6 C% o4 l5 i2 l! V
   double                        value;
8 U7 ]; |7 [) {4 A: \   UF_PART_load_status_t         load_status;
, y& C# W6 o2 k9 k* S+ M% c' I* p! b. w6 f" @
   *retcode = 0;. g2 Z9 q) m4 [2 G5 ^$ s

1 Y; Z) J. n1 @1 L   error_code = UF_initialize();
2 ?* x: T( W5 X8 V6 A" S6 N   if( error_code != 0 )' A0 i9 [, ]6 A: T2 `, _& D
   {5 u# A. P  @8 f1 q% S
      printf( "Failed to initialize uf %d\n", error_code );' W) s& \1 }$ Z, j
      return;# e) f8 i$ Q' l
   }* F  y) i: O7 h  \3 U5 O
# @2 y; X/ d: T+ x7 e+ D8 @
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
0 C0 r/ s# \) w: u) t                                                       &error_code );
$ A# ~; C, Y  d! E/ _! x
. `7 h% J$ o5 q. [& U$ _; a   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
0 c+ I7 ?; i$ O! N                                                 &error_code );  S% f) X8 z, g

5 d. g% b/ y* \+ j6 J: Q! j
0 S) |. J7 W6 V, c- H7 K3 F   /*** This program works with the part files in the CAM samples directory
/ c- N- H3 n6 o9 X/ g4 S# N1 z  L        so we need to get the path of the directory and the file name
3 I- x$ g0 M, `7 X1 R' b3 |   *****/! [$ F9 ]! E! g% S+ n/ t1 G" \
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
4 r& Y9 i' l9 c' b7 t   strcpy( part_name, env_trans );5 E. ~( y6 h' e( R" V
   strcat( part_name, "cam_holemaking_base_" ); 7 e  E8 e6 y" c( S! r

2 E2 u% \! H' e. ?( U( e7 @   /*** If no part is open then open the part cam_holemaking_base_in.prt6 ?$ d7 {2 |7 K
        from the CAM samples directory 4 k; T( j2 W* X; a1 A# w( }( T& j* y
        If not check to see if the units of the open part so that we can open, Y) K1 ]3 M) n! m2 D4 w7 M7 s/ t! L/ T
        the same units part 2 H) x% [5 ^- K/ d- T6 j+ x
   ****/4 n. F' \( k" U. x
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
5 I: C3 a, l$ `) T0 j4 D4 o   {
5 _4 j- H/ X7 @1 K( u       strcat( part_name, "in.prt" );
4 K, \3 w% y8 j5 i   }
8 V# \0 Q7 l' w" j9 I   else' j6 |/ \* ?5 \/ ~) L
   {' j% E/ B' q8 x0 y- \$ m6 _
      UF_PART_ask_part_name( part_tag, open_part_name );) l# H- g: r6 \
      UF_PART_ask_units( part_tag, &part_units );+ e' H* c4 ]  D7 `, e9 P1 m
      if( part_units == UF_PART_ENGLISH )
& E% T( H% `" o1 K5 w$ }7 v: I         strcat( part_name, "in.prt" );
% E% e* K7 @, \, U7 L. q' R      else
" f5 p% f) O& h! n5 p: h         strcat( part_name, "mm.prt" );% i; ], e; Q! _) j9 G+ H8 {
   }! V6 @* `6 G9 {. ^# y

% k% y3 l+ W- J* `/ \   /***
1 s% `8 P9 g" E$ b" o8 f' e, Y+ p. I        If the file we are trying to open is the currently open file2 U# W1 H- q! X, s
        then continue on
) ?' Y$ C! Z% ], Z   ***/+ N- o+ S5 L' [* E! o
   if( strcmp( open_part_name, part_name ) != 0 )
, Q! J1 ^5 \; t: e) A* U   {
5 P) T1 |7 |+ Y$ `4 v. w7 N& q      UF_PART_open( part_name, &part_tag, &load_status );
# L; M& t/ ^5 \$ w: F   }
7 L7 X  L' c% a# o3 A1 e3 h' X2 q3 j/ U1 ]" F
   error_code = UF_CAM_init_session();
! }8 O: q/ j/ G9 o+ \5 A/ \7 _   if( error_code != 0 )# h0 Q5 `# d% t+ G- O1 v- [& Z
   {
; V, A4 B4 t; V, J; F& w7 z/ j1 ]      printf( "Failed to initialize the CAM session %d\n", error_code );. S4 s/ h, K+ c9 y/ W
      return;% n' X- K( A$ ~& ?$ _0 f6 y3 @
   }
3 f0 z% K- Q$ L# G
* j6 K; s3 Y5 b' V* s   UF_SETUP_ask_setup( &setupTag );
8 }! ~8 y* y1 H   if( setupTag == 0 )4 a) Z6 g- A& P
   {. _: @! Q9 C$ U4 d. u
      return;% E# z, P9 `" {6 m: f7 q
   }; J. L# A  ~) Y" Z

: M* N: b* M) R, Y# F% [   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
! R3 ~$ }% i+ F. u' j   strcpy( opt_name, env_trans );9 i( g, ~3 S* N( ]8 E! L
   strcat( opt_name, "hole_making.opt" );
6 a  f2 D, ?( B7 @9 _
& x( V3 s0 K: L( e" h5 v. w- j8 |. y   UF_CAM_reinit_opt( opt_name );
1 C! B7 d, C' i, H. V- F, N+ P5 i. n7 A+ r' ]/ ^; F1 t
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );/ _$ ~& g9 ?& H6 v7 q+ h
0 T; T9 q3 N( ], e
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
# _# @( t7 L  x* [) R% E+ ~6 g  T   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );" T, e) n' m: @
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
7 c  B3 x( J0 a   if( answer == TRUE )% I* _# ^6 B9 V
      UF_NCGROUP_accept_member( wp_tag, geomTag );
& C( R) M8 b' q( O2 w   else" t1 W1 a7 B7 q& _8 H( b
      return;9 A4 Y+ m. v2 X/ M4 O1 w5 ~

! {! d+ a6 D% D   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
) N8 L  k, h: `9 A9 q* v: }6 l- X- N# G1 H4 x
   if( count > 0 )+ c  ], R6 H6 c
      UF_free_string_array( count, feature_names );( B; |# e* e: l2 H3 Z; i
: y8 I! s# T* n2 @4 c' D
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
+ F" |% X) g  w' ]$ G
- G7 ^( V6 z: k8 E5 U4 |   UF_FBM_GEOM_ask_features( geomTag, &count, &features );& A( J1 c/ Z, T$ ?; S  `
3 d  }& h: ]  C1 t9 x, ~
   if( count > 0 )% v$ J2 N* S8 @/ |! g3 W
      UF_free( features );9 v$ T# D: \, A7 F3 }$ Q9 r
   else2 x2 E- l$ B* I5 C+ `8 Q- `* [
      return;; J. x& n" c5 N
6 M9 U) L4 Q# G( p: L/ ^, }& l
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );6 o/ a' p1 R% V. z

8 ?  F- C  o* L   if( count == 0 )" O# T5 e) u( s& y1 w0 o
      return;
- {% R' D, M) v+ K& _$ X! Z% g) z
' U# `4 o% U% `9 V/ B! R   strcpy( criteria_to_consider[0], criteria_list[0] );! j+ e+ x# f( N" q+ I& V1 S1 ?+ r

  v; s$ @* i+ a6 o   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,
8 u0 V2 J6 R$ C3 t0 k& i' C                                     &num_of_classified_sets,& g2 C# B! q( [5 n
                                     &classified_sets );( H' Q. y' D7 B

" B4 y3 Y# `3 v" k; Z2 i; `   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );* p. G$ B! i4 n0 _  l# l/ u

+ @9 L# n! F: [1 F4 a" d   for( i = 1; i <= num_of_classified_sets; i++ ); H( v0 d4 r% M2 T4 O
   {
7 \# v" `4 i8 E* m      switch( crit_type )6 S( x' p! W( j4 y" L
      {: z. J7 L: k# t
         case UF_FBM_GEOM_crit_value_type_double:
' h1 y$ e9 W/ h! _/ Z            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
1 U' T1 I, ?, M$ j5 r' F6 V: @2 s                                             criteria_list[0], & S. D$ G+ u: A9 }( {- u! L
                                             classified_sets, i, &value );
! Q$ G# w0 f4 I4 z5 Y            break;
/ {& N' |/ A: @         default:
. a/ u$ u/ a' {7 v5 U: k  D            break;
2 ~# _8 ?$ R; z      }; ~" P# z! [' g
   }
+ }1 E; |/ e5 `* \
6 p5 W6 V6 {: i' E& E/ p% U. [4 u   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
/ |. b* N) S/ z: l; x
& Z+ F' |9 G, o1 R; c# @   return;# Z/ w7 x) a% W& y
}- u: ?( i  L, q% J9 P' a' }
& e) \& s5 w5 W; w5 a+ O+ D( V+ R
int ufusr_ask_unload(void). Y% K; O; v. l; \2 G6 ]
{% `; U5 ?* |# ]5 t% x: R
return (UF_UNLOAD_IMMEDIATELY);
4 n+ E% Z, L. p}6 I3 {7 o7 N9 F, {9 i+ O

, R; b% w5 S4 B- @) D
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

至简天成 发表于 2017-12-9 13:27:49

至简天成 沙发

2017-12-9 13:27:49

不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了