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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
# ?" R- h3 [% v, n4 I( v
( h, [; I4 ^3 ]. b1 Q
$ G4 x/ D0 X1 @, ?6 [: d
/***************** Include Files *******************************************/
( N3 Z+ n4 c$ C) C# F  m9 M- a#include <stdio.h>! V4 M) y3 D- U! e
#include <string.h>
% m" \: A9 t9 p* L: Z; Q3 f/ K. j9 `0 n$ f* e4 e6 A0 O
#include <uf.h>5 w2 @  `& G6 ]+ Y: y
#include <uf_defs.h>
3 ?# Q0 k; {$ f#include <uf_cfi.h>8 \# b  [  U2 D' ?, I9 H
#include <uf_cam.h>4 @: o6 }# K8 |4 N
#include <uf_ncgroup.h>
1 M( @8 H  A& ]* p8 H#include <uf_part.h>6 U  a( i+ P$ m" [2 V
#include <uf_setup.h>! k- i0 t, a% G  p
#include <uf_fbm_geom.h>
4 C0 H) w( k0 H5 b* |#include <uf_ui_param.h>
% f: v5 q  q9 I) a; {9 s9 S2 B0 [7 ?6 I+ z% h
/****************************************************************************/2 H( _( M+ b) G4 N, l& Z
0 [. X# A- D% P/ H: n2 N
extern DllExport void ufusr
! {' `+ I5 X0 s) }(+ }! S' s( N# V+ \1 D& }" q& B
   char   *param,5 n% V9 a  u! L7 Q
   int    *reTCode,6 {3 e) B& n1 X  ^1 I, ^3 U5 i
   int     param_len
$ \  p1 @$ e$ T* _% h)
1 W1 X) u' q! I+ w  l. z) N{
: o2 D/ d' i. c+ ~* p  o   int error_code = 0;
1 J2 ?+ z4 x: i) G) D   int i = 0, count = 0, part_units;: U- n! G( H- H6 h% G
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
9 U) j0 m, c. q( U! @' X$ z   char *env_trans; " T# j* I# F( O2 d' Z( P
   char opt_name[ MAX_FSPEC_BUFSIZE ];
) o" |; ~  i0 P$ X3 T7 y   char part_name[ MAX_FSPEC_BUFSIZE ];0 M/ n" X/ l& u0 f
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
* \: P3 O$ W# J   char  **feature_names;
' k9 W3 Y7 H$ A) Z2 F# M0 s   UF_NCFEAT_t *features;
5 c2 T: m3 X" q& C% a& }
2 y$ u! D! R0 p# m0 c8 k1 G- S   tag_t setupTag = 0, wp_tag = 0;" K. M' Y- }; M
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; * o3 \3 v3 z% b' U
   logical answer;
/ ]2 b! e& H( p& i" ^: l; ~- k5 T; P
   char **criteria_list;6 Y. m; v, o3 T
   char                         **criteria_to_consider;
6 t$ O3 m! w5 n7 r: T   int                           num_of_classified_sets;
3 ?0 M& t2 q" m- t' o0 Q4 U' c   UF_FBM_GEOM_classified_crit_t classified_sets;; K3 b( A% L% j$ `. y- a8 L
   UF_FBM_GEOM_crit_value_type_t crit_type;
  c6 d4 z. V- c/ b   double                        value;0 D/ \' A$ p; D7 Q; Z
   UF_PART_load_status_t         load_status;5 c: `4 J9 H$ {! d2 _0 l* l3 d. e2 M
0 C2 w: T4 ?" t' j% C/ o
   *retcode = 0;
& r* p4 e* z, _1 O% M& W* ?7 P- ?0 H" B! k0 _- e+ ?
   error_code = UF_initialize();
" B2 B7 Y& v. G1 u   if( error_code != 0 )  P6 L. W0 h/ q
   {
% L& p$ x: j8 C: {1 }! f9 S      printf( "Failed to initialize uf %d\n", error_code );( A& E5 w8 L& H1 k) Y
      return;
8 s) |+ N# }, c1 ]' B  s; `   }- x/ S$ i: h; G2 m

, U0 x2 n) E8 u* O" q+ S   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ), / l& o# O$ p7 c1 L" W: `
                                                       &error_code );
3 Z: |6 Z  u- N) F( P" I2 ]3 N) m' u% T. g& a% ^" c% U
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, $ a" `( `0 B6 H$ b8 b* Z
                                                 &error_code );# u' |- z" f+ ~- p$ X

4 B  G9 r( F; r) w' |, ^' X# ^$ I, F  H0 i6 T  |% H0 b6 O
   /*** This program works with the part files in the CAM samples directory% J: r& `( n3 I; R& r' z
        so we need to get the path of the directory and the file name$ t+ C, V6 {4 D
   *****/) V- S! E9 k, l' K: T& x
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );
" v! R# g( e% F   strcpy( part_name, env_trans );
& W8 N/ Q. g. g; z' D   strcat( part_name, "cam_holemaking_base_" ); ; @  D$ W( A. R# z

7 C# j: F- e: l/ x9 U# B   /*** If no part is open then open the part cam_holemaking_base_in.prt
! s9 j: l  p, S( t        from the CAM samples directory
0 q8 e6 s7 x$ Y9 P6 e5 x        If not check to see if the units of the open part so that we can open
: f. K" V. X) m# s        the same units part
0 N! W& ~" U! D: I3 f2 m6 A   ****/. l! o( E0 Y8 G0 n( o6 P% u
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
# F0 p* J# g: d8 |3 M   {
$ X! d1 s0 b+ q( o9 l       strcat( part_name, "in.prt" );
; \% Y7 w3 g" J' ]3 [( N   }5 |: w: L4 C* H. {" m* z5 K
   else
$ d) t+ `3 K. o+ ~$ Y/ |7 Q0 Q   {
9 b1 ]! `  w1 P1 D2 i      UF_PART_ask_part_name( part_tag, open_part_name );2 D$ ~, d8 t1 ?' ^
      UF_PART_ask_units( part_tag, &part_units );4 A% T3 X* r9 Z8 r1 b) Y) k* W3 @
      if( part_units == UF_PART_ENGLISH )/ z! @# x0 F+ X, U" A3 F% j: ~
         strcat( part_name, "in.prt" );
- R, w9 u3 b) `3 i      else/ q3 Q4 l( ?% ]" a8 K0 g$ H/ d
         strcat( part_name, "mm.prt" );- E! F% H, [2 s+ w, h2 l
   }
5 J0 i8 n2 R2 c7 v5 `# V- N% R& O' [9 P
   /*** 4 S% C, l+ R0 i" [' k2 g
        If the file we are trying to open is the currently open file, ^3 {+ q5 C# _8 K4 A* q" d9 q- _
        then continue on
. X' U' K( C3 ^2 g" S   ***/! S7 V# [1 D! J5 c+ J' d% W
   if( strcmp( open_part_name, part_name ) != 0 )  O2 w; G" h9 r' W* p2 _3 F
   {
/ u. k  A, Z  n& f/ f# Y0 O      UF_PART_open( part_name, &part_tag, &load_status );
  R" `. D9 k2 l2 `% P8 }- k7 w   }6 b9 Y/ k% D  K/ j) p# U
* C0 R6 V  W0 {' }8 L
   error_code = UF_CAM_init_session();! {+ U$ K7 P% h2 L% R2 D5 Y
   if( error_code != 0 )  y/ S4 n" e9 @: e
   {
+ ?8 J7 p/ g" e      printf( "Failed to initialize the CAM session %d\n", error_code );
/ ^- @) j3 e  z      return;$ c7 ~7 T3 U& |/ o
   }! a$ ~3 t' O) [! i" i* f9 I' Z

! C: W. q3 D! C3 g$ n9 R   UF_SETUP_ask_setup( &setupTag );
4 F: U# p: d  [  t! g9 P   if( setupTag == 0 )
5 y! o/ O) o# K0 [0 [0 J% H   {
) e2 y/ I3 g8 U+ U4 L      return;: L- ~4 n7 N) }! a7 Z3 o5 |8 A
   }
