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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

8 V/ N! C" ]7 \$ R6 J8 a4 F3 y- |" g) O  A  X  c
" ~1 v6 u& b8 \5 F
/***************** Include Files *******************************************/
9 [) L9 i$ @$ `) T5 p* H3 X( X- x! g6 v#include <stdio.h>
4 F% O0 K: F7 e6 Y: p' P; ]#include <string.h>0 S! Q0 z* y: Z7 ~& r% h* z9 {; d

+ \; ^  ~4 W) Y( u#include <uf.h>6 [% F$ D: D# c. X8 d
#include <uf_defs.h>1 l$ F4 L; X8 Y/ [  E7 b; a& Z; _7 [- d
#include <uf_cfi.h>
+ N0 I$ Z, g) I! j+ K# U1 ^2 Q: f#include <uf_cam.h>
8 M6 `* G" R' J$ W- l#include <uf_ncgroup.h>
) o4 K, I: {3 ^# }' ~4 y$ o8 w, t1 x#include <uf_part.h>$ v( ]8 ]9 c1 X) |1 z$ s
#include <uf_setup.h>" M4 _& H/ c) P! K! ]( H$ \
#include <uf_fbm_geom.h># I; w  h& }' p+ i
#include <uf_ui_param.h>
, a$ I7 c5 A% I- J( @: [* \. Q% M' A3 O1 ~: \" I0 Q, B$ v: G) T- ?+ t
/****************************************************************************/- _4 e! X3 o" M. G% @% C6 C5 c: w* V

, p. p0 D  a) F7 i1 ^extern DllExport void ufusr
0 h/ }* X4 M, V+ Q9 u9 _(
0 T$ |* v% q4 H; T   char   *param,# C9 y# j7 Y; q& X6 t; T
   int    *reTCode,+ Q7 K9 z. i& g  w7 M+ V& ^
   int     param_len% Q3 v( _/ P2 i: y: |% t- K
)( g% U  l; X* }* ?
{
' o) ~+ x( Z. \0 v   int error_code = 0;
, V5 u6 S* N5 ^2 {7 y# }   int i = 0, count = 0, part_units;, r* ^% x! e  p6 ?5 p7 S
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];* r) v: {3 {) k: j  ]( P, O
   char *env_trans; 5 E  y% K0 @* F; X0 H- u
   char opt_name[ MAX_FSPEC_BUFSIZE ];3 `3 u$ o# c9 e& _
   char part_name[ MAX_FSPEC_BUFSIZE ];) a9 c+ i3 X* H7 G4 {/ K
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";( i! I) U: F/ }0 Z) C
   char  **feature_names;! R0 Y0 L; ~( p2 M, O9 y  ]7 N, P9 u
   UF_NCFEAT_t *features;
/ V: E3 }# Z% k: c
6 X' \- R( s. U; P; n   tag_t setupTag = 0, wp_tag = 0;/ @+ V, x+ ^% `6 a$ ]
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; 1 L* p+ W: B9 \: J) u3 ~
   logical answer;' b$ G8 i* Q# K. \' b' a# E) b
! ]$ L; m$ j+ O2 I* k- a. p* {" X
   char **criteria_list;4 c/ c( ]9 x9 C. Y+ Z- s4 L# B
   char                         **criteria_to_consider;
2 C9 E9 t% O" j' k   int                           num_of_classified_sets;
0 z) K, f, t1 r* W   UF_FBM_GEOM_classified_crit_t classified_sets;( d' z: A- |3 d0 ~
   UF_FBM_GEOM_crit_value_type_t crit_type;5 M" [4 c, I% N
   double                        value;- B, }8 f* H0 I0 J( ~. g  F
   UF_PART_load_status_t         load_status;
" }% ^( T  i. K1 x
, F6 G4 W2 k5 ^, H8 [$ y   *retcode = 0;
0 n* A8 H2 W5 N9 v
: F( R3 K* T, c3 J) ^7 e# m* |; k   error_code = UF_initialize();
3 w! [  ^: U' _. v   if( error_code != 0 )
7 d3 t" W' e. q   {
5 U; f, D7 H1 h+ f      printf( "Failed to initialize uf %d\n", error_code );
: A3 i) n7 o! [* l3 b: u      return;
! z) ^# \' q7 q4 q& K" l* ~   }: ?1 {4 V1 K; f& |4 ]4 X

+ C' Z! `8 D# {$ t+ ~  k3 ]   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ), 6 _$ H5 E5 ?" h2 J
                                                       &error_code );6 v2 q+ A3 t, V+ Q

, e* e  X2 u% k. ^   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, ' [: K% D6 K' \6 A0 z
                                                 &error_code );5 n! o1 ^2 x) W# G4 r% j. Z! }$ {

  X5 l) k# K5 P$ J3 Q
