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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

7 m" n2 s: {7 `) j& R; p, y$ S# G: q6 s5 Z+ G$ H
( z5 w/ L4 S6 U; h
/***************** Include Files *******************************************/$ E5 t2 W7 W# c5 L
#include <stdio.h>
9 ?& Q1 {1 c3 i& l#include <string.h># K, `4 ]6 B1 p6 [* R
2 e3 c: q  Y. K1 y2 V# a/ }+ e2 R
#include <uf.h>
/ z+ B* w' ^% X6 x6 @6 M#include <uf_defs.h>% v7 l& ~" {# g# I+ d5 p6 r
#include <uf_cfi.h>$ D! l  L* J  A2 v' T$ @
#include <uf_cam.h>
% c9 e( @9 H( S7 C( h, I1 M2 {#include <uf_ncgroup.h>! t" x; Q1 ~2 k, V% T! K2 m) \
#include <uf_part.h>
/ n$ U. F- F7 [2 R9 j#include <uf_setup.h>" t( M8 B+ v  o* t# _8 \
#include <uf_fbm_geom.h>
' a5 W# ^, v1 P#include <uf_ui_param.h>
9 d  R8 z" T. D; u- M0 B* G; Z' x8 E* A
/****************************************************************************/
% N- _  ?* b% Q' Z" ]- h; B; b( h/ Q$ e& M1 X( U! I
extern DllExport void ufusr
, d$ `! O5 r0 C. J(
% W1 W; d) n9 A3 t1 B- B6 ~& ^" ?   char   *param,
) F/ x: ^! k  p  ^* e) K  ]   int    *reTCode,
; |$ n( T- ~, t   int     param_len( t+ |' ]- u1 t' ?
)
" r! e4 |+ G/ c" n8 t0 z9 q  W{
& }2 c( A8 i% T- o/ ?0 W   int error_code = 0;
# D' u; m7 n/ O- v   int i = 0, count = 0, part_units;+ i& ?9 e1 ]  s( [  \! V5 v4 b2 @
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];, D' z% V7 L  v& v, ]- C
   char *env_trans; * {7 ^  `  c- A
   char opt_name[ MAX_FSPEC_BUFSIZE ];
4 b2 P! Z% s( e- s% w6 m   char part_name[ MAX_FSPEC_BUFSIZE ];
" ~' V) m' U1 J" F/ B# K5 S. M   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";2 D) u# M9 o1 b: V
   char  **feature_names;
# T4 M, [# H1 X+ b   UF_NCFEAT_t *features;& ]0 O! D; j, V
0 v/ R7 p2 ^9 Q0 z% k! |! i
   tag_t setupTag = 0, wp_tag = 0;" d% C) F" y3 v$ p% {8 b; Q. z
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;   k$ N% f9 q1 v' `& v( |- F
   logical answer;
) ~( k) m! s( q9 a
4 l7 q5 T! n- v   char **criteria_list;* N8 J; u/ H/ d  ~$ e! v/ q
   char                         **criteria_to_consider;3 x% m/ u$ t. H4 u8 G
   int                           num_of_classified_sets;
" a* D- }. K/ I& {. x* k2 {   UF_FBM_GEOM_classified_crit_t classified_sets;* o9 |' i5 U& Y0 G0 H  I
   UF_FBM_GEOM_crit_value_type_t crit_type;
. f- K0 ]& X8 Z/ n   double                        value;
; i9 l  N3 e! v. y9 a! @   UF_PART_load_status_t         load_status;
- B" j/ X4 T/ `2 y% m9 j6 s( j7 y. B; W" a
   *retcode = 0;
4 q' C  G. y9 T2 A% C4 H  T# k9 |4 }2 \7 r3 l1 v5 ?7 i! @# L
   error_code = UF_initialize();
- S' A, S3 i1 I* h2 V! k# F$ C3 E   if( error_code != 0 )
5 x1 h' T. V+ u+ q, ~- Q+ m- R4 F   {( D. I/ d6 ]8 s9 @. |- v
      printf( "Failed to initialize uf %d\n", error_code );+ ^4 b7 ]# K) T% H* z
      return;
5 [1 i) D, O; k' p   }
* d2 D+ m* m, D5 }7 Y, A$ c1 u9 o5 N4 P, Z" K# B3 _
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ), 5 W: \/ l$ r# |. q$ c
                                                       &error_code );7 S3 r8 `# P" S" E

; S' g! y6 V3 h' s8 k   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
' Z, {; T1 m5 [& ^2 g                                                 &error_code );
6 ^. q9 |$ w1 G# ~
. Y/ g8 R% I: |, d" _! i1 G& m; l6 G: }4 ?) c& `* y( O6 w, G
   /*** This program works with the part files in the CAM samples directory
# D% T  g* ^9 v' C4 H% D* Q1 w' \        so we need to get the path of the directory and the file name# s* T, p# ?6 ]0 G! N
   *****/( A% C- {9 f6 P- R2 _( F2 a1 g
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
9 h: X" x# F3 F8 T# q3 @! b   strcpy( part_name, env_trans );
7 \0 O: M" ^, Z, F; u' J   strcat( part_name, "cam_holemaking_base_" ); ' _- ^2 I; K& j" F& f; h& Q
0 I3 t: N7 f; H# v2 x8 Z# H
   /*** If no part is open then open the part cam_holemaking_base_in.prt
7 A1 M9 {5 _  u4 k5 z  V        from the CAM samples directory
0 G: A  p5 _. h: Z        If not check to see if the units of the open part so that we can open
# {) g8 x6 L" K7 E- w4 P3 g  V        the same units part   H+ x+ t- v" ~
   ****/
. N% y7 D: t: g% W: s   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
9 q" l2 Y/ S" B) M% W   {
1 }. u' Z5 R- Q$ _       strcat( part_name, "in.prt" ); 1 [) c+ d% A8 L: U  m% U
   }( Z7 q9 R# }  K% B  F* D
   else# n1 f  \  C# Z5 s* H. O1 z
   {
/ Q' @  X  K2 i, L7 f      UF_PART_ask_part_name( part_tag, open_part_name );: D6 A% b6 w9 C* w" b8 f
      UF_PART_ask_units( part_tag, &part_units );
" w1 v% Q5 N5 t! _+ G, W1 o      if( part_units == UF_PART_ENGLISH )* E7 B, N7 A# v
         strcat( part_name, "in.prt" );
% I+ C+ E" T% R+ a' |  Q6 s2 }      else
, X/ B$ L2 H5 l# k: I/ d8 A1 k         strcat( part_name, "mm.prt" );% H- J) e* o; ^1 `) [. n5 H2 H3 _& c
   }
1 Y5 }7 `0 r# w+ z; M( x4 j8 C  x. ?  }& p8 x: C/ x
   /*** - T5 k4 Y" H% H7 @9 |5 R+ [8 B
        If the file we are trying to open is the currently open file1 }, _  ~+ N3 z  u9 }8 J1 A" f& ^2 g* r
        then continue on
2 n2 f1 a0 z2 n7 \) q   ***/
+ A, r& k1 P0 u% y" q, P+ g% T! G   if( strcmp( open_part_name, part_name ) != 0 )
& f: E9 S# f3 _& Q& L. `/ Z0 R   {
0 l5 n/ S& |/ O2 _3 u% j      UF_PART_open( part_name, &part_tag, &load_status );$ x0 b- i- S/ q$ \. e! y$ k; G
   }
# x. Y1 ^* \5 `) B5 {& j! n+ a; G1 f: @* L9 R% `
   error_code = UF_CAM_init_session();% n! K7 ]% V- @* o& n
   if( error_code != 0 )
7 P8 B/ k9 Z1 }   {6 x0 ?/ R+ b# s9 ]
      printf( "Failed to initialize the CAM session %d\n", error_code );
/ ~5 v6 Z1 f) y8 m! H# w9 x      return;
' N, R! s$ ^! @' i; [* G. A4 }   }
* r7 k# d8 \+ X2 _7 C! B+ H9 G/ v5 A4 ]6 ~' l( J/ W  ^
   UF_SETUP_ask_setup( &setupTag );4 n- i7 i; _/ `% c( w/ k
   if( setupTag == 0 ). P1 E; y, Y* H/ c' x0 x
   {- h* [+ p2 W0 ]; [, Q
      return;
5 Q+ t- G1 `: t, z: r5 R6 f   }& `9 E3 K; ], n5 ~' a1 K
* w. O6 t* J9 W4 ~# `
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
9 j. A8 ?+ [  u. t   strcpy( opt_name, env_trans );
% D5 e2 U  X  \. B9 t0 o   strcat( opt_name, "hole_making.opt" );
1 @1 d! T, o+ Y0 B5 u; z2 h! M% O) K$ N1 @$ m+ }
   UF_CAM_reinit_opt( opt_name );! s4 n( K+ x% c0 `0 F

7 E% b$ \: S( ?- A/ \7 b7 w. W   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );( C6 ~9 B4 z) H2 I

" e' A0 t4 f0 Y6 C- o# C& f. A   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );3 M9 Z3 v; f4 w( @# q4 n; o
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );# v6 R" v. x: u( e6 v
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );# E, ^* E5 Q4 X- ]
   if( answer == TRUE )* Q% T1 E( F, W3 ~: g( g
      UF_NCGROUP_accept_member( wp_tag, geomTag );: [/ R1 A6 b- q) C# a
   else( X- ]' b, |1 j: ?
      return;
4 K- R) K- G! F% C; j7 ~
8 m' O. x: I2 U$ N& C   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
$ O* H; u( |+ W% s6 F  k, a; y/ w! C$ {1 F  |
   if( count > 0 )
# @% M/ J$ ]. \% f6 Z- b      UF_free_string_array( count, feature_names );5 f  s* ]* }3 z$ S, g
1 M9 U" Y' h- h4 S
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
% p  W1 v3 K3 a7 G# V2 Q1 [4 s9 C: ]6 M. U2 m. N
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
# l# z/ G* F# f  d: |$ B5 e2 W  }+ X6 O8 H* N( z
   if( count > 0 )2 p- p; J6 A  e% l2 u
      UF_free( features );7 o( k: y: a* H1 F4 t
   else
- s6 [9 [# |' F      return;
/ J3 n; \1 B+ U8 c! C: ~: r# D2 ^( ]7 Z0 {  J) O
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
( g! P* [: ?7 D0 k( _- O' K# N- _) i( F+ F0 |# ]& k! e$ [
   if( count == 0 )
, Y* n, \0 h5 ^  V& w# e      return;
  o8 X( t. R$ [4 l( P: `+ ]$ u% L8 R$ V( d( G, q& h
   strcpy( criteria_to_consider[0], criteria_list[0] );/ h, M. `+ A$ J

, I8 @) e, ~' Z; G; w3 p   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider," ~- s, j; m4 D/ A: V9 K4 o
                                     &num_of_classified_sets,$ y; i7 x. g& r  D+ X
                                     &classified_sets );
, g: R) V3 h( A4 J4 p; l: ?0 |3 N9 ~; P0 z
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );
. p1 j5 q+ @: m# D3 j, S0 R, E9 |- e" S# f! N0 H9 m
   for( i = 1; i <= num_of_classified_sets; i++ )
( U8 O/ u" ^# `( f   {
7 m7 P  X8 L) D  r5 u1 s/ X0 ]      switch( crit_type )
9 W) b+ s" ?) }, T0 q0 z      {& S+ Z9 A& s7 d" D# \
         case UF_FBM_GEOM_crit_value_type_double:  m7 C0 n; ]/ H
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
* g6 j5 [& C& P! C  F$ [                                             criteria_list[0], ( _) u: y( H- F5 T4 w
                                             classified_sets, i, &value );8 j8 }4 Z2 O- c; I$ C
            break;
, T3 ^1 `) L% ]+ D4 U5 Q- _         default:
8 b5 M$ W- H' b% B7 j* y            break;0 g) `7 R* h. e% x; q
      }  n8 t' l: @9 }  a* G) E' f& w
   }% J" O& M: A! g' P
, G( }. C6 ~  e
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
7 w, I4 r& B; A4 _
- @: d  A* Y/ h; M" ]3 O   return;% G. q, O/ U" `9 h
}
  N' J% J5 c3 J$ ?
7 Q  c0 v* d. ~; Y7 }6 c/ P5 fint ufusr_ask_unload(void)* E3 `) Q# O2 [+ }/ P$ v! F- }
{
3 D6 j# I7 j8 u9 b( k; j+ F return (UF_UNLOAD_IMMEDIATELY);/ U+ A' Z5 d8 U2 F) I6 g
}
  I1 M% N) a$ S5 M- k+ e
) |9 w) T8 ~/ q7 c; Y4 d4 r, 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二次开发专题模块培训报名开始啦

    我知道了