( H. L- Z$ Y" m5 O. B: H3 V1 u: _' m0 M5 r
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );* ?/ X( K0 Y: b: r6 j) Z1 K% ]
   strcpy( opt_name, env_trans );4 v: ?7 l3 o/ h
   strcat( opt_name, "hole_making.opt" );
# e( w8 t0 c$ c* b0 ]9 A
/ I, y  ~2 A  A, u  b+ r   UF_CAM_reinit_opt( opt_name );7 o& J/ j5 K8 r' v3 L$ T
7 d% j( u* _  P- D, n' i4 C# g
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );$ B+ g- R7 p2 P

4 t+ z8 I' r, \0 S- @1 j   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
$ d* r! O! W3 I+ y1 q   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
' ~6 e1 |9 Z7 L* c6 j   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );! c( d7 o  W6 Q2 \( d! g4 J
   if( answer == TRUE )
3 U$ C  ]$ \6 L( [' f0 q$ i2 q; Y      UF_NCGROUP_accept_member( wp_tag, geomTag );9 |& D1 Z: ?& c! {! }3 V
   else
' K% m$ i7 Q' }: l3 X7 X3 `      return;
' l/ q( S" @; c3 R7 S- M
+ m0 C- v/ C& r8 d   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
( H& P" U, G' S2 T2 q$ Y. Y2 {7 t' |1 ?$ @
   if( count > 0 )% f6 R4 ?* g/ S  e
      UF_free_string_array( count, feature_names );, s1 |: q/ e7 f& @! f; F  M+ I
  _) d, t9 A, I% K- ]* I% r
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
' B# @0 l* G0 `; }4 A, ~3 P8 L5 k2 V# O+ w
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );6 Q" p3 Z, i" C. `/ K9 v1 T
3 X" m# {! L* e: C; a# n
   if( count > 0 )7 ?" C4 U' e$ ~* v' }( z+ O
      UF_free( features );
" s: I3 [; m- t4 L   else
1 @& M# P- q& [' a. i      return;4 Z7 j1 d' N0 J
; [) [8 u' b! G. g" R
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
  X1 W* B. F% g; X7 l# p
+ w3 h2 r% e+ p   if( count == 0 )5 Y' V: N0 t: S% ?
      return;
/ q- g2 s  [- P/ y8 k, R3 A! e; J: j5 Y; G% s' ?5 d3 y
   strcpy( criteria_to_consider[0], criteria_list[0] );$ N0 O; O0 Q9 a8 r
" E' M' F( }/ n4 D/ c
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,
4 E/ \* b( c/ @- V. Z3 `# A; l4 w, n                                     &num_of_classified_sets,
  m2 Y$ W2 o: N                                     &classified_sets );; x& ^: a$ [* m& [6 l. @1 s" }

$ N) V: ?6 D( g  p3 N   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );
- D- a- G8 o/ d4 w$ E8 K
8 }7 [/ l. Q( X& B- }  f5 A' ~   for( i = 1; i <= num_of_classified_sets; i++ )
  H9 S# c& \! f# H# z6 O   {
) i7 M1 f. Y! q# f3 {( s1 l2 W2 J      switch( crit_type )
9 ]; E9 U* J, `/ P      {3 J) B0 F6 L; ?& m" |3 p$ N; d9 F* ?8 T
         case UF_FBM_GEOM_crit_value_type_double:& I5 ?9 V% q: Y8 z9 ]
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, 2 V1 o6 {0 \5 Q9 B' i
                                             criteria_list[0],
% C4 O6 e) O( z! E: T                                             classified_sets, i, &value );
/ d5 n) Z5 k. j" x            break;
8 {1 ^3 x' e6 l( y8 m9 d; \         default:8 |2 b) p1 A0 y1 o0 G0 T
            break;/ M2 D, ^* @3 Z1 E: @5 M
      }
- b) M& K7 E( T  K* E4 `/ Q) u   }
8 f9 L) I- f7 @* P( E' t5 F6 D: g0 s+ W, [+ \5 U6 ^8 o1 U
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );& u: Z7 |5 i, u* ^% K7 f2 `

  g3 h$ P2 n3 u5 Z, q0 @. a+ |   return;* b, `9 ^5 E! `) [: k! H* `
}
3 k" G5 w& N- j- f& Z2 h% M8 G
5 I8 U% l" ]  K" W  `0 Sint ufusr_ask_unload(void)( q# _& k* m# V8 o" _: r! [
{
6 L  }$ e: k5 P; w$ S return (UF_UNLOAD_IMMEDIATELY);
) G1 B, q5 O" Q6 @}
$ k) p$ Y. x! x; s3 u0 A) ~- H2 r2 ?. B2 ~5 b5 ]( h" S4 ]% 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二次开发专题模块培训报名开始啦

    我知道了