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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2015-3-17 20:41:02 | 显示全部楼层 |阅读模式

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

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

x

" h6 F+ r5 ?  x
8 u( O2 T7 I) v' V
/ N7 Z7 A  r7 m- z/***************** Include Files *******************************************/. x7 i  I3 k' }( m. c$ p! @
#include <stdio.h># [8 q0 j4 a2 G2 u# ~; N
#include <string.h>* u) g3 N" o9 x) [1 v7 e

( A' Z7 e5 x9 Q9 V( K- O+ [1 x#include <uf.h>  G+ M+ Q7 V  b4 C6 v' [$ J& M) ~# Q. O$ \
#include <uf_defs.h>4 B, x! I8 ?* ]3 N4 |( ~
#include <uf_cfi.h>9 F8 U+ e( k4 |0 C7 l5 t! N
#include <uf_cam.h>
) v0 M5 S+ K& ]" O5 X#include <uf_ncgroup.h>6 y) G; e+ J& _3 w. }
#include <uf_part.h>2 }" ?/ z1 c" K3 ^
#include <uf_setup.h>
1 n  o, s4 x( u- I$ `% v- ^$ R#include <uf_fbm_geom.h>$ t- K4 N/ e  k) ?5 U/ @
#include <uf_ui_param.h>
9 A! r; F- x# q7 l* U1 }
2 L$ c0 K$ E" L. D8 i2 `0 V, v3 C. g  o/****************************************************************************/" \/ H# k( O- j$ H5 Y/ ~$ @: b

, K  h: O2 `$ d  X/ Vextern DllExport void ufusr 5 }3 z, N& p# u# C3 d' G4 h
(
# }7 I, K: H8 ^$ e   char   *param,$ R* _: N9 D! q: l, [& E, A8 H% {
   int    *reTCode,
5 v9 Y5 P9 C8 ^: P8 u  X   int     param_len
$ f' m' R1 q, l  e)8 o6 I- ]4 E  e2 L' `! g/ {
{0 Q& I+ R3 A# T6 ^  a. P7 a
   int error_code = 0;, g; [/ x' [, k* E1 t: p. h
   int i = 0, count = 0, part_units;
  `3 H" F, U1 |# Z   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];; O" a( x+ i, @3 J2 V% |
   char *env_trans;
) @( M! D: a/ h- V6 P   char opt_name[ MAX_FSPEC_BUFSIZE ];
) D5 C- M7 |1 h% c( p+ o   char part_name[ MAX_FSPEC_BUFSIZE ];
& G- h# W+ f0 v8 F0 @" _& B5 ?5 j   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
# T: Z0 t& ?7 m/ v  b2 Y; [" X   char  **feature_names;
, `7 j6 V" [1 _8 |8 O7 G" j   UF_NCFEAT_t *features;
7 G3 n( l& R8 y" z1 o
2 x  l4 g4 u8 [6 [) [: Y  y   tag_t setupTag = 0, wp_tag = 0;( Y1 t9 N& k5 @( U
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
( A" H. k  e8 H: B   logical answer;; m2 O! {' G. l& b
9 M8 |3 j3 y6 m0 V9 v  @
   char **criteria_list;9 o* m* Y7 a" K( a  J+ I+ `
   char                         **criteria_to_consider;" W; K0 J: N- B0 b$ y
   int                           num_of_classified_sets;, n  H0 {* e4 l3 b  b) b% x8 A
   UF_FBM_GEOM_classified_crit_t classified_sets;+ W0 V$ M+ i/ c, R8 G; T: a
   UF_FBM_GEOM_crit_value_type_t crit_type;
6 x- b5 K# ^! c* H& `   double                        value;
3 J) \/ Y% \" @7 \" P6 x# K   UF_PART_load_status_t         load_status;
3 {' e' t) I- [8 }( j6 x- L) ~4 G
' O3 N! a5 ?9 y& y) Y9 v) I   *retcode = 0;2 L- Z, S$ `, V( z5 L! C$ f; D0 ?

' g) F9 u) v$ l+ ]   error_code = UF_initialize();
2 j9 J! w# x1 e. F   if( error_code != 0 ): |1 C( c1 X0 X
   {7 C( j% W% U& @, G) }* r' ]
      printf( "Failed to initialize uf %d\n", error_code );
7 Q' R  Q5 w8 c1 X  M      return;6 N6 o8 L" v# L
   }# v/ y2 }0 P  t; u

9 i3 n; D1 C6 l3 H   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
$ H( ~5 }! o) k. O; G2 F# V/ z( a                                                       &error_code );
7 f, A" W7 o2 {% S  G
. s: `6 y# ^! @8 \4 I   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
7 ]3 k7 j6 H. Y5 Q                                                 &error_code );6 Q- N8 E! n9 G. s8 K" L( L
( c2 o- [8 m& o9 p9 L

- v4 E+ n1 Q$ C   /*** This program works with the part files in the CAM samples directory
! V1 n* C8 B3 C& _( h6 ]4 T        so we need to get the path of the directory and the file name+ z2 o8 w  t$ Q1 ?) l. l+ @- L+ J
   *****/5 O; o6 a+ ^: }9 m) Z
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
6 p, q' L4 }5 O& ^9 z) ?   strcpy( part_name, env_trans );# g1 d0 s  a/ T+ {5 J- w
   strcat( part_name, "cam_holemaking_base_" );
- ^/ k8 _' \! x9 z, t
7 M# S' W8 e9 N  ^, @   /*** If no part is open then open the part cam_holemaking_base_in.prt' k  C2 \! l+ g& I: ?8 _
        from the CAM samples directory $ e' F9 x( L: k  i2 t9 u
        If not check to see if the units of the open part so that we can open
3 Q1 W6 n2 m0 f) f$ t+ z& y        the same units part
- Q; B, C) Y% X; ~; `' h0 p   ****/
8 m+ x# ?# v, _3 x% \   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )% B! l3 a  `7 I' S* T! ^
   {) O* w/ ?- ^) O% Q8 m  X
       strcat( part_name, "in.prt" ); 1 W. Z6 T; P2 o. r: f& S  V( e! T: Y
   }
( g; {# M9 q$ ?   else
8 r$ q: A7 m5 D- h   {
: |' R; u; {( L! t2 [3 M      UF_PART_ask_part_name( part_tag, open_part_name );
* F+ \$ A- V( s* T  }' d. `4 O      UF_PART_ask_units( part_tag, &part_units );5 d6 o7 ?" L( f& R: x, F
      if( part_units == UF_PART_ENGLISH )) P- _) y/ {# L8 M0 w5 z( ?: p
         strcat( part_name, "in.prt" ); . W" ]7 B- S" w0 X. N$ }( k5 e/ k3 Q; r
      else" {8 F  M- p9 z
         strcat( part_name, "mm.prt" );% m! E) |: e- b/ q: \; m
   }
% w) p1 h8 F% _; h! r
6 M1 r: a. P' ?) V   /*** 6 s" i& w3 @  r0 }) p! l
        If the file we are trying to open is the currently open file
# |& X; P7 ^3 n4 }! h! v8 H        then continue on8 [9 B" k9 j) r) Z, H/ _( V
   ***/
+ `1 D$ V3 `& [/ a. p   if( strcmp( open_part_name, part_name ) != 0 ). o8 ~0 a4 Z% ?; Y% v3 ^
   {4 I5 p* U$ ?* |; D/ R
      UF_PART_open( part_name, &part_tag, &load_status );* x! M& i6 [$ @( h8 J
   }
  m6 H% L7 t" [3 I( r, Z
9 O3 f8 @- I' W/ e" i9 t4 ]   error_code = UF_CAM_init_session();. ~- F6 L- C7 E$ B, s! g# q
   if( error_code != 0 )
1 D# f' U. C2 Y2 W. x; r   {
( s5 Y' S9 ]- T# c      printf( "Failed to initialize the CAM session %d\n", error_code );
. R; b/ [: ^2 n* {$ E" Z' j      return;
4 c6 o1 o, r* V   }+ Q3 A* k1 @! E  k5 p. x2 U' z
  k: H6 I6 {1 x, }! ]1 E& o$ v
   UF_SETUP_ask_setup( &setupTag );
, Z  ]6 \. l$ \$ V5 f* P! ~# h   if( setupTag == 0 ): _2 g0 X/ D9 z7 V6 P  v" N
   {
  n8 H; S/ t0 X. a1 N* S% H      return;
- |0 V) q0 b8 T0 `   }
5 p. ~5 e7 z- @$ c4 G2 E# H  V$ \7 @1 n( R
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
5 b7 N0 m! h$ C" y1 Q9 N  K2 G   strcpy( opt_name, env_trans );
; g% ^8 c8 ~) ^8 b* `' d   strcat( opt_name, "hole_making.opt" );
! _: F4 a" b# g
2 C) [: K  A) U  \+ z! I5 \  t   UF_CAM_reinit_opt( opt_name );8 w1 c4 ~; }# q* `; d
+ K. k1 K7 M, F9 u7 p' i, l
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );0 ~( |1 i3 t/ U

6 {( r8 c3 R- r: B) V   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );0 E! t2 C9 m, o+ ]
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );& |- t/ s* X( O3 X0 s- i4 z: F! U
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );  H1 J6 T7 m! l5 R) n! ^* o
   if( answer == TRUE )
7 p2 N4 A6 ]6 R  d' Q( ]$ \% X, x      UF_NCGROUP_accept_member( wp_tag, geomTag );
  F5 Q7 f7 ~4 X( j( t   else
3 s/ N0 }; Y, I      return;- g4 |& t8 W5 s* A1 u

# d# P" _4 b$ P   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
2 ]0 s1 {0 \, B' ~& B; A
% [# z+ |+ D( [) U- f   if( count > 0 )& |* [0 |& s( K  @" K
      UF_free_string_array( count, feature_names );
" Z  B4 k) V+ d: `; u! W' \+ N6 S
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
# b5 `( l. A! Z' I. w! U0 U
  R' V/ r" w7 N6 d3 M   UF_FBM_GEOM_ask_features( geomTag, &count, &features );( t) Q/ h$ A+ q& M7 j0 i; z
& e7 L( g" p( l
   if( count > 0 )+ k3 f- n7 ?- F/ y7 t5 c
      UF_free( features );- o( d" y& w) Q2 k6 t8 m
   else
; I- I  i! @, a1 x1 W5 D9 E      return;
, v" E) @: d$ e( ^- a
8 y( u) H# u' \3 F7 r8 B7 J& \   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );) `3 F3 Z) }: {. Z0 |2 [5 n( X
% p$ \6 S1 O+ I* a
   if( count == 0 )
9 y% J9 a: m8 [. }7 T      return;
& ^" c# M9 r- [: s: t& j
2 ^% ~1 o4 S: ?   strcpy( criteria_to_consider[0], criteria_list[0] );
5 P0 _- d# V$ V% j) L5 T+ R# `& B! S8 |
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,
1 V0 `" t; q6 g0 ^                                     &num_of_classified_sets,
! M0 u# A1 [( B+ i& [3 M7 M                                     &classified_sets );. S& T! M' }9 ^1 Y4 j1 ^
3 \: t) p5 v( `- T9 y
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );
/ e+ w0 L6 R* b6 |6 `" ~* Z) v+ e1 C* u
   for( i = 1; i <= num_of_classified_sets; i++ )
1 X! R+ c( ]& K# ]; X% ?9 t   {6 s. [0 M6 A, F/ @
      switch( crit_type )" x4 \' J/ u3 w7 _, V# z
      {
3 U* E# _) D7 ^  x# _4 x; Y         case UF_FBM_GEOM_crit_value_type_double:
( s" B. P# h8 ]4 x1 O            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
5 @9 N  S( `' F3 B                                             criteria_list[0],
( P# F& H7 j: B- j4 C3 N: [, |                                             classified_sets, i, &value );
/ S* Y% ~6 w  ]8 h6 N: ]            break;
& i* `) r' ?" X) W2 \' l         default:
8 a5 o3 |" V9 v  G! r# f            break;' S+ E* @( X0 j
      }
  y8 K: X( V) R   }
9 X! ]  U2 h% o: M1 @) ]
! W- B+ A8 p& C7 w9 a6 ?: p   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
; K5 j7 a) R6 g! K  Z7 O- ?3 H( C) ^: x7 v2 [: q
   return;/ v4 h) c; u3 `8 _. E3 m" ?. i
}
  d3 a  h" f% K, B2 z
9 `! e- G0 ?* yint ufusr_ask_unload(void)
# P5 c4 l' F) \8 p{' \4 d) k% g2 B& K+ h
return (UF_UNLOAD_IMMEDIATELY);
/ g4 w) E, i" A  Z}( v- q, N. f3 K0 Z/ P4 p

, y/ \+ H& u8 N
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

0

主题

19

回帖

117

积分

注册会员

积分
117
发表于 2017-12-9 13:27:49 | 显示全部楼层
不错不错,正需要的东西
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了