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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
8 w1 p6 l6 o+ j: F0 n
( }: z2 X% d4 o+ U* L
9 O+ C: n% q$ c0 ^
/***************** Include Files *******************************************/) ^0 h! d; j7 k# E1 t
#include <stdio.h>4 C# F) v2 C/ m( t6 {0 a
#include <string.h>& z* E7 W5 X1 ?- V+ y9 C. ~

3 P7 ]4 f( q2 R: H#include <uf.h>
/ x$ o1 c* ~5 V! L- L#include <uf_defs.h>, C+ ^0 B: K  e/ z# f
#include <uf_cfi.h>  V$ C. M5 r2 q4 `
#include <uf_cam.h>
& R; W3 y/ g3 `! }5 p) M8 R% I#include <uf_ncgroup.h>
: C5 v! W* K) ~9 ?2 G#include <uf_part.h>' \# W1 R, H& ]+ y& i7 s
#include <uf_setup.h>  U8 @0 k6 m+ d* v# e
#include <uf_fbm_geom.h>
) a( d8 X3 D& n- T#include <uf_ui_param.h>$ E; y# P( J/ ]0 U5 {
' u, s. L. v/ A
/****************************************************************************/
) b& v; J% T" M5 J! K4 H9 X0 n9 N$ r# m# p) K. e
extern DllExport void ufusr
+ B8 d6 H' d2 ?5 A1 ~: {$ j8 X  K! k(
$ ]2 A" _1 u" u   char   *param,+ \" V; W& N: H
   int    *reTCode,
! h* w( z2 I. F- ?   int     param_len+ r& w- p& r/ ^8 r5 h- x$ ~$ L
)6 x9 m5 U- c- T/ g3 q& C9 o3 |
{
4 r7 w7 [0 a+ l( G" H, x% l* r# P   int error_code = 0;& y) R3 {0 B9 I
   int i = 0, count = 0, part_units;8 {& Q7 H; R. F6 _, K% ^
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
; N- N, W; s/ \5 c7 p   char *env_trans; ! `, R4 o, \0 E0 [0 o3 r. m
   char opt_name[ MAX_FSPEC_BUFSIZE ];0 s7 E$ ^' X" h, \1 o
   char part_name[ MAX_FSPEC_BUFSIZE ];
2 `+ X, j! w, R( W   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";: N# }3 H5 _- y# `0 C& O1 o0 _; {
   char  **feature_names;, ~2 ~% Z: \" s' q, f! K; {2 G3 E
   UF_NCFEAT_t *features;
4 w3 f1 g; ^9 ]- P' K- ]$ l- r7 F% `% B
   tag_t setupTag = 0, wp_tag = 0;
! v$ b* z; [6 J" a! x! V5 U   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; ' d  [* t  C7 I: W, `+ i
   logical answer;
3 b6 C( X" P4 `. U" T/ ]
/ C% @7 E  }, }* r' {   char **criteria_list;* {( C0 F  ?# P
   char                         **criteria_to_consider;
( y" w: D, S, B3 o   int                           num_of_classified_sets;
$ k9 |& x$ P2 {8 D   UF_FBM_GEOM_classified_crit_t classified_sets;2 v/ w( M" j# ~
   UF_FBM_GEOM_crit_value_type_t crit_type;% I9 }! `$ l" T5 L  g
   double                        value;. ^1 Z/ D# p* Q0 a) f
   UF_PART_load_status_t         load_status;
+ Y8 Y9 [3 E2 q
/ d; ]0 b& o! o9 @' Q8 {( L   *retcode = 0;# X7 A6 L  I. u2 ], T0 {

2 g& a- k. ~9 e' Q/ @! u: s: |   error_code = UF_initialize();4 K2 q0 ]9 n& j
   if( error_code != 0 )
4 E6 J( y# L( i   {
; N9 p3 T# }+ M0 y5 `$ ~# _/ V      printf( "Failed to initialize uf %d\n", error_code );0 T3 m3 \# O1 [( Y* O( w; ]" N' A
      return;
5 Y# U. e. y1 f, l: I2 B% O& A   }
) y- Z7 @3 z5 i# b# B' n, [9 A2 X
8 f# j: z, S3 d# V   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ), * u# e/ \* y" [7 g( K; Y6 {
                                                       &error_code );7 ?5 G; V6 ^. S* O

* l# E3 c4 d; z$ `6 H   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
4 T$ t# v( C2 T" W6 H                                                 &error_code );5 K) ?9 F' w) n, @& G7 j& p

6 \" X5 C0 R+ d6 h8 o
4 Y7 h9 Y. P) r! q   /*** This program works with the part files in the CAM samples directory
& c0 a9 |% f! i* j9 T. |- m        so we need to get the path of the directory and the file name
! V* Z* D5 ?& ~   *****/
7 ]* g5 q+ D6 Q/ Y   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );, S7 V% Y# W  M' }& m2 j( z
   strcpy( part_name, env_trans );9 h) S- s% A5 s. k  b# W; R
   strcat( part_name, "cam_holemaking_base_" ); ; |- Y+ p- A/ u8 {: w1 A% d  x5 z4 K. i

# V0 f' n+ T7 W8 Q7 b) |; h   /*** If no part is open then open the part cam_holemaking_base_in.prt4 g* v( t+ P/ z0 X/ {
        from the CAM samples directory 4 G+ w7 H  x8 H
        If not check to see if the units of the open part so that we can open
, c( K( |+ C$ Z0 x  l  O! y        the same units part 8 E% E: S0 E5 s& O7 N
   ****/+ ]/ c0 @$ O: m. B$ w
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )6 G+ v+ ~) {  a/ G7 C, H! I9 k( [
   {, @9 j. q0 H$ r$ w
       strcat( part_name, "in.prt" );
0 d% E1 v, k6 f   }0 {# g& D  }# S0 s3 }: \1 j) m1 w
   else* ~0 X( j9 U" b9 N$ D
   {4 ?: `3 A- p3 q$ u
      UF_PART_ask_part_name( part_tag, open_part_name );
/ @, s8 j. N; F" U% h2 z0 l      UF_PART_ask_units( part_tag, &part_units );9 F5 p7 O' |2 w8 ^* h
      if( part_units == UF_PART_ENGLISH )
- ~) _  K( o6 q7 a9 {( x         strcat( part_name, "in.prt" ); - V7 P: b0 H% w! H- Y
      else  A/ E: J; f2 M" G* ]7 y
         strcat( part_name, "mm.prt" );
1 D3 D* L, x; {7 f: x; E$ {* A   }
; H; a; r/ j0 V4 ?0 M
& |$ d% `3 i. \+ T8 \   /***
" P+ Y2 w0 _7 t4 |, M0 ?" Q8 x7 W) L        If the file we are trying to open is the currently open file
8 a% a5 ?' P( R8 e& Q        then continue on
* A. N( m' z3 u. Y   ***/
' u& k+ R8 i9 [9 y3 U   if( strcmp( open_part_name, part_name ) != 0 ), ]3 q& C6 ^0 R$ o% s
   {/ I2 q6 ^0 h% V4 V+ R( C
      UF_PART_open( part_name, &part_tag, &load_status );. b! x) P" n  Q+ q
   }4 q& l+ d7 w2 }: B. d7 Z7 T
2 h$ z1 q1 t9 e& l1 l
   error_code = UF_CAM_init_session();1 X0 H: P2 K/ Y5 }% y
   if( error_code != 0 )/ `! @5 N7 V4 N9 h! Q
   {+ ]1 |, ^: N9 ~0 H# d: a
      printf( "Failed to initialize the CAM session %d\n", error_code );
9 z! l5 z0 Z. |& w# L      return;; ~, p9 J/ F7 ?% t
   }
4 N* C0 C$ t2 u  n+ v& d. p
) h: ^. T% l3 S   UF_SETUP_ask_setup( &setupTag );
5 h" ?3 O7 X# X   if( setupTag == 0 )
1 d0 J' f- b  O   {2 f1 k3 e3 o' \
      return;0 W& O0 P: ~  z3 R
   }, K) i$ g+ `- D! |0 r) v
- S4 h# X% y+ h- w
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
9 J+ z) z8 `+ Z% w3 g: P   strcpy( opt_name, env_trans );+ s9 U! U3 }% a, x1 r8 ~2 Z% m: ^
   strcat( opt_name, "hole_making.opt" );
" x- H5 C  A' y2 w  q
; Q# w7 |4 X9 u. L. j- E   UF_CAM_reinit_opt( opt_name );
2 w4 w6 ~" o. o! P  t, O7 j& P; y- ^- g2 R! d9 ?0 J
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
8 U, d8 V( ]- m' M
+ B8 K0 e. t& P1 L( }   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
4 u; Q' O, f/ L   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
/ c& j" v" n* H   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
2 u$ G3 O# X# D   if( answer == TRUE )' ?2 Z  A7 e8 K$ F/ M' j$ \
      UF_NCGROUP_accept_member( wp_tag, geomTag );
( t0 {) o8 q9 \6 I" Y* K/ _   else
# m% ?& w9 u0 c$ o! j. `; u      return;* Q  D$ v, M8 V8 f
% t: j1 K1 V: w/ j
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
* |9 E7 U" H  M& d1 j. s
) y* p+ U( t& }3 E   if( count > 0 )6 i( E9 G0 ?/ _5 f
      UF_free_string_array( count, feature_names );
  `5 O* `8 f: y! ]6 w  y7 n/ T! `3 E# T; U
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
! z9 q# X* d7 Y+ e# Z0 j# M- K* h* F0 Y+ E5 d
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
/ S; o2 S" \0 q6 Q* s; F9 ]3 o! J% c/ D! s
   if( count > 0 )) W6 l: I* g5 l+ l: e, p
      UF_free( features );
; a+ E; H6 m( F   else
- ~8 @6 E' f- w. P) _: ~. a      return;
8 x) W7 h  W6 K) k) q1 f  D) @4 ^* e3 Y+ P" h
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
; e' b8 ?5 z# z) f6 v; T; |
) D5 M! _; C: v. V$ y" ~$ t   if( count == 0 )
, |4 Z  F* Q' y) S5 n- Q7 ~: Z) ?5 r# w      return;
4 x$ y( q  Y/ g+ w; K4 R: f* x! T
. J1 _2 k/ `7 q   strcpy( criteria_to_consider[0], criteria_list[0] );: B& @' e( K8 Y5 r$ u
: e2 I; H. l8 B7 M1 _4 Q
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,4 D% O- F, e. U. a
                                     &num_of_classified_sets,. W$ }# M2 ^' j2 b: B
                                     &classified_sets );
