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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

3 D2 g4 g: S7 S# M& r" Z9 E' X. t! _

0 l( F6 N8 L) }/***************** Include Files *******************************************/: {; ~0 M7 `: t# W1 b7 u6 ^
#include <stdio.h>: ]  X$ x; \' U  R6 n" w6 ~
#include <string.h>
9 U" w! T1 l2 n, i3 s* a" M
& u  I+ T! }* k; O! S5 h( C#include <uf.h>
( d6 u% x) f7 }! U. z; X& i: s* {$ S) _#include <uf_defs.h>. g+ M" H) V" V0 E3 h7 v6 ~. g9 J
#include <uf_cfi.h>
6 S& g! n6 w1 [0 H% l/ a3 A, Z( B#include <uf_cam.h>
% [. X' }, q  w: n6 T1 a#include <uf_ncgroup.h>
: K  d  Q: X5 f% b#include <uf_part.h>
% I% V- h0 B2 U% e2 u#include <uf_setup.h>
9 q6 o6 ~7 ~! a- D9 e, n$ C#include <uf_fbm_geom.h>8 I# l" L( C6 A, o
#include <uf_ui_param.h>  v( w5 C! I0 z$ u
1 o3 {5 [% n3 T9 W
/****************************************************************************/" Q  ^: k- }) c. c/ p- m

, S- o0 e# r/ X7 {. uextern DllExport void ufusr
7 S5 H* Z6 h+ z4 W5 k(
( V' P, Z, D. M   char   *param,/ d9 c3 B% _- z# k5 P
   int    *reTCode,
% l! ]4 q2 S, A* \1 L7 W   int     param_len+ A1 H( U  x% m; W' U) X
)# n! V% U; s1 i/ @3 x* j
{
/ b- H# P* |& K7 D7 s$ k   int error_code = 0;
8 \2 C# A5 q$ `, n+ a6 @4 w1 I1 y7 W' ^   int i = 0, count = 0, part_units;# w% |& n* w* Y& b. g' }
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];% e- I. Y/ w* |8 g
   char *env_trans; 9 J2 x3 H! Q9 y. q- ]' |, U
   char opt_name[ MAX_FSPEC_BUFSIZE ];) n  f" E1 d* y# l3 ^- L
   char part_name[ MAX_FSPEC_BUFSIZE ];. `+ }  U& h/ _$ p' Z' r9 p
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
' J9 c+ y9 Q0 X3 N7 Z   char  **feature_names;% r! b5 f- P4 X! o- o! ^2 U, O9 n* K
   UF_NCFEAT_t *features;, p. E- ~) T5 ]
4 n+ g- ]% z* M: N
   tag_t setupTag = 0, wp_tag = 0;9 }: ^2 E3 K( s* D
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
! T: W  q* G: B* _/ D) }4 f   logical answer;, B  Y( _+ Y' `! x
) Y8 d0 ~4 J: g" [
   char **criteria_list;
, x1 w% p/ ?& C" H4 t/ Y   char                         **criteria_to_consider;
* [& [# z0 x+ a" q5 z   int                           num_of_classified_sets;+ P; R: S1 i( ?. B7 U3 A
   UF_FBM_GEOM_classified_crit_t classified_sets;  \+ ]9 y) w) W! p  G, Z
   UF_FBM_GEOM_crit_value_type_t crit_type;  n: W  d3 U3 i4 @
   double                        value;
5 ]4 c/ T! V5 l. d   UF_PART_load_status_t         load_status;
3 W# O5 R3 S, m
4 E7 H; p! m* C3 {/ o, w   *retcode = 0;& `5 F! h: ?+ U2 K
2 e) W  o! a- k- U
   error_code = UF_initialize();1 [$ Y- k3 f3 |: x; B
   if( error_code != 0 )
/ C9 m. M% ]' @3 y) J- d! L* U   {
6 J( N8 P8 t+ |      printf( "Failed to initialize uf %d\n", error_code );( e! B( U2 L) o! P8 T/ F( A
      return;
- y0 v% ^) P. [' ]/ ?   }% h- r* i; W+ |& ~- ~* i
7 O! j7 a) ^# l/ W2 A# N
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
& E; R/ v$ w, ?2 a& ~                                                       &error_code );
+ @6 _5 a+ r/ R2 t1 `
: C# a- m) J& }4 x* q   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, ' ^9 E1 i" H0 J0 n2 G
                                                 &error_code );( p1 a9 y1 E, A, b9 O/ _

! E3 q9 u  q8 @5 q% }5 q, D% v7 ^1 T# O( M
   /*** This program works with the part files in the CAM samples directory9 y, D' Q  d6 {" s  I
        so we need to get the path of the directory and the file name5 G1 \: [/ {+ Y# ]/ |5 l
   *****/
