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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

' b# H$ ?5 ]8 Z* c
5 ^, A$ ]/ {/ G8 ?5 W
# [0 |( ~0 d! c' y  c/ \0 ^/***************** Include Files *******************************************/# h( @& q% I/ `) s/ q2 o" s: e
#include <stdio.h>
! z) k% A7 t* e9 y7 S- R#include <string.h>' A  Q/ E5 k) v# R/ k  D- A+ Y
" j/ v$ _6 `0 I4 q2 A
#include <uf.h>& a2 b9 V9 R8 R& [5 f
#include <uf_defs.h>9 f3 p  ?" c8 J+ c8 q- j1 J
#include <uf_cfi.h>
$ H2 X4 `9 e) I#include <uf_cam.h>: D. P/ w# y! g# G( S
#include <uf_ncgroup.h>
& R* u- Y7 `: I6 [* W#include <uf_part.h>
# r- g* z4 z: f  {#include <uf_setup.h>0 C: e: @2 K* P* b
#include <uf_fbm_geom.h>$ ^# K6 U: |2 D, @5 J& }% d* u
#include <uf_ui_param.h>
  I1 `8 X' g1 I
# n; t6 n! f+ \* m2 K; \) D/****************************************************************************/1 w+ V8 D& d8 V8 Y0 f! ?

, y( Q/ s+ ~8 Z% M  K: Zextern DllExport void ufusr
& m$ M8 _' a2 n$ i, d4 E(
9 [5 H% d+ A: h6 d+ [+ y6 j   char   *param,
3 K8 G% K' a! R4 L2 t7 C" K   int    *reTCode,
: h3 H5 @4 E0 t, M2 y1 k   int     param_len
- j5 a' f. x! |$ o& ?)
- W7 U2 M& I9 Q{
. C3 ~% S( o. s# a6 y   int error_code = 0;
5 E9 S$ W  ~0 g( |8 x5 j1 n; C   int i = 0, count = 0, part_units;
# R# s/ |% u8 O   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];# |6 \* ^* x6 E* v* l" V$ t
   char *env_trans; / ?7 W$ r4 L( t% h9 x; W5 M
   char opt_name[ MAX_FSPEC_BUFSIZE ];6 B/ D1 f5 F2 v5 M
   char part_name[ MAX_FSPEC_BUFSIZE ];  k/ F+ a8 h- `1 c
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
  l9 f  t0 O$ r  P   char  **feature_names;5 x, r# h9 {+ k1 ?* H0 a$ {6 ^
   UF_NCFEAT_t *features;
* W. i. P* D" `* G' i+ {8 c9 k4 T
4 q1 i/ \1 ~7 o6 i4 }  X' H7 n   tag_t setupTag = 0, wp_tag = 0;6 q; {; _0 }+ h$ @# `8 Q
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; + c8 a  m6 X. G" t4 z" _" r
   logical answer;9 p: ]6 B* z  i" x4 F( R0 Z

  b% A- f  O& T   char **criteria_list;' l; ~- n8 }4 ^8 l! W5 g
   char                         **criteria_to_consider;
% v5 [7 Q% }8 w  Q, q5 p9 W   int                           num_of_classified_sets;% T* l2 b2 c+ N- W
   UF_FBM_GEOM_classified_crit_t classified_sets;
4 X/ i7 j  R# I) }- e$ A+ X   UF_FBM_GEOM_crit_value_type_t crit_type;
8 P2 `4 |9 h8 p" E' N" h   double                        value;$ m8 k* }9 z2 ?# J
   UF_PART_load_status_t         load_status;' z/ S! J& X; d8 K" ]( t( h1 p
# x! A$ ^; {. Y2 l- x8 `
   *retcode = 0;5 Y0 s+ D' ?1 W+ b  o

