PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
* e* A: e0 d* \/ Q! Y8 E" L
/ ~( ?6 o& D* e5 O) N. H  ^

: S& n1 f5 M' o1 V3 ^1 P8 j/***************** Include Files *******************************************/" }, t2 k: q+ |+ d' j+ x
#include <stdio.h>4 p& l3 f8 x9 U$ a' H3 `
#include <string.h>* Q+ v( s/ n( t% v; Z
8 C$ K: O, s' M8 N, d
#include <uf.h>
8 \; I# k9 u. ?& s3 d' n#include <uf_defs.h>- w6 e- d( N2 _1 I
#include <uf_cfi.h>
! ~8 t, A- w% Y, }7 \* u#include <uf_cam.h>; C$ C" n% I/ {4 f4 A
#include <uf_ncgroup.h>' x) u# K& N+ z, K
#include <uf_part.h>6 `$ G  R" @! y" Q2 z6 ?
#include <uf_setup.h>0 G3 F& N# m% W/ t
#include <uf_fbm_geom.h>" x* @4 W+ z3 D
#include <uf_ui_param.h>& g) ~  @# C! K
8 {. b1 I% u9 m  ?
/****************************************************************************/8 E( L) q9 q, @: v; {; v5 M

7 }0 Z6 x: m  Y& {3 f' Dextern DllExport void ufusr . Q4 i% d! J. n2 r  ?9 V- `1 l
(
. S, M- v+ m9 s   char   *param,9 k! O3 E! n" s1 Z* V
   int    *reTCode,
, }6 g) J* A# a2 i# U1 |4 Y+ I* D3 c% I   int     param_len
+ \# \6 \, l# A4 B)# |' V1 z& a  r5 I- W
{
0 {1 q+ a4 T. X: w   int error_code = 0;
. }% N7 t, J2 ]0 I4 x- T$ W   int i = 0, count = 0, part_units;
# N7 ]/ K- L' D: s' z! ]   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
' G$ h" b1 h0 h1 M) O   char *env_trans;
  b5 Q# z2 V# o2 t: ^" p   char opt_name[ MAX_FSPEC_BUFSIZE ];
9 w" t& @& S- u+ F9 U   char part_name[ MAX_FSPEC_BUFSIZE ];
7 a4 v, j: e7 X+ o4 z3 X; J   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";" j/ \1 R/ }& K* p- S7 W$ ?
   char  **feature_names;# ?( x3 ^$ v7 [" i) j
   UF_NCFEAT_t *features;7 J; |0 q8 P+ v7 {, T

1 W1 ~, @; l3 _( X! h9 B% T   tag_t setupTag = 0, wp_tag = 0;, F1 \; S7 h" z4 O2 n
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
0 U5 j1 M9 l3 ?" u  J   logical answer;
0 K. \/ K2 e5 S% h" K
$ o' n2 n, r: A' r% d1 G   char **criteria_list;: s4 E5 g, j; q* ?2 }  u
   char                         **criteria_to_consider;
0 e# [1 ~; y# v   int                           num_of_classified_sets;9 L( p  o# H% H) Y
   UF_FBM_GEOM_classified_crit_t classified_sets;
, K1 J! s+ Q/ d. A   UF_FBM_GEOM_crit_value_type_t crit_type;  F9 E+ E9 ^4 A
   double                        value;
2 Y* y5 K5 B3 E7 u   UF_PART_load_status_t         load_status;+ B0 o, p3 Y6 ?( K( n$ R
" W5 _! h% s- I9 b, Q
   *retcode = 0;9 b, W7 h' R$ v( o" P
" W# u# b/ W# x& I( L0 N
   error_code = UF_initialize();& x) u3 B1 d1 \' {9 H
   if( error_code != 0 )
! Z7 l/ E! _& I4 `( f   {
) W: ^) [1 h; S5 b0 z- v      printf( "Failed to initialize uf %d\n", error_code );( Y: x# N; j/ K4 h
      return;
# u0 R5 l4 j3 z0 s   }, T3 w# ^& E" ]; L
6 P( Z# V: ?, x! @( R- R- v
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
! w# E: u4 j7 ?0 o0 A$ E# e                                                       &error_code );
; r. J8 t4 D7 _% s6 K9 L8 m5 R& c2 c7 v+ C, X/ c4 L
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
$ D- D: G8 a2 N                                                 &error_code );1 ^) V' g  \: c  V. x! O7 |7 f5 e" f

3 c: ]9 U( I6 U# \- T: w' h! V5 N+ b
   /*** This program works with the part files in the CAM samples directory; x( B5 m& h+ Y& ~
        so we need to get the path of the directory and the file name
6 a3 @% G2 y( B0 |( _1 [( a   *****/& W# x5 X& A6 |/ K
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
# ?  V& w! ]2 T' m   strcpy( part_name, env_trans );: W* @' z8 f/ ?, B
   strcat( part_name, "cam_holemaking_base_" );
4 F, s5 U2 M4 r5 r, u1 ^
6 y# A8 [4 n( \! f   /*** If no part is open then open the part cam_holemaking_base_in.prt) Q5 Y/ G! y1 Y+ z5 L. ?/ \
        from the CAM samples directory / @$ M+ z7 O8 N3 k# _+ u
        If not check to see if the units of the open part so that we can open" ?3 d5 n8 a2 a# n7 E
        the same units part
* {0 R; N! q2 ]0 j   ****/! l5 W- `. d+ F3 b+ E, o$ e
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )) K# H; m$ V+ Q" p6 O, p
   {- t4 G: f+ K6 g' Q
       strcat( part_name, "in.prt" );
* F6 q1 G. Q3 \   }
2 S5 ?% U3 d5 H4 B   else
8 B& n: O) y/ {7 W; j7 h2 m   {  P% {; H4 s# u+ z' P
      UF_PART_ask_part_name( part_tag, open_part_name );' ~, b9 ?$ X) T% r$ q% i% ]4 W
      UF_PART_ask_units( part_tag, &part_units );
& ]7 D3 @" V& R      if( part_units == UF_PART_ENGLISH )
  b5 S3 a' m$ ?/ N7 p8 f         strcat( part_name, "in.prt" ); ' Q3 P( S0 F) D
      else: M- v) J' k% A8 y3 x7 h9 f
         strcat( part_name, "mm.prt" );
# Q0 l" b, v0 j9 l; H# ?   }
/ V5 w5 C+ @9 ]; @) j4 ?3 \/ N" j4 d7 U. `. ^3 h
   /*** ; [! s/ J1 Q9 Z
        If the file we are trying to open is the currently open file+ L% n, c  C' B* Y7 |, J
        then continue on, \0 G$ s! ~+ c+ m6 \, X
   ***/5 @4 g" j$ V* z6 Y
   if( strcmp( open_part_name, part_name ) != 0 )4 k7 y, P4 e& d2 J! n6 g4 K4 z3 C
   {6 `! Z4 r) z% l$ G! h) @& Y
      UF_PART_open( part_name, &part_tag, &load_status );/ u8 A" h1 U+ g. o. ~; W
   }5 h9 ~% N; r# C$ E

/ c9 @4 G1 C9 s7 ~3 Q1 A+ ^   error_code = UF_CAM_init_session();
" p& R. \) w7 g* C; Y: p4 y   if( error_code != 0 ), I9 p2 E# ^  M; J: _( e' l3 c) v7 v
   {) P" ^$ S9 s+ w# s8 K# G& w
      printf( "Failed to initialize the CAM session %d\n", error_code );
/ d  h/ K4 C5 H. P6 f$ j      return;4 i# Z* T7 l) \! L- X* I
   }
* n# L8 F% H  k0 U" K# \  K9 R" P* L, V1 N4 p8 ~, h& S
   UF_SETUP_ask_setup( &setupTag );
! C# p8 Z5 A: E   if( setupTag == 0 )# m$ s& V# l7 u8 [; M/ O% H
   {
! ~1 w: R0 I4 C8 z3 \( ~      return;3 v, q0 Z$ `0 V% ~% Q/ o" X. `: C
   }, Y  z- S3 q# a: \3 J