+ R2 X3 }7 ~$ G2 \   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );1 r. N, v; Y" ]4 h" P2 U# L$ ]. l4 X- _
   strcpy( part_name, env_trans );' W/ ?( R6 m& B( C
   strcat( part_name, "cam_holemaking_base_" ); 7 r. k% o% c9 j9 `% k$ Y. {
3 d8 g2 ~& q; u
   /*** If no part is open then open the part cam_holemaking_base_in.prt
! o: |5 z# \% Z6 m        from the CAM samples directory
3 S4 W7 E% a1 x. f2 N' s" Y7 O; H        If not check to see if the units of the open part so that we can open9 Q/ V, F+ J/ Z; J; ^
        the same units part ' B3 `. P& W- S  Y/ ]6 b/ H
   ****/* Q- t# S2 M. m# D! v, W, O; |
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
4 J+ f: N, Q3 f1 @" W; e9 E   {
& |( m% _; d) H# |9 S       strcat( part_name, "in.prt" );
$ S! ]+ E% B2 l1 |( d$ W1 @, Z   }$ H+ F9 y& Q4 T' B) ~
   else  |6 W6 }/ y% \  w( S
   {1 n# _" h+ `0 \
      UF_PART_ask_part_name( part_tag, open_part_name );
6 z* P+ k7 \1 b9 }! u7 k      UF_PART_ask_units( part_tag, &part_units );
& v' M3 u! Z9 w- X1 |. R) h# B# @      if( part_units == UF_PART_ENGLISH )
8 s$ U9 h" e3 r/ X& o         strcat( part_name, "in.prt" ); 7 I2 P8 h' _) J+ N3 m; m" c' v+ F
      else  J  N6 O; c3 D1 }% a$ \+ [9 H
         strcat( part_name, "mm.prt" );4 n2 y# h% m& }. ?7 d( d
   }% ]; p' {& T" i7 c4 ]

! V* c* ]+ m( T$ b   /***
7 z( I. T4 R0 x        If the file we are trying to open is the currently open file3 d6 ?+ J& O, i, C
        then continue on/ V. F" L% w7 W* [1 w
   ***/