1 F7 G7 F4 }# T   error_code = UF_initialize();
( \& v4 w  B6 e! q   if( error_code != 0 )
% N2 @- ~3 J6 U   {/ A; T% v& N; F
      printf( "Failed to initialize uf %d\n", error_code );. V5 g' x6 `1 F7 Q4 |
      return;. ^' w: x& w' y: y/ b8 P
   }0 G# I5 d7 M0 E% X- U

; F- @" l1 I5 q% p# ^# G   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
4 V) \1 M$ h0 p& U) C# M+ ]                                                       &error_code );
- I7 j+ |' t- c' Q! o7 m- C/ Z' r0 H4 U1 M) C% _3 N! V
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
0 u! u/ {- Q- \: D( ?$ c- |$ z                                                 &error_code );
- v" w5 Z. v  e3 d4 B6 R5 u9 B: t6 N8 G9 [1 m: v$ I' g" y* W' z: @
, T) C5 ^* r3 d, E& k' U7 F
   /*** This program works with the part files in the CAM samples directory
1 G/ `. O& j4 F3 q        so we need to get the path of the directory and the file name5 F3 G. G/ {' p8 b" S; r$ A. F4 e
   *****/
* ^  Y$ o6 I: N4 `. ]   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );. D1 u) j3 J5 G/ F- x/ t' W  C
   strcpy( part_name, env_trans );: p; X9 w' e- a4 h
   strcat( part_name, "cam_holemaking_base_" ); 7 o1 `8 `1 S8 t" S; m% K9 D

9 H& C6 R9 O2 Q- C/ m   /*** If no part is open then open the part cam_holemaking_base_in.prt9 L1 q* I" I! X( M7 g. H2 X
        from the CAM samples directory ' M- P, H: C$ }# r$ C- z6 r" ^7 I
        If not check to see if the units of the open part so that we can open3 @5 g) s; a8 w/ N% E
        the same units part
# `) B/ z' J0 g7 I  u3 w   ****/
" I- r% j- i- _   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
' k3 G+ }+ o* o3 ]3 ]   {
. r' |9 t/ Z/ W. L3 a- i& k! }       strcat( part_name, "in.prt" );
) {5 R  V4 o* T: \+ l   }
8 P" ?0 `: G: U) k1 a  G4 H   else) T! o: G; t& g- P- {# N- ~
   {
- {0 G" \) v% E      UF_PART_ask_part_name( part_tag, open_part_name );+ ]1 h! h4 O; r+ H" D4 b8 N
      UF_PART_ask_units( part_tag, &part_units );
! t( l3 M3 J5 T, d      if( part_units == UF_PART_ENGLISH )* f4 L3 S  Q8 T1 V/ k) |! t6 o! n
         strcat( part_name, "in.prt" ); ' b! j* H1 S0 E$ Z/ P
      else' b/ M6 a; w6 i8 M1 G& F
         strcat( part_name, "mm.prt" );
2 A' e: r0 x) V) \/ t: ]( Y   }8 S3 ^9 @! k: B. T  J& i7 E

  R# }' j: F# H   /*** 4 ?2 a4 [, V( W& l* W( N
        If the file we are trying to open is the currently open file
+ T! `6 ]  Y/ X, A  U  W- o' p; [        then continue on4 m1 \/ Z6 U8 e
   ***/
9 J: V: k0 ~* |* v% f2 m, m   if( strcmp( open_part_name, part_name ) != 0 )
* `$ a* \1 Q/ a! o   {7 H- W3 @+ a! g5 ^. f8 j. ^
      UF_PART_open( part_name, &part_tag, &load_status );) n, a) \/ ?, P& m" O2 v
   }
% K/ C- w  _" a' j4 k' S* ?8 {! ~: t4 ^3 h6 }* a4 H
   error_code = UF_CAM_init_session();
. r' P3 r& v8 H" |) b! }, v   if( error_code != 0 )1 @; `7 A8 ~) Y) G. N
   {
& R4 S0 {3 l0 X1 M3 `( m5 F0 q$ r      printf( "Failed to initialize the CAM session %d\n", error_code );
/ R* r; Q$ l, Y% N3 V. j8 N: R      return;
6 ?* ]1 F! z9 Q6 D9 t5 B3 z# z3 I   }
- [8 V. ?% s7 p$ `
5 `' V; H  n5 ^  ?$ o& ~5 R- }   UF_SETUP_ask_setup( &setupTag );" K& i0 j9 Q+ n$ s
   if( setupTag == 0 )% S2 l1 J6 |& p' b9 g
   {1 ?# i' b+ _; s0 |6 \( l  y2 t- ?6 R
      return;
# |9 s+ ?2 S( ~2 T1 d. v# M   }, ^, c; o3 e0 m

/ H- s) u0 h! t: b2 Q7 T/ G   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
; P2 _+ o4 p2 J+ O& r/ n   strcpy( opt_name, env_trans );
) A& P( J/ }: N   strcat( opt_name, "hole_making.opt" );
, E# C; m7 J9 S- Q, @8 `; n4 d+ y) T" h
   UF_CAM_reinit_opt( opt_name );
6 B1 M8 L; o8 G8 j" X% e& i) K
7 K1 e7 h. ?5 l% J   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );5 n' N: B# B( I+ Q! e( }$ M3 L
3 x- B9 r( \1 p, Q6 N0 \
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
& T$ X. H" F# T( d' M$ H1 K   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
" ]" L5 b3 E5 R; ?1 E& J+ r   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );0 t4 J7 V, ^: B1 X4 ?
   if( answer == TRUE )' `) e; j8 C2 d3 \# Y7 O7 I. Z
      UF_NCGROUP_accept_member( wp_tag, geomTag );
