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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
. K5 Q2 g6 @" t# r. E* e9 p

% Y: b; M) [0 O: g. m. W% C; {, t
/ J# `! V, ~* u9 n+ s. j/ B  _/***************** Include Files *******************************************/7 X. _4 l/ G! n+ @6 a- c
#include <stdio.h>) i/ [% N8 a  ?# |
#include <string.h>
, v+ `( x( d; u4 D5 z& A: Y* u, r- M. \6 s% n
#include <uf.h>
5 |, o: l' D8 |#include <uf_defs.h>
) D/ `) o5 D9 F3 t8 D) i6 d#include <uf_cfi.h>; Z* X. |( d5 S  ~9 r& V; L
#include <uf_cam.h>3 V2 M; ]) O' D
#include <uf_ncgroup.h>
" v* |! c" v' o$ n#include <uf_part.h>9 A, f2 S9 m  X1 e+ M+ V2 A
#include <uf_setup.h>1 b9 J) F4 ^% C# S/ l
#include <uf_fbm_geom.h>) L2 f) a6 M+ e( i" W; N5 d
#include <uf_ui_param.h>
( x* f' |2 K7 G. h, S
. G8 M. ~3 C# o7 _' ^; ]' {/****************************************************************************/
# [, z0 o7 U$ C+ N9 L1 r( i6 V+ e! ?2 R/ n- E  I1 i. y% c, @3 y- o
extern DllExport void ufusr
0 p. m% S# X. f* k(
7 [$ N' X: W( S  a* o5 c- }   char   *param,
( P3 d  |2 L2 U7 h  Y' q) y( n4 t4 }   int    *reTCode,
6 a3 e( h. I5 F   int     param_len
8 i- @$ k1 m1 I" J: z. |9 P)! [, `0 m1 D7 p" F7 ~6 _5 N4 t6 Y
{
+ N5 ^6 l8 K3 ]2 x" d   int error_code = 0;; U5 J1 F/ t; X* X9 d; _& }
   int i = 0, count = 0, part_units;
( H/ `, H0 [* n( A   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];1 y! O) M6 W; g* ~
   char *env_trans; , v3 Z. w! e5 ^0 l4 {
   char opt_name[ MAX_FSPEC_BUFSIZE ];: t  i4 `  k% y, w: ?5 M6 V  U
   char part_name[ MAX_FSPEC_BUFSIZE ];7 s8 y3 v/ o7 p" j& D
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
4 h+ q7 D/ Z/ R   char  **feature_names;
3 g* e: m6 S! u% E" |   UF_NCFEAT_t *features;
3 R: T1 A2 z1 G9 O+ n' k9 w! Q8 r2 d8 A( _1 `# K5 A9 x) ~
   tag_t setupTag = 0, wp_tag = 0;  w! K7 c! S6 `
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; ( }5 B7 h6 p: |) `
   logical answer;
, [, G) \8 L; ?: i: Z, z$ W; _
/ c! N. X) Q6 G6 F/ ^- J   char **criteria_list;* c; T% S: d; C# i$ S2 W
   char                         **criteria_to_consider;/ h9 Z9 v+ j0 G
   int                           num_of_classified_sets;) Y" D+ X3 ~3 M5 m
   UF_FBM_GEOM_classified_crit_t classified_sets;5 ]6 v7 e1 C6 i7 J1 b' R. d# W
   UF_FBM_GEOM_crit_value_type_t crit_type;, b) J: F9 v2 z- N& U1 v4 L% m* [
   double                        value;
4 v/ f( D2 ^3 l2 T   UF_PART_load_status_t         load_status;$ y5 `' s& u( ~& a  S

6 N4 A# ~- {# A. B3 W# b# U1 s) n   *retcode = 0;$ T% Z- C( V( {. w0 o  M$ t

) N$ J3 X) R8 T4 _7 J# _+ y   error_code = UF_initialize();
, [( B5 E  P: e' z) V. z   if( error_code != 0 )! |! s9 ?" M4 I$ v0 z; ~, |* \# E
   {
, Y* i& J* ^$ J8 ~6 K      printf( "Failed to initialize uf %d\n", error_code );8 L$ b: n8 x$ b3 n6 M7 T
      return;' P' g! c# O: V4 v1 |
   }
2 q, Y6 U; S+ w; p( K- j% t+ {1 {6 N  a( j) R+ B
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
" U- \. K5 N6 v# R                                                       &error_code );
, P  M8 P, r: u/ ^
9 }1 c! x) o" k" H' e7 w   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, # f9 @$ W0 J: ?7 ~& {2 [
                                                 &error_code );
+ C# p  x7 R# q+ ^- Y+ B: l  X7 O

6 a( @9 e/ Y4 ?) s" n   /*** This program works with the part files in the CAM samples directory
+ ]: k* Q/ \7 I) t! T- p/ d        so we need to get the path of the directory and the file name
0 V1 x: ?, }/ w' m: f1 |   *****/
' e5 u0 _6 j- Z; u& w/ C   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
0 S4 b% W7 _, U& T/ i9 Y   strcpy( part_name, env_trans );9 Y4 d8 l8 R' X7 C, H  ?
   strcat( part_name, "cam_holemaking_base_" ); ; L9 x& `+ V1 o$ ~0 y3 b2 w

# m$ N" r% c( E   /*** If no part is open then open the part cam_holemaking_base_in.prt
" O2 z( s: J2 \5 m+ P        from the CAM samples directory 5 @, U5 T% z* L- Y; p! M/ w2 Y  c3 y
        If not check to see if the units of the open part so that we can open% t  H) X2 I- q1 \" A
        the same units part
8 i4 c+ ^- x9 T8 a( b   ****/
; [$ @; f# }4 S6 i! e1 R   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
& M9 H* q# m+ j# r* V   {
8 j% d. t  o+ m, ^       strcat( part_name, "in.prt" );
& I8 D5 p  n3 m1 i3 Q   }
8 T/ }/ X+ I9 K( d" ]4 y$ [   else- k5 B1 q2 S* K9 ]( Q
   {3 O' c8 F; m$ e7 t: E5 Z
      UF_PART_ask_part_name( part_tag, open_part_name );; A# @. ?- t0 y9 K; r* y. b
      UF_PART_ask_units( part_tag, &part_units );
  X- a2 t4 ~! K( k; o. J8 p$ v9 I      if( part_units == UF_PART_ENGLISH )$ Z( N! U" g4 m7 C5 w
         strcat( part_name, "in.prt" );
9 w1 |/ B. }) l2 H0 f' Y      else+ m  P- X4 }# @2 M! a- r
         strcat( part_name, "mm.prt" );
5 x8 u3 r# ^3 q# \! v& @2 A   }
+ N) B2 E  q. K9 \
0 k0 j1 ]5 U6 b& n   /***
5 J2 [/ w1 [/ V% S9 g1 y( k% u        If the file we are trying to open is the currently open file/ k' X: V5 s- l' ~, c0 H* p
        then continue on
! {5 ^6 y# S$ i2 h3 f4 S5 [. _   ***/% m. q  i6 \, t: S$ U  M
   if( strcmp( open_part_name, part_name ) != 0 )
+ x3 K& D& b+ H$ q   {4 C" @7 y: G* _( d8 R$ q* k& x
      UF_PART_open( part_name, &part_tag, &load_status );2 x2 N2 g, `  Z) \8 ^1 w
   }, `3 t* R- H6 k; Y
0 e: s$ {9 Z$ C% p
   error_code = UF_CAM_init_session();
2 G, L4 P0 z3 X6 y2 C, _   if( error_code != 0 )5 _" @+ P6 ~8 s8 C, c/ |6 ?
   {
  u; w/ S, R; e' Q  M      printf( "Failed to initialize the CAM session %d\n", error_code );
$ M/ y# R- }" q0 K7 H) g0 O2 e      return;  d$ ~+ }5 j( _  ^- L; A# F
   }# ]( ]' i# e. O
, D' e/ q  c# X, l& \9 X
   UF_SETUP_ask_setup( &setupTag );1 q+ M1 y2 x' |0 G# k! {' D
   if( setupTag == 0 )! ?5 L! S% H, g2 C% E  }# t( i
   {- c; o: C3 X5 B: M5 s  A1 s: B# r
      return;" R& _" l- E& t8 D/ [% q
   }
3 p" H9 ~# P5 i0 }* e$ W  D+ S7 \* r* W8 g$ H& K9 }
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
! @; l6 {/ G) i3 m) \8 h$ A9 H   strcpy( opt_name, env_trans );9 }, k$ `  ~$ D
   strcat( opt_name, "hole_making.opt" );
5 `4 T$ U2 F, N8 q# [  |+ n) R
, e2 h( G; t# V! A1 q   UF_CAM_reinit_opt( opt_name );# O3 O$ D4 g* L# r

  Y8 j$ Y" |) A0 D6 w/ q   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
( b7 R  o0 C$ _/ t8 A
* r6 v1 J- u  a# q+ W* ~3 N, T   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );, Y( L- A8 V: g( E. {# b
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
' m) b8 O) }$ i7 V4 z   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );3 k. a2 l) |" m, p* s
   if( answer == TRUE )
7 l4 M% w+ i! v* w# _# _      UF_NCGROUP_accept_member( wp_tag, geomTag );( ?/ w/ c7 O- x0 S$ ^
   else: M5 X8 \6 \. T+ c/ X, D
      return;# ~8 b2 b4 P/ f0 Q

/ h4 A7 ~8 g/ D( d' ?   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
4 n7 [7 O% M7 u
  T; K2 L4 X) n   if( count > 0 )- ~) P6 h0 G: K4 p: Y
      UF_free_string_array( count, feature_names );
5 Q2 I' N4 e+ C7 {! \
& R$ y$ `% l1 h; a   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );0 U! o/ Q( z* V- Y0 y

" Y! M& @4 r5 ~) b   UF_FBM_GEOM_ask_features( geomTag, &count, &features );( b4 h0 ~- ?6 w& g4 l, x+ y/ ]
* Z. p$ m4 t5 X% B' d5 l
   if( count > 0 )$ X) S& P: y# ^
      UF_free( features );: B+ h" `- a- B% e
   else
+ R+ @" x( j) c: x      return;3 a, Y8 ?; ]' K3 U3 ~% ?2 w

+ i' x2 Z! a. x- L: _   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );" h1 l5 @" ]$ J9 y

# x( `1 t5 o0 G' Z2 F6 i4 g$ |   if( count == 0 )! K* g& `1 k/ W$ B( L
      return;, Q. t5 p$ f1 D5 u8 ?" m; W6 e% K

  w* h9 k) K, {  G+ V! I6 \' G4 }. P   strcpy( criteria_to_consider[0], criteria_list[0] );! B' S! ~" D* M/ x- S/ a
% d# _  e2 k' l: t% r
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,) v5 P- b4 y+ E1 T, s3 Y
                                     &num_of_classified_sets,
# w: p: O: v9 J& X" g                                     &classified_sets );8 v4 G. B4 m( j) L- }  Z, _

& T7 L) s/ u2 ~: K$ |. V/ ~   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );
7 Q* ?( f6 _1 Y. O( ^5 a1 n2 f' l' ?' N6 h! }
   for( i = 1; i <= num_of_classified_sets; i++ )
8 r' F9 D. }1 G7 a   {
, L  T. ~2 V/ Q6 t# _      switch( crit_type )
$ ?5 [. a0 b. D7 x, G5 o5 l+ A      {
6 {: L' }5 c. }$ ~; U         case UF_FBM_GEOM_crit_value_type_double:) I0 N, K' v, {
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, / s( x7 f7 I1 ]; U5 u
                                             criteria_list[0], + [8 x! u: X0 ]' K+ s/ {
                                             classified_sets, i, &value );
. c, g  X/ i/ x, H            break;
2 ]0 D$ Q/ P0 c9 _1 K         default:
2 n% @$ z4 z9 @  e; H% @/ G9 F9 ~$ m6 K            break;& f' i- f3 ^% K2 D8 q
      }5 h2 E) W# s6 c7 j
   }. [8 t. k3 l$ t% ]
  L- e9 r0 B1 M, t
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );# d2 }# q3 s/ i0 a

. J' Z! h8 r0 R4 Q' V+ Y   return;
" n) N5 b$ ]8 X8 H}9 o2 X1 L7 r7 Z  f1 ?
6 x2 m0 U- B2 m/ S
int ufusr_ask_unload(void)) D- L/ s: o: y+ I  h9 X. k5 R
{
* J7 g& ?# H0 D8 o" T return (UF_UNLOAD_IMMEDIATELY);2 X! Y. ~* a, S, [
}* h- J! v  @0 |% I, w8 v' e

6 w+ C9 H6 I7 t. A9 n$ 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二次开发专题模块培训报名开始啦

    我知道了