$ a6 d  Z3 I: s: x/ ?- U
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );. P" d3 C/ d5 s" k
   strcpy( opt_name, env_trans );" j! B0 V7 b& ~/ {
   strcat( opt_name, "hole_making.opt" );
; a, J2 Y- w2 h" e, n% p) p" x* Z+ {4 v$ _
   UF_CAM_reinit_opt( opt_name );
! N/ f/ d* n7 E! E! ]% U5 j4 @7 u! K7 I. \8 P) m5 z
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
# Q: K" y8 F, X8 k) i2 u6 Y+ Z  B; S
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );3 P7 d- \1 @9 M1 e  k. v
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );. Y) X5 G4 X: y0 p3 {4 F
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
. D6 K! K% I$ \6 d2 o# g% h! S4 a$ w   if( answer == TRUE )
0 Q0 p6 l; {$ K* ^( k      UF_NCGROUP_accept_member( wp_tag, geomTag );
, _) [, T) H; ?7 F   else  F3 A* f9 ?/ p" z' g2 V
      return;
( k% H" Z& b9 p( M
, `4 V7 J& v" v; h  }( i4 B4 C/ v  ?   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names ); 8 _, c# p7 O( y' i

2 R; m8 l3 k! m% \2 M; b   if( count > 0 ); B5 t5 E5 F5 \" `
      UF_free_string_array( count, feature_names );
$ w) D' t, e2 A7 ?- z6 R6 k
$ l1 m! X8 {3 t5 b, S1 b   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
0 H, r5 B2 X* X& z8 p* g% g- P9 C7 g
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );3 D* `* F' I" ~6 I+ c6 B8 \" q! }7 d
' Z- [% l$ |1 E% d! ?
   if( count > 0 )
5 U! E( j. m3 z: ?9 U. D      UF_free( features );
1 O7 ]. G8 L) ]6 ?   else4 q! `: e  ~3 k' G3 L
      return;3 z/ m3 f5 y! q( C$ O' F$ f1 E2 C9 c
; O* o, v4 }( J% y# U: M
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );  o% }6 K  G$ b+ `/ D

3 h, p/ c& D8 I' O' I   if( count == 0 )+ X* o7 `1 G. x) B
      return;" r/ v: z- @7 ]/ c, U