& y" Y' A2 G& W5 N: B. y2 t# H. q- e& x
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );0 K" f$ ]9 ~2 g4 [$ r% ?

8 P9 T% @8 f; F" ?   for( i = 1; i <= num_of_classified_sets; i++ )+ g4 ]$ ]' O2 @1 N1 s
   {
2 z2 ~+ L) [+ ^1 `& Z      switch( crit_type ), \% Q" i, m! s. t$ U0 t4 R( _
      {
5 s4 F: C0 j6 o( f+ y% A         case UF_FBM_GEOM_crit_value_type_double:
/ s' F) m3 |3 I            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
0 n" `; t! W( i                                             criteria_list[0],
8 m# p7 x+ u* G& |                                             classified_sets, i, &value );
$ Y) w- T) u1 S            break;
9 X1 ?4 D1 s7 }         default:7 u8 _% k, S: E! u3 z
            break;
+ o8 b7 K( Z3 h      }  C; f1 x9 D% j0 Z% b
   }
: |: n1 P" i" a7 w1 c3 h/ F2 m+ I2 ?
8 a. L9 m5 j6 N2 Q   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );0 {* V4 O& K$ V5 M

8 F" Y" U2 F( b% }( J9 c$ f   return;7 I. Y, ~& v, S2 q
}: F; u$ T% A" b. `0 b8 S) m

$ F' c6 N5 M" S- m; l, {* x+ T2 Dint ufusr_ask_unload(void)
4 w- A) v" ]# v1 m{
: V- \+ Z( [4 @% B; z) ^  E return (UF_UNLOAD_IMMEDIATELY);3 X& F" j* H  {+ A7 L. m
}
% T) l0 w1 }# |; a- Y' ^3 i' ~8 z! ~5 ]5 c% B; B( R0 v3 S6 {5 [9 m
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了