PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
; r, ~; h2 J" J* P8 q' m! B+ M2 o
2 ]9 t: ]! N8 g  f) G4 G

* w" C. W# n# i- k4 {* X/***************** Include Files *******************************************/
1 X/ `" l$ @1 b+ O' W#include <stdio.h>
4 F7 Z- [  y8 y5 C#include <string.h>
6 S; K$ B  N# H; c; p' g/ h, X# v3 I( _
#include <uf.h>
. w, B9 \4 n4 `2 `; e#include <uf_defs.h>% {$ U8 _5 {7 r7 c
#include <uf_cfi.h>
* U: g) {( P- G! _0 A3 z#include <uf_cam.h>4 @/ |) L7 S' r$ v1 {$ Z
#include <uf_ncgroup.h>
( N3 X2 [  D& K0 @) O#include <uf_part.h>
/ Q$ D- c+ a/ i0 y#include <uf_setup.h>! i0 l9 N! Z; e3 K6 ?+ t. J
#include <uf_fbm_geom.h>- i1 P: U7 R7 q" {; u* u
#include <uf_ui_param.h>8 R& r  g4 S! i- \" K3 W  [1 q' a; Y/ ?
& n) c2 d% T+ ]# A
/****************************************************************************// ~+ n0 |; E: A; E/ v

2 {& Y2 J: K0 j2 X$ Yextern DllExport void ufusr
$ Q+ p8 z$ Z* W. B5 `4 t, j% l(# e( W# Y, Y$ s$ [7 S' l1 V
   char   *param,
" F& o* D4 o, v, k   int    *reTCode,
1 {1 F- V0 k: M   int     param_len/ ^- z  F- A! ^* S' q1 O  c; P
)
* K0 u& {2 P+ L7 B4 w{
9 c3 C; @  I( L0 N! s/ c" e  K. N% V   int error_code = 0;
) l; t5 a2 ^/ _6 z, Q" s   int i = 0, count = 0, part_units;
& {$ H( E& W9 p8 i- q/ X- j   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];3 Y9 \' t5 l, X* k$ R& m
   char *env_trans;
# B# @& j( M% b6 W   char opt_name[ MAX_FSPEC_BUFSIZE ];
8 S" V' {  k# S& z8 ]: ?% v   char part_name[ MAX_FSPEC_BUFSIZE ];# m6 V0 S# g) ]$ `
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";0 ~9 U# @1 u4 y- p9 A2 B
   char  **feature_names;
- l1 Z' Z! F* y& `1 p5 T  b   UF_NCFEAT_t *features;
8 Z" C: d" B; R2 i; y
/ a- X. H7 R- r  T   tag_t setupTag = 0, wp_tag = 0;- Q! I- F) M( d  w% \5 t  W. \
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; ! i3 ~/ y8 G" z! I/ j' K* ~
   logical answer;
) C6 w$ b4 x; {; `1 B( `* [$ M- m8 {2 ^# h4 w0 x$ p: o& W
   char **criteria_list;
% g! r* C1 N% o  y8 y5 S  |   char                         **criteria_to_consider;" |) D2 m3 V; x% A
   int                           num_of_classified_sets;1 h* ?% R; p) s. k' ^
   UF_FBM_GEOM_classified_crit_t classified_sets;
! e0 y8 T) K' H   UF_FBM_GEOM_crit_value_type_t crit_type;
4 |* d9 r# \: S4 c: x   double                        value;* R/ V7 G5 Z) @" {1 ?
   UF_PART_load_status_t         load_status;/ H2 @5 R9 J' l2 B* q( v

) R* A/ N( {8 [   *retcode = 0;% l8 L, e" C# K6 o2 H! j3 C

8 o5 f' a9 @0 s3 c& m( T2 u( W   error_code = UF_initialize();
/ e& }, Y: ?7 {/ ?% I( N8 w   if( error_code != 0 )) l1 |/ n9 E) L) s3 R9 j
   {" E+ F* ?' D% R" h' _4 O. d- ~
      printf( "Failed to initialize uf %d\n", error_code );
/ f" u" _/ I2 \$ P      return;
1 T9 o8 `  U" G- C2 m$ |   }
$ b! l* W$ Q, Q  Y4 P
. g7 R) h. Z0 L& H$ R6 X' t   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
- s; h9 f3 E2 }( H                                                       &error_code );
; g; `6 _& z4 R  m# y" O, R7 A2 x+ p* m1 ]1 O' R& F! m2 _
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
$ Y; ~' h2 w" C' U, L8 W                                                 &error_code );
9 @3 U6 a' H% e- h3 p. v" c4 _  k3 J( S* w) z+ A6 S
$ [2 w0 u, J! Z7 @" O' j
   /*** This program works with the part files in the CAM samples directory; a; L! Y2 _8 |, u! _! ^2 j% m
        so we need to get the path of the directory and the file name
' O- O1 T. p1 P$ E   *****/
5 X+ ?: k7 m+ y: A; @% _5 J9 d- W6 d   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
  l, l" T7 s. G6 x" F) ~, k, W0 p6 G   strcpy( part_name, env_trans );# B* M4 @9 _6 j* O  r
   strcat( part_name, "cam_holemaking_base_" ); . `/ z3 e/ i! q! i+ A* f1 W

7 P% s. j+ S5 q: q, S   /*** If no part is open then open the part cam_holemaking_base_in.prt% W' s. j4 l$ [7 l* }
        from the CAM samples directory 1 u: d# c% K3 d; Y7 l7 F9 w: U
        If not check to see if the units of the open part so that we can open4 ~/ T2 v# R8 c+ U2 G5 ~' o4 D
        the same units part
, B9 T: e  u+ R+ j6 e   ****/
+ R2 Q& X7 K# P+ _( ]. i   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )! y& D$ m! A5 r4 A
   {
& @. w6 C9 c  ]6 k       strcat( part_name, "in.prt" );
  o! t7 m  ^) m/ T   }
2 C9 Y3 }/ w9 @2 j9 V   else/ `& e, n2 |' ~3 {8 p
   {
0 m* j' b- A. ~      UF_PART_ask_part_name( part_tag, open_part_name );
4 ]6 f! D% {( n, z9 |      UF_PART_ask_units( part_tag, &part_units );
1 Y9 x$ b9 r; n, f      if( part_units == UF_PART_ENGLISH )
: f+ L& d8 |. @/ B6 L6 p         strcat( part_name, "in.prt" );
, H+ o4 W1 b' h5 c0 _      else
" t7 Z# R% A& C, i/ r& r0 ]         strcat( part_name, "mm.prt" );: T( P9 X5 i( W: @( i- D( l
   }1 L) \6 D+ a5 }$ t

, M7 B6 C2 B. n& {   /***
4 S, |- l! \+ F( N4 T        If the file we are trying to open is the currently open file
+ O3 ~8 z; t- X6 S        then continue on
& i: l9 S5 q* r: e3 z& w' J   ***/( y. J, a! r: [$ I1 n  F1 K# n; P
   if( strcmp( open_part_name, part_name ) != 0 )4 W$ B$ i7 \, y2 U4 o
   {
  o- S2 ~5 {: |( p% ^      UF_PART_open( part_name, &part_tag, &load_status );
0 b# G+ U& F/ T. u0 |. x   }
8 ]  b' m" x# e6 |+ [
0 {2 N5 G% K: [% {2 q   error_code = UF_CAM_init_session();
- |$ x0 m$ T2 O1 |6 F* P( L   if( error_code != 0 )' Z. V- F7 c, f. O0 ?6 T
   {# D/ w; F: M* \- H
      printf( "Failed to initialize the CAM session %d\n", error_code );" h2 @' c$ a5 |' p  c
      return;1 y$ a) V% I! o$ U' _  b
   }
: ^6 l* u' \' D4 f+ B
) Q9 G/ y$ o( y: ^" x& G6 G) B   UF_SETUP_ask_setup( &setupTag );
+ z0 R$ C2 s6 E, E+ f* X   if( setupTag == 0 )
# ^4 {3 K/ L/ W7 P" D7 B   {6 e9 R& J6 E3 B+ c
      return;
1 J; N; m2 a; A   }
1 v. l2 E) o# [9 t9 e
: ^5 c* |4 H# c; X1 c# r+ Z   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
+ U8 |4 [' Y) g& d# n- j+ v   strcpy( opt_name, env_trans );
6 f; u1 ^2 G: L7 Q' I) \4 `   strcat( opt_name, "hole_making.opt" );
$ s0 n6 c9 Y' S4 Z0 l( t% R# h0 ~- s. k2 Z
   UF_CAM_reinit_opt( opt_name );
" m0 K2 i, C. |5 k0 @# ]; {' K( z3 z& G9 P9 ~, Y
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );1 O+ h# f0 |3 N. G6 c

5 h" E+ u* Z# [! C" @6 p2 E: C" i   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
' B8 `% b6 ?- k! r: J   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
4 B9 t8 I, G% Y5 R6 B1 z% H, x   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );8 u4 F! v; s7 r4 u( ]' n
   if( answer == TRUE )! G( y2 C0 ?2 X3 D. _  z
      UF_NCGROUP_accept_member( wp_tag, geomTag );& @$ y0 Q6 W( u  U# A
   else
8 m5 T% |+ ?7 a/ G8 X# T& \, S      return;
2 L) R: ~: U: O5 ~$ Q$ L) C" m5 r' G# Y: Q
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
0 W( e/ K$ t. U, D( G% A1 x+ F3 L) N8 j& p
   if( count > 0 )
" ?. K/ _4 M* h5 O1 w$ M1 o: l      UF_free_string_array( count, feature_names );1 q4 g5 Z% ~' B. P! L3 S9 p$ m

. K, d" K2 I1 _% d4 ^- g   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );7 m. X) e/ U7 K6 B6 m
% L- {; [' V8 j1 J5 q
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );. B# K1 h% M  O+ ~$ i: k/ x" P: o
4 Y9 m  y& }4 g4 |6 N# I% ~, N
   if( count > 0 )  C- J  Y- J2 Q$ L$ h: V
      UF_free( features );% ]- K, T; {0 {& B! h8 {4 y. H
   else: v/ ~) ^+ P/ ]7 T# m) n% |0 v! w) B
      return;
% @% O- w" p! A' N8 W$ x7 \9 x2 T. n. ?  e6 l" o4 h7 o* i. W
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
, q- @9 r4 A1 u+ f# f* ~- N7 d5 J
( i4 {* n. |! A# [/ d/ h; w   if( count == 0 )- }, k( L1 s0 D& h4 k$ g
      return;
0 y# w( S/ _0 G8 E8 r# Z5 ]% \2 W5 D4 X+ d0 |
   strcpy( criteria_to_consider[0], criteria_list[0] );
/ a5 t, t$ D5 g0 b0 M9 T1 m* g9 v
! P; u% J- H. _2 r) _   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,1 e* v9 j+ C( O
                                     &num_of_classified_sets,. v! e7 v; |4 c& `
                                     &classified_sets );8 j' k1 H1 E3 l1 J

/ x0 c% @! c+ X3 P1 j# B; w   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );# [6 C+ u: \8 U& R1 `( p

- `" o: k8 k# E' o4 _  J' v% G5 o   for( i = 1; i <= num_of_classified_sets; i++ )
1 T: M9 I' M: e- R   {
" I9 O) I$ |7 }      switch( crit_type )7 r, o% ^( |. h/ C; v
      {
& R7 l% L- U& H8 I( O         case UF_FBM_GEOM_crit_value_type_double:0 f) d% x5 o4 K
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
2 O) }3 d! D) [( B' a; a! [9 k, O1 s                                             criteria_list[0], : R: J- r! p, B2 W" Q- D/ ]/ f
                                             classified_sets, i, &value );: {: D7 e8 |, o
            break;
. A& y9 J2 g/ x6 c5 v- Z- ?         default:# y* x& t6 p  j5 ^4 G
            break;3 x0 v  N& Z! Q' A& Q! Y
      }
& @/ Z' D! q7 Z3 k   }) W, c4 f, v3 u2 V0 ?% `  r3 D% ?% c
  M1 r) R$ ], D- H7 i
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );6 T* d! Z) O9 i: L1 T" k. S  n
; l0 I' j4 c, }% o
   return;. N. `$ I: d+ |- e
}$ b$ e; H  B& Z& C5 `

6 X# w+ ?4 j( s0 @2 K; ^int ufusr_ask_unload(void)
' `' `2 @! z: P* X# X2 h% o{
) U9 `* s- d- z; @9 B6 W return (UF_UNLOAD_IMMEDIATELY);
1 K! s, [" C# ^" V, q, h}$ X* n  E) u: P; X  l; [5 `
: c( C  g: h  n2 x
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了