+ ^0 b9 e+ c( i: n   /*** This program works with the part files in the CAM samples directory
/ o5 D/ N# C& C        so we need to get the path of the directory and the file name0 v/ S4 _2 Q+ h9 N5 L. u
   *****/
' p( M6 i' G* r. Y7 z" Q) w   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
8 Q$ f( j9 }* v   strcpy( part_name, env_trans );
  d! w5 t% M4 [( Z, v   strcat( part_name, "cam_holemaking_base_" ); * }( `* A' [  ]' X6 o9 r/ Q9 q9 u

+ R; q/ m+ Z7 z2 h   /*** If no part is open then open the part cam_holemaking_base_in.prt0 |6 N: @' h5 g5 X4 i
        from the CAM samples directory 9 O' F* d( U* e( @" ?' @5 w: j& f# ~
        If not check to see if the units of the open part so that we can open- K8 b! s: {0 I4 ?3 l$ o
        the same units part 6 X  T$ j7 t, W1 W: S$ q
   ****/
( ^, g8 G% U9 \+ _- E/ [; W! u   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
! o. q' x( M4 m6 s" V3 R# s+ W/ g% y   {; s. W* J8 o6 Z
       strcat( part_name, "in.prt" ); ) u+ L: V) l# y3 A: b
   }
6 p& i0 r, P- J4 R. M: u: v   else
+ V0 h( c- t  u+ h   {$ G: V( U( h. J/ j
      UF_PART_ask_part_name( part_tag, open_part_name );; M7 U( K8 l; o, N; Y# p
      UF_PART_ask_units( part_tag, &part_units );% h  p. O" K, w' \
      if( part_units == UF_PART_ENGLISH )
/ h  n% I0 p% y5 t6 q         strcat( part_name, "in.prt" );
8 z; j" I2 E& z3 \      else
2 z: s8 v! f& h6 `4 S' y         strcat( part_name, "mm.prt" );$ p7 r: H. K, r4 }
   }
5 R6 h% F' G( U: n
  k" b2 m$ ?8 _) F2 S   /***
+ r  {) d9 {* p; Y3 C7 N        If the file we are trying to open is the currently open file$ K" K' l4 h$ m& ]
        then continue on5 b) A, i% f. t7 K* x! I7 ^2 a8 P
   ***/, _4 c7 F- {1 G9 k" p9 A
   if( strcmp( open_part_name, part_name ) != 0 )
- m" e/ q; Q; |- `1 F7 w# v   {
4 Y# h& b$ e. t2 t; H: e      UF_PART_open( part_name, &part_tag, &load_status );
% h" I: Q1 s2 @% [+ H, u  j   }
' k$ X" h2 p, W0 p% |$ ^+ y+ t
* A- P/ T" s5 _% ^; b6 l   error_code = UF_CAM_init_session();
( W, H, J& I# P* k5 _1 P   if( error_code != 0 )
6 ~5 y' h: Z: o! }- _( F4 L2 l- {2 h7 B+ Y   {
; F, _4 g+ l2 b. B' W. r      printf( "Failed to initialize the CAM session %d\n", error_code );
4 O, z. S& k! m  E- ?1 I      return;
: p7 k/ h; p% |8 P   }  ?, @. ^4 e& r/ a
4 u3 [! I5 _1 c* M
   UF_SETUP_ask_setup( &setupTag );
; b" C+ \+ S+ x6 M3 `/ N   if( setupTag == 0 )
% q$ \1 y  U7 E) a! i! }, t   {/ w4 H2 U7 o+ K( g* V6 ]! V3 g
      return;' j) E& Y  W4 b' ^+ x' [1 f  f2 x- }+ e
   }  c/ V) U: E  L* X6 J

/ N4 Z- E% Q5 f   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );. T" {) H+ a, ~% w1 o. D7 ~
   strcpy( opt_name, env_trans );
  u$ u! B8 Y# v, L* @   strcat( opt_name, "hole_making.opt" );