& x' r% C5 T5 _; j. i9 d   if( strcmp( open_part_name, part_name ) != 0 )
6 |: P5 `* Z: j   {
0 e4 B- h- U' I. O! [3 m      UF_PART_open( part_name, &part_tag, &load_status );3 o& J" A( J1 S
   }
  \+ D, S0 o; R
  N- B) \+ l8 D   error_code = UF_CAM_init_session();% i; I4 X5 x- C% W; v
   if( error_code != 0 )9 F! B6 _# N7 b
   {5 m( E" ]" ?0 C0 Z% Z3 I! z" H
      printf( "Failed to initialize the CAM session %d\n", error_code );
: f6 G9 [- N  m+ i, _! N      return;9 n% Z' S3 ^! R
   }+ N* @( z+ a) |" \  d; _( M
# @# N1 r9 n' U( ]3 F
   UF_SETUP_ask_setup( &setupTag );" t* C6 c( G4 L/ q/ E  Y* k( y
   if( setupTag == 0 )
( h, i3 k& @2 W8 o   {
4 ~1 ~8 a( m) H7 c+ b: S2 T: S      return;# l! B' f7 X  c  c  }+ ]1 [1 u4 j7 s
   }
5 y5 L& {5 ]# Y& D2 k) {+ o0 B& x1 d
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );4 v" d8 P# A6 @- U
   strcpy( opt_name, env_trans );
! u, M1 N! J, p2 _6 ]/ t" J$ O   strcat( opt_name, "hole_making.opt" );$ }7 [- T9 L0 O' C& S5 ?

$ G% o3 N) ~- Y& U* X* T   UF_CAM_reinit_opt( opt_name );
9 @; w$ e" F6 S. R+ ?1 Y; ?8 t* a3 f3 o3 Q! I% `$ U$ R( L
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );3 C9 [) b0 e0 c4 `" E+ v
3 l% S& o7 T. ]0 n3 H0 @& N
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );) L6 B  f; A( q9 t
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
. _( n. a# y& o! s   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );' T0 h. t! @5 e, o) p
   if( answer == TRUE )
, o: X8 y' [" ?( I( i5 V- W      UF_NCGROUP_accept_member( wp_tag, geomTag );- L3 R) m+ f6 H4 a% J/ }
   else5 N, |2 ]4 |" s, D" w
      return;
7 ~  x4 o$ D* u7 w0 l' ]8 [# s* P5 P* ^: t( x  j
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
. X; F: F( D0 l$ E/ _, R% K
% s$ u$ r7 {5 H& t. q9 H   if( count > 0 ); g. _/ g  ?( q7 j
      UF_free_string_array( count, feature_names );( Q/ H( U+ Z' R. M3 a" I" @
* o( h9 ^9 |+ X! @7 y6 d" W
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );8 h) F0 Q; g' u( y9 V! b9 j3 @

/ s+ C# U7 ~! m: i. m   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
' J2 A2 J! k2 N/ t; O  [$ U
. z! B! k' k) \" n   if( count > 0 )
$ B8 S. @; {; }- p% \7 w" p      UF_free( features );
6 I. R9 F% w. {   else9 E5 h& j; d1 \5 |: ]
      return;, g$ ?) l1 n8 ], ]( K2 e
; O. _# ~1 {2 J
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );1 T( u0 f+ a0 p- @
* F! U8 o5 m$ _; V
   if( count == 0 )
* e* n$ G4 i; Z6 j7 g      return;) ^: L1 g! v9 ^/ u* L3 s/ [

, ?! ^( P. O* J3 q( O) t# z! j   strcpy( criteria_to_consider[0], criteria_list[0] );
( u1 a  X7 s, q6 [. L( D" n: E$ t2 w
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,; Z( e' W; d  |' w, r
                                     &num_of_classified_sets,
4 [$ ^* S( k# X7 H% q                                     &classified_sets );
  C2 K1 @# K# F- E. z; V! @
9 x6 _; B  a( V   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );2 m$ s6 I9 H- h# m/ M

2 h' y4 D* j' @4 |: }! x; u0 w   for( i = 1; i <= num_of_classified_sets; i++ )
9 }4 v% d$ S) Z/ N/ |3 G   {4 v1 \) V3 \5 x2 V: T+ W2 r
      switch( crit_type )! Z% O3 j( `0 S. t. c( d# [; ?
      {( O2 z2 u# X: Y$ W2 |4 e9 K; G0 e7 d
         case UF_FBM_GEOM_crit_value_type_double:7 s  T9 {' `* e8 r( G
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, " c# a+ J' x% A- y5 Q+ J6 b7 ]
                                             criteria_list[0], ) Q5 n6 J, ~$ ?) J
                                             classified_sets, i, &value );
+ }% g8 @  j% V0 z, V2 g, [: g% m            break;$ c3 K$ J- u1 c+ ~
         default:8 I0 I4 I6 h$ N  [. W: |
            break;) W" w# V+ o  G1 {- V' u
      }
" q; L1 H( p) Y! m* g+ d   }
9 z! B* Q4 O2 \/ \
" G- m" w! ^% M- ~: R* q" B   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
8 p- P  h2 {9 ^2 T0 ]3 t& `6 W& y7 t0 V
   return;. d; ~+ O6 z. a: Y8 W7 g* C
}4 E3 `( S7 @+ e2 r( P8 F4 d
- R/ Q+ p- t+ B0 Y
int ufusr_ask_unload(void)
8 k% A0 L6 }9 y& g7 y{  H! @( o* j- p5 y2 x9 ]1 y  f- D
return (UF_UNLOAD_IMMEDIATELY);3 @" R* H1 J# t* y
}. k) k; F" m  L0 E# E8 P5 n8 W

  N* o+ J+ u; ^+ r2 p' Y/ 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二次开发专题模块培训报名开始啦

    我知道了