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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

9 q" k, w4 E4 j2 B0 b0 J$ x: c- h- D& C. a2 G

- d& ~) @( {% ^; d" s/***************** Include Files *******************************************/2 O1 F7 b' d7 N0 }2 f5 {& v6 t$ L
#include <stdio.h>
, v& r! c( T  O0 Y/ V#include <string.h>
7 x, w9 f8 {6 v
4 S8 g5 d0 l. s% P2 k, r#include <uf.h>
4 t4 M! x5 e; r% f6 o6 v* }* @#include <uf_defs.h>* e) V* @# h7 w
#include <uf_cfi.h>5 t% `  |  R* H: Y2 ?, n
#include <uf_cam.h>
0 y& o. K: F/ W$ ?#include <uf_ncgroup.h>3 L1 Z; R5 X5 Z2 c
#include <uf_part.h>* N- i8 Z' w7 R0 P. ^: P. \
#include <uf_setup.h>, n) d; g* P; L
#include <uf_fbm_geom.h>
+ O6 M% N# S4 u5 l#include <uf_ui_param.h>
$ m  a! S8 u; J0 G, Q8 F( \$ u( T; V( g5 D0 g7 {/ \" \* ]9 E0 a
/****************************************************************************/
$ W6 D! a; l# u- W# t; V: U( _' |; m, T  l; o& Z# F$ |
extern DllExport void ufusr . `7 h/ A+ w- D* G) V9 Z' H& X
($ F- M8 }7 Y- O. F, S9 o
   char   *param,
7 y  m7 U2 @9 W# M1 Q! \& h& n   int    *reTCode,
8 B: D; H* Q8 F  W$ T2 b- |1 F4 e   int     param_len
# n% r0 M+ K- j); Y3 K1 }& w) |& `3 W7 _! U& F
{
$ P6 N' z2 H& J% N7 O, _5 b3 K, u   int error_code = 0;
' C9 f: o! z+ W9 X( p9 r9 {% T   int i = 0, count = 0, part_units;% {: X8 `( ~: V2 T& w- N
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
: [# v) ^6 W/ V  t+ V* D   char *env_trans;
; g  y. y6 w7 O0 O3 k3 q   char opt_name[ MAX_FSPEC_BUFSIZE ];
; F7 b' i/ ]% o" V# R/ W   char part_name[ MAX_FSPEC_BUFSIZE ];
* u& s: K# k' g' }# J6 v   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
) `& p: w* |0 {3 X5 v   char  **feature_names;, f" C0 V) }1 y' Q( o) I2 y
   UF_NCFEAT_t *features;
5 ~2 A; V9 A0 d2 [$ i3 K. p. h4 o
   tag_t setupTag = 0, wp_tag = 0;2 K5 X. Q* V% a$ p  T
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; ; G. g% g$ q0 G
   logical answer;3 J* }+ B: I* p( x
( V2 b$ _# O$ @6 c) ?# \5 J' U4 s
   char **criteria_list;1 A, m. e- y" B, k  [4 Y7 `/ N! `
   char                         **criteria_to_consider;8 g: I9 z: h9 u, B
   int                           num_of_classified_sets;
0 L! R1 @0 u/ T3 y   UF_FBM_GEOM_classified_crit_t classified_sets;. \4 e) V+ b' d" h5 @- K
   UF_FBM_GEOM_crit_value_type_t crit_type;0 {" \6 U+ ~% l6 C
   double                        value;6 S* C$ B* m' I7 u3 c  o: s  G
   UF_PART_load_status_t         load_status;  f1 `) l  }# c) B* T- l4 v9 d0 a
$ }' Z$ w5 V8 \: F4 L
   *retcode = 0;
  Z4 s! T2 d  G! r; ~  d# U& _+ O4 y0 n- E( `# S
   error_code = UF_initialize();  B1 I% l: g$ i. e; o4 ?
   if( error_code != 0 )$ d3 e: X* T' A
   {6 }7 q' t7 H; S; \2 t- k- J
      printf( "Failed to initialize uf %d\n", error_code );
! G0 |- Z' O3 x8 I, Z5 I( J6 v      return;! K  ~( t8 E. n+ L) E) D
   }
+ j6 x- J, h, u* b5 Z6 B1 @" a/ d. }7 n- D+ t) m3 K& n
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ), 0 z* N% E( B# w% ~6 I+ K- `4 Z
                                                       &error_code );' V! ]) K, h# R. ]$ X& H2 {" y
& r3 S2 z# Z1 {7 q+ O3 M9 q+ T
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, 4 z# `( M+ o5 C
                                                 &error_code );& U7 [1 Y& y9 l1 f, D$ t0 T' k

! V; k% s% ]7 `3 O) y
2 _% q; W$ ^$ U& v# W+ Z   /*** This program works with the part files in the CAM samples directory
: X/ W. f5 ~3 j# s) k        so we need to get the path of the directory and the file name/ G3 W3 S5 H- P. [. ~' J
   *****/# v& s" S! A& J) m* ^
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
$ k( T. l# _. C& S   strcpy( part_name, env_trans );
$ K( i$ W! K7 E2 o  o& l! J   strcat( part_name, "cam_holemaking_base_" ); 4 `: ]. _& p# @% p! j
0 @& {8 E) X6 {7 V
   /*** If no part is open then open the part cam_holemaking_base_in.prt
: r4 R8 v; O! u4 `4 g+ [        from the CAM samples directory
' N8 k! c" Z' F        If not check to see if the units of the open part so that we can open! B- d6 k& n" f) M/ |; u# u
        the same units part
  z$ @0 N8 d+ x6 O7 T   ****/
4 m6 r+ C' \$ l( n6 j   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
9 {3 c: P& u3 u% r/ q   {
2 `* `; _( b+ s6 I       strcat( part_name, "in.prt" );
) j: l# X( J2 U' d' g   }
1 _( l" y- S# c; P   else
3 y7 P7 w! n- U2 A3 g) k   {
8 c8 J8 r3 y( Z0 j; a" v9 |$ [      UF_PART_ask_part_name( part_tag, open_part_name );
- c, F. |/ b8 A6 G      UF_PART_ask_units( part_tag, &part_units );- I0 B3 t& P3 J  m
      if( part_units == UF_PART_ENGLISH )
9 c6 ?, l# |- m; V4 ?         strcat( part_name, "in.prt" ); 0 W# S; M# G! Y8 J# T7 {: W
      else
$ \: x1 C! P& ?: t! u- p         strcat( part_name, "mm.prt" );
' k+ c: R8 |8 j. F, B0 _   }
! W' H5 H+ f9 n* ^
3 O$ V  O  y) X' n" h8 p! d   /***
; B6 M: ^* a! Z2 c1 w7 m# ]  J, T        If the file we are trying to open is the currently open file$ u# y0 N% g  Q( E, d
        then continue on6 W, h$ [2 v7 Z8 r
   ***/
  P" h7 M; n% p$ J   if( strcmp( open_part_name, part_name ) != 0 )
# p$ m- D# ?- g+ M% c( n   {: @% v9 [) u6 t5 q
      UF_PART_open( part_name, &part_tag, &load_status );0 z6 T) S( i4 P. B
   }) T1 |4 ?- p+ G& ?% x: H- u! f
  y  o8 p$ g$ M$ I; J5 s/ Z( U
   error_code = UF_CAM_init_session();/ B: |! T. ^$ i" R
   if( error_code != 0 )
: k* V0 w: s* T) S   {9 F& I4 c( \1 C
      printf( "Failed to initialize the CAM session %d\n", error_code );5 S& |5 `# c' v, U; S
      return;- O4 Q* H) o3 a4 V# L
   }
6 M- t3 H, p! [+ N, u( Y! O* \2 e: E" T" T
   UF_SETUP_ask_setup( &setupTag );  r) s2 K0 ?8 y' g
   if( setupTag == 0 )
$ c/ s0 C6 `& F7 z; b6 G   {
2 x5 Q: {6 r; Z( ?, h      return;
( k  G: R! S6 I, k   }- `8 T( \7 [" o3 T* Q& L% d
2 b# M" S$ c# O7 E: K
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
' D/ j5 @$ V* N) Z4 d   strcpy( opt_name, env_trans );3 C; D# M. ?, e% P3 q. |
   strcat( opt_name, "hole_making.opt" );% w9 A# ?) V% L0 n5 k; o1 F

/ \7 ~9 r% \! N1 h' p   UF_CAM_reinit_opt( opt_name );: J6 X7 ^- s1 b0 ^

& w0 W: O* j! l+ L7 l# H* ?8 |* ^  V   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
1 n! x) F7 \9 D# X. m, L
. x* [. S7 j# T$ I+ T   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );: @9 D# j. h1 I; u
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );+ o0 M/ W2 m0 U6 W! ~6 F* V
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );7 W; a8 L( [3 V& b* C5 q
   if( answer == TRUE )! d( r& A7 c  E+ V+ ^
      UF_NCGROUP_accept_member( wp_tag, geomTag );
' _) N0 F8 E! C% q3 {2 r   else8 H) A5 T& A& ^3 G, a
      return;
: s' b$ a' M2 c0 V# p* g6 g4 s; z, w6 c! g* O/ s( L/ r, e8 i
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
2 c( b: z- N9 l* d
4 k9 F  p. B+ }   if( count > 0 )
  a7 {8 y3 f2 F4 \' I( y      UF_free_string_array( count, feature_names );( N% \& ^2 j" k  N9 t0 d

; ?% U' t: y  y! F   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );9 D+ a, H& N6 |( x4 D# W, G
; l+ f0 i' P# n# e) r3 I& e: U: _+ |
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );3 T& d5 [4 [5 X" G
/ T  K, o* f/ w* m6 r% l% E9 W
   if( count > 0 )% U. l8 c/ \' g% h, U
      UF_free( features );
/ {5 }% C! O# w8 d; o   else
% l4 v( h7 n' W      return;/ O. a9 d8 d8 w4 Q. l

5 y' o* S) A; [   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );. }! f( K9 g. b
8 G3 w% G# |; z: m6 H- u) _6 ?
   if( count == 0 )
* e3 g! o4 }) F      return;
  H  Q) ~* W( K, l, Q# x7 F( s- @/ R7 q) y+ X; P! H+ b6 }: p
   strcpy( criteria_to_consider[0], criteria_list[0] );! k9 M9 A, ?3 m
( W4 e5 @$ B6 G) k2 Z; P
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,- N* K, W& q& x; a7 Y5 D. c
                                     &num_of_classified_sets,3 u( l4 ~, m  \) m( X8 p( Z
                                     &classified_sets );, ~5 U9 T9 A; O6 U3 k+ E3 K- `+ q

  j$ \. i" w* {   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );5 l( b* V5 S" c" [- ~" }% B2 D, f% g
& K; d5 k7 p2 ~% G4 E/ Z
   for( i = 1; i <= num_of_classified_sets; i++ ): k. j$ |7 C+ e; D6 ~
   {
0 S7 N! k7 G3 j" K) Y- u5 q2 [0 v      switch( crit_type )! c6 g( \" @) h
      {
' p: e; ^8 h/ R$ u. M1 T         case UF_FBM_GEOM_crit_value_type_double:
3 c6 }+ i5 }- J2 k, m            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
! a( A+ G( E% m) x                                             criteria_list[0],
8 q6 D$ l9 m6 B" x                                             classified_sets, i, &value );
# K1 O1 s9 u9 ^1 ]& v            break;
2 L3 o. m" T" V0 }3 x         default:5 {" Y+ j3 C) @
            break;
2 p! M" h/ j* W1 A( U3 T/ @; J      }
! I! M4 i, c  K9 N5 H5 G, g: \   }' Z7 v+ c6 T" c! q

2 m( p$ B' G& _' z$ q% K   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
( A. @8 H- l- G0 e0 g; S" x+ K- ?) L& W
; C" x4 t) K2 F6 r! ~2 I   return;
+ \* m- ~' i) j0 a}9 H1 m6 P2 {5 l

! ]4 D0 q0 r; y# ?  ~* W  Uint ufusr_ask_unload(void)) I6 e- p9 j7 a0 L6 f. _
{7 x" a# d( K; L  Y
return (UF_UNLOAD_IMMEDIATELY);  A# u( f2 t6 P6 t
}
" y& J, O2 a" G* }
1 k/ [' A( R. _# f, e4 k! V
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了