! f+ s1 R- l5 K4 S# S. h% A   else, V7 S& o0 \/ K
      return;
+ H6 |; G8 X$ f6 ]4 `( e0 |" a: g1 O; n, O2 c1 Y7 K0 k, d4 Y
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names ); ) E  I' v. E5 \& K1 r$ e
7 t  q% Y' C0 t% y
   if( count > 0 )
; s4 L6 g6 L. r" e8 D" Q. ~      UF_free_string_array( count, feature_names );
7 e# v  C+ A2 w& f; |" X
! n/ t2 m7 M: P+ E   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
. a- M3 t# B+ k- P
% P2 K- K! R2 u" @. @/ U5 `, z  {: o   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
, E; j+ o- x  {9 o/ R1 @' ~5 e6 h1 F5 L( H
   if( count > 0 )( l% l3 t( h( I" y
      UF_free( features );8 Y4 e# c' Y% L6 T* r
   else+ Z( B9 X+ R1 J5 c' B
      return;
5 {  f- H. p9 D( T5 l+ v
& \8 E* r! ?' _" x5 O# |# S- V   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );! G) R1 J/ m* y
" S  C4 d3 ~$ z. H1 ^
   if( count == 0 ); z# H3 U4 G! b
      return;
2 k. p0 ^: Q/ z) q8 a+ f: n
1 L8 I+ V) R( w% I   strcpy( criteria_to_consider[0], criteria_list[0] );
% G9 A+ I/ x8 T" ^# ?
4 u3 O' V* p+ b- Y& l   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,0 F4 d- D. p0 h4 X
                                     &num_of_classified_sets,
  S9 J( J. p, w# }7 D/ D5 d7 B$ ]                                     &classified_sets );( [* @, H* o: T8 d5 V+ o
7 u6 O: F! p! u
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );, [6 [9 S4 F/ y2 |) R# H

" N9 Y# l1 z& I' {  T  e* Y) v   for( i = 1; i <= num_of_classified_sets; i++ )
- d/ p- s8 g6 @% R' ?$ U   {
1 }4 t" o3 \' }6 |      switch( crit_type )
6 J) P+ |6 y7 t) A3 H      {
" i; [  K. z: e9 U& ^         case UF_FBM_GEOM_crit_value_type_double:
1 {5 Q- D# ~1 ^& G9 L! B            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, 5 L+ M% E  U* `/ X1 u
                                             criteria_list[0],
& `5 o$ A8 k6 \                                             classified_sets, i, &value );
/ w4 @9 f3 |9 Q- P9 @            break;# i: a8 v$ Y, S
         default:, @8 L& R  c: W
            break;
0 T: Z1 x9 R$ K) |8 c      }6 v; t: ]5 K0 |% j/ g, T  t, L
   }1 t9 ^& z" N' d! B3 p  @" L2 O
4 E1 L" }8 @' p; U& O4 T  K- `
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );& E; ~  A6 n/ w  `
# O* q/ z1 D& b+ W% U
   return;
* u; [" r( A) a9 b; L: A- H1 O5 N}
- G$ b1 |: v+ F* U% Z$ w5 `
- e5 j7 R+ ?6 K% Z/ Pint ufusr_ask_unload(void)
1 r7 W/ q7 ?( Y0 {{$ E! J+ s3 v6 t4 l; ^: X2 g
return (UF_UNLOAD_IMMEDIATELY);
0 U( A6 {, h7 R# P}2 T) o) U+ k' u, S

9 x. I' v, i' k1 e* M: z9 a% s
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了