" y0 B4 a2 d& ]; e# @3 A
   strcpy( criteria_to_consider[0], criteria_list[0] );
3 q% @6 I, H6 p& B: R' E
4 B# b  W5 n1 [1 |6 G   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,2 e" z$ I/ f: m2 q! W7 D: y
                                     &num_of_classified_sets,
$ m# `/ V$ {% l3 t" r8 {! h  ?! y& N                                     &classified_sets );
( n9 ]( D! S+ F
. J# m6 ^( m0 g# E7 J, u' V, n   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );9 J6 E! H! E2 r$ p# Y

1 G' i5 L0 ]1 S8 u$ X7 Y   for( i = 1; i <= num_of_classified_sets; i++ )
% Z# X, V( f+ Z2 }! `7 K   {! _% G' \5 g! i
      switch( crit_type )* \  [: Z8 O: x1 Z- T9 t. W* ]. D
      {
, `0 D* y2 |5 U' f         case UF_FBM_GEOM_crit_value_type_double:
# w: I  b6 s0 j* F            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
0 O, v/ v+ l1 v* o8 l7 E( e  V- Y                                             criteria_list[0],
, H& }' t; f1 c' y+ k2 h& B                                             classified_sets, i, &value );
2 P) A! _0 }7 ^# k            break;
5 _! Y( `9 I# p% o! K         default:2 m: r6 |% q% o2 E
            break;$ ~0 A$ I% h- }. y; t6 K0 F" G& }
      }
" y) t6 s; o' |  b+ D& \   }  K5 n7 i7 [) R! U( r- m/ q

6 |; ?9 N1 R3 N( V   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
, j. K* b1 W/ Y' ~4 _3 E$ U& e* w+ A2 K6 h
   return;
; z' l7 Z" I7 b( w# y* r}" r' t/ P5 Y0 ?9 N+ `! g. A

" v$ v! [) I3 t0 Rint ufusr_ask_unload(void). Y7 T: V8 }+ \- P) i
{& E, S. |8 U. K* A& ~
return (UF_UNLOAD_IMMEDIATELY);( ?9 H1 P5 z1 M# B
}5 k$ c, V" B+ @! j9 j7 s

, e2 t7 F- g) w$ l
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了