7 o/ r" c7 R: ^0 x5 u
) M+ {" ]* B; W( q2 W  z) V   UF_CAM_reinit_opt( opt_name );
9 S3 [& r: b3 Q$ D0 y: T0 T
7 Z0 j( j" T4 F) Q   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
. a5 H7 W$ K5 M( X1 f, o4 {1 o7 E- O3 i3 B: y+ I6 J
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
$ X, [9 ~$ p/ R+ n7 a+ x   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );. F& N- `( X& T4 V
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
6 H. z7 l. U: }9 ]; i6 E, f   if( answer == TRUE )
& ^1 S; }! V) J+ ?      UF_NCGROUP_accept_member( wp_tag, geomTag );5 k: N/ Z1 I- H( `9 Q3 Q
   else
- i4 V+ F# z6 a* F, K4 f      return;
+ R$ W' Q( l5 y8 ]4 f' _! @" W& N# Y* y
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
. H" X! Z4 C7 y; q$ ?- H. N/ N+ Z. ~  R) k# `: B8 k/ h3 t! V
   if( count > 0 )
  g) R( e) M3 A% Y      UF_free_string_array( count, feature_names );
6 N: I9 ]& V. s, W4 L& q$ U/ H
* a4 M: P( y- a   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );- x( T- d. m" ?9 {0 P7 f

) v2 r* {0 a8 X" ~8 _* B; S   UF_FBM_GEOM_ask_features( geomTag, &count, &features );: J- V' v: t% ~2 b) l8 R8 _

4 L* A1 r& g9 G/ G/ J' u1 {   if( count > 0 )
  Y6 p5 t& t5 f) h' ~      UF_free( features );6 n  u% z9 r9 D
   else( \+ c, \2 O/ v* P
      return;( B; e$ ]" l2 G1 Y- Y& u) K

- j1 q# Y# o4 r) G) a; V   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
/ ~3 w0 n" q( c. E: ?! ?
) c4 Z3 M# |* C# n8 C, n% J   if( count == 0 )
4 |2 u5 h& `2 B5 }9 o0 a* k& F      return;& K, X) W0 i- }% O$ U

. o6 R. `! S% N6 [   strcpy( criteria_to_consider[0], criteria_list[0] );. Y$ [/ l! E* B3 d6 s. Q+ M2 o
" U! ?7 d# x3 J  b6 i  v+ ~
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,+ J$ L( Q1 I" E& D: z" M
                                     &num_of_classified_sets,
- m( F; [: O/ a- G, L                                     &classified_sets );
6 z- s# N$ l' j  T; v. o# y; s4 e: }0 G1 m1 z1 l
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );/ t$ Y: O' d( R

3 z  x3 a/ f. S0 O   for( i = 1; i <= num_of_classified_sets; i++ )0 n  Z( x6 d3 ~- l( E& W8 R
   {% R8 a) I  _2 v2 W/ Q
      switch( crit_type ); s. g, M/ e3 a8 X
      {
  b1 Y4 X; y0 u, S         case UF_FBM_GEOM_crit_value_type_double:+ B: t1 t2 K/ r3 ?
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, 7 E; o6 S, Z* l! p# U$ O% T
                                             criteria_list[0],
/ p$ \6 V# {' D( n: v; n                                             classified_sets, i, &value );
1 w, m: V3 n6 x9 G2 Y5 Z            break;# z2 X7 g& f- [& A
         default:+ Q5 I0 C- B, p; {
            break;
4 w  F# L, N/ M) Q4 S' c+ c; _      }9 N+ v. t' s" N5 a
   }
/ _/ {* z, ]. q: z" X( G* n% i0 p+ r4 L# ~( v- v2 m0 Y) V
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
, E) U" X# |8 C% ^1 Z6 {9 @0 u0 {+ E
   return;- z8 q4 ^! |* ~8 e4 k* }1 I5 n3 ^
}  T; L: f+ ^' y
7 t0 B, @0 s9 B! G
int ufusr_ask_unload(void)0 G. d6 D' }7 \# j; }
{
! X; x% S% q! Y4 o( L) F9 j return (UF_UNLOAD_IMMEDIATELY);
! D6 n/ N9 t( U; C: j}+ G% O6 t6 O8 n) G" _

$ {& C$ y" z; G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了