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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
2 N& _- @. n* \/ N

. D1 b2 [$ [6 v
$ P$ a$ M+ s3 Y4 f/***************** Include Files *******************************************/
. x3 p5 ~1 t2 S  r! c; ?0 I: Q2 ?  z, U#include <stdio.h>' m$ U. h0 Q7 r! q1 P3 I
#include <string.h>1 |& L$ K' Q/ I4 h1 M

5 T8 M, T( n4 l- D0 @  I#include <uf.h>
  i: x" _" j1 @: P: b, }#include <uf_defs.h>( w1 D; v* R4 J) c+ X# |
#include <uf_cfi.h>) m, J% `$ w9 D. S, T
#include <uf_cam.h>1 G# g& W- d" j" w, G( K
#include <uf_ncgroup.h>' K  @; `' a$ V9 s  f! w0 W- T
#include <uf_part.h>
& l# M1 Q7 a& a( F- X9 }& T$ @#include <uf_setup.h>) N1 G! A6 I( L2 K: {7 e
#include <uf_fbm_geom.h>
9 Q5 \8 [) G" n#include <uf_ui_param.h># e2 Z7 g  K$ \( G/ o. `3 d

5 U6 a. ?" {7 ]0 u/****************************************************************************/9 F/ w8 a1 E% X

2 q" s0 V; s8 B$ _/ iextern DllExport void ufusr
3 U3 z2 b* v( q3 X: g(2 C6 K1 `, D3 i# }( {) q
   char   *param,
, k* m$ z3 ~6 K9 \   int    *reTCode,
( M. s4 ]' W5 b$ u! g3 ]   int     param_len! ^9 F, m8 h2 P
)+ j( F7 W1 f# W  _* B
{
5 m7 ^+ `+ b6 l& ?* c* E* d   int error_code = 0;+ s% j( M" g9 k2 ]! V3 M3 b: G
   int i = 0, count = 0, part_units;% x& V; y. ^1 A* R- y
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
: d+ I4 I$ ^, K' \   char *env_trans;
! J: r' U% t9 Q3 ~- a3 I6 f; a   char opt_name[ MAX_FSPEC_BUFSIZE ];
# V( _, X" `5 J% p. g0 s   char part_name[ MAX_FSPEC_BUFSIZE ];
; D( P* z2 b6 c1 v8 T7 Q$ n4 W   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
9 Y' O! e: [, P4 C4 ]   char  **feature_names;
, x" v2 J. n9 g: d- q! Q$ A' G5 E   UF_NCFEAT_t *features;
% s& p& @: K0 A) f( M# D3 G" R8 p! [5 m5 @+ l3 c: o4 j& g0 p8 V
   tag_t setupTag = 0, wp_tag = 0;; e, ?2 q- \) I, B1 a( ^
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; ' e( V; N4 n( p
   logical answer;
, V4 a  y3 B$ N4 A! f
4 f9 N4 U8 S  v   char **criteria_list;
4 D8 `  U: N3 w  E1 c0 u  s; l, z   char                         **criteria_to_consider;) n2 Y& z5 u5 k% w- k- i; o' i  _
   int                           num_of_classified_sets;
3 T) c) |& V& h. Z   UF_FBM_GEOM_classified_crit_t classified_sets;
! Q" q/ [+ A0 s% q' r   UF_FBM_GEOM_crit_value_type_t crit_type;2 J% i9 q( h* B  {) L
   double                        value;  e2 ]1 i- \' a# U/ V& ^
   UF_PART_load_status_t         load_status;) O# U% J3 i8 ]4 k  W: S
1 Z, y/ n* }6 a: F& N
   *retcode = 0;/ D0 J7 S- I0 _; i# Y. W4 I# w; |3 f
+ a5 Y6 t, i  F0 ]5 t- T8 y
   error_code = UF_initialize();0 N8 ^3 x) X3 H/ H& K' g
   if( error_code != 0 ); F$ c! x1 Z5 K1 Q9 Y
   {
" {* p2 s& x- s: w2 j, n, c      printf( "Failed to initialize uf %d\n", error_code );
/ }6 o4 |3 d% x) t0 p/ U4 G      return;* T- A9 _% n5 ?
   }
# U5 U, g) N% h! l. w9 o' v# q( n) n9 L0 A
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
" C( Z5 Q" T: j' n3 y% f' V                                                       &error_code );, |- z4 T0 G3 u8 _2 Q

' F( x" s7 u& X5 e: I   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
# c' F5 y' Q4 o& B& A2 l8 {                                                 &error_code );! h. c; Y  x  ?5 o8 `! I/ }

. i: {8 B6 S8 R
; k8 Z; ]/ z* d0 c- v: i' k$ h   /*** This program works with the part files in the CAM samples directory
% x; w" x, K$ X  V. x        so we need to get the path of the directory and the file name, I, N3 e" g# U% y0 N+ Q* Q# y
   *****/% U9 X4 v  F: w& C) [  N1 @4 r* u
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
$ w4 [9 v) U# N, j8 U   strcpy( part_name, env_trans );
, p/ @: X3 \& j/ D5 C' y1 m# E   strcat( part_name, "cam_holemaking_base_" ); / L$ f6 }5 i4 c# s* u
$ {# Y1 i* B$ r: c% C7 G! g
   /*** If no part is open then open the part cam_holemaking_base_in.prt8 @3 j( h9 W5 y  d2 [/ S
        from the CAM samples directory
2 f8 e2 n3 w! G8 I# z  _        If not check to see if the units of the open part so that we can open
  C$ r( A& t' |        the same units part
5 @1 q) f7 k  q2 f8 q   ****/
  K8 ]/ A8 O3 q: z   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )0 o1 ?: b0 P0 D) k/ N2 e  r
   {! a- G& X+ X" H1 U3 d; e0 b
       strcat( part_name, "in.prt" );
* d/ S* ^; s' P9 |4 [5 Q" t0 g* A   }
3 I7 A* V' X( U, c3 k" a* p0 f; Y   else/ L5 J" G7 G  @" e& i) ?
   {( m: p+ M" z3 [1 Y8 \  L% n# X! j
      UF_PART_ask_part_name( part_tag, open_part_name );( {  ~9 K+ l% y; P
      UF_PART_ask_units( part_tag, &part_units );9 S0 [( ^) g: j% p" e# x6 `3 b
      if( part_units == UF_PART_ENGLISH )' a- [+ m4 j9 a7 |9 D* z
         strcat( part_name, "in.prt" ); 9 k# B, P% u: ~
      else; Q7 a" o; r. K8 O
         strcat( part_name, "mm.prt" );
2 }9 h( x5 Y2 s" N   }
  O$ s" C( i9 B( `( h8 g4 r# g! f" n3 B9 K
   /***
( ]4 o/ V! Q1 `0 ?3 i$ o1 z        If the file we are trying to open is the currently open file
  m4 G' f; Y, A4 w7 v7 k, e0 m        then continue on; g3 K5 S- ~; W* U' E1 ~% a# r$ a5 v, g
   ***/
$ z& h, |. S$ g- \1 s2 d+ G   if( strcmp( open_part_name, part_name ) != 0 )" h' H4 b8 }5 c' L6 l9 F8 v/ ]
   {
$ ?. `) u, w3 v. z! Q$ K      UF_PART_open( part_name, &part_tag, &load_status );9 l$ S; i$ s" R8 W' x2 k' j
   }
# v# P4 p) z% E7 L9 b
9 k* C3 D: K! ]8 i, K' k5 t   error_code = UF_CAM_init_session();0 w2 q7 S- {) _0 I% J( [
   if( error_code != 0 )
4 L3 n/ Q; E  \' A   {
1 J& z; _1 l; ~4 e0 u& D6 s( \      printf( "Failed to initialize the CAM session %d\n", error_code );3 J) L9 S: M( g/ b1 m0 @+ }, q8 V
      return;$ t5 F! ?2 L$ Q, u4 V& O
   }
) z; @( n! I( W0 [' l$ \- R$ _5 }' A2 {1 C
   UF_SETUP_ask_setup( &setupTag );
6 n0 p3 A  r+ Q4 G% |- U, o7 L+ _* _6 r   if( setupTag == 0 )
! ]8 t2 o9 m" q5 R9 v/ v: o) p   {
. K2 V# C- h$ E# Z- ^& A  K2 e' o      return;
. X; r" |2 ~& }6 x/ @   }7 @4 P. v7 `* a% o& C* w

! X/ U! G/ W7 A) G# ~/ L   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
5 X9 E: b1 k. }) c. `" L. B   strcpy( opt_name, env_trans );
& E4 r, J; |( ?2 K; W" O8 U   strcat( opt_name, "hole_making.opt" );
, S1 N6 M! n& F, q  Y+ ?; }+ s  V6 D- p7 @/ J# h
   UF_CAM_reinit_opt( opt_name );0 ^% g% J; X3 f. d
& B% P- R! K2 p8 E0 O
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
9 z. x+ V  w2 @+ x; e# H
5 c! e" S5 [8 F7 @$ X5 c# K# `   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
& M/ k) S+ M( t3 V; M. v: B$ l   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
* ~6 `% P, `: m# ]/ W5 T; a) G. G   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
) @8 g* \( P- d% A& j   if( answer == TRUE )
2 O6 P7 x' S9 c" j* O      UF_NCGROUP_accept_member( wp_tag, geomTag );! U1 j0 Q# Y+ W  z+ L8 n
   else/ B! G6 A* B( U/ m
      return;
3 S$ m  `5 ~9 A1 j" U) w! [: O& i2 b1 j
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
( O1 T! E) s1 e; E# J: }7 _# @1 H' }: ~5 s+ ^9 `
   if( count > 0 )4 D1 o# Y5 W8 W! U8 s% c5 L- o
      UF_free_string_array( count, feature_names );$ J, S# M; T- w4 P
+ j1 G$ _: v5 w, h7 v1 o- U
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );) K% k2 o3 S; `6 @7 @

) w& R4 h5 |! s7 o- L- ~   UF_FBM_GEOM_ask_features( geomTag, &count, &features );- R# I5 l8 h& L: F/ V0 s; i

5 g# o2 f3 w4 ^# T: e2 S  j   if( count > 0 )7 N; S% R& |& c7 z
      UF_free( features );
  p+ e  s' i' c5 X5 j& r8 F* {   else
; \, G  D6 r3 t      return;8 }4 o  }+ R2 q5 D! @! I9 c
1 K3 e% n% _$ v7 T
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
* S1 F1 F& Z% s
. Y& O' b( I; m! q! o   if( count == 0 )3 [0 S4 O# e2 f9 o: u* x
      return;8 B8 d1 Q9 U( y! r
- M$ l( ^' E) i8 R+ P' A6 d) V
   strcpy( criteria_to_consider[0], criteria_list[0] );5 ~( S  T+ l1 k$ j* Q4 M

" m7 K) {- i$ X   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,
3 |; s. O& a) f/ q9 T3 A5 z$ E                                     &num_of_classified_sets,
) b# V4 F4 N+ A" S& e6 ?                                     &classified_sets );2 k4 n! B/ _2 A3 d: ?6 C6 N

) Y7 p7 y' {) i' `' |   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );$ j2 Z: C& q; T
  l$ M" r4 S: r
   for( i = 1; i <= num_of_classified_sets; i++ )" C( R9 L5 n2 x
   {8 p5 \1 R  {' Z! K
      switch( crit_type )
7 ]( J4 E) s" W  ]# V$ {! z$ v      {
; ?, S6 l" Z+ h" [1 b         case UF_FBM_GEOM_crit_value_type_double:
, n* W, o* I2 y+ X! X' v- C' C            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
7 Z: _+ h' L7 g; |. b+ N. B7 s* u                                             criteria_list[0],
+ |( @. b% k. Y: P7 l                                             classified_sets, i, &value );# j: q0 p/ w( x+ L
            break;
8 u* c/ N- e8 Q! a( J0 z! b, e4 i         default:
# d) l2 d+ e$ j# F& q! z0 a9 K! s            break;+ E6 w' D; ]8 [5 Z/ t  }6 d
      }
+ w8 c  j- \+ M" }! Q0 Z   }
2 S/ n$ H! ]/ _/ z$ M4 s# l* z
+ B  F" ^% C8 }+ [$ ~   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );4 X, E1 `  u& g+ w/ N4 S% w  P' n2 J
0 a: ?3 ~5 A+ K
   return;# K+ J/ h7 a4 U8 s. H4 L# c
}
6 l  R3 ]  L& i- N$ s; y% A! K& E3 o3 A
int ufusr_ask_unload(void)7 R$ l7 `2 Q, t/ z& ~- ]3 h
{" G* w: E; F  c2 `
return (UF_UNLOAD_IMMEDIATELY);0 y& e6 j7 U4 y. w. a2 K$ H" J- a
}1 z4 H- o) C# n0 F/ k, j/ _# G) Y

3 W5 P1 n* `8 e, F
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了