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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
$ v0 c  f4 v% d# h3 T# D$ p

. O0 S9 O) N' X4 X, a+ L9 L' v( |9 n/ u5 e2 R  K9 \5 `, o
/***************** Include Files *******************************************/
% U, @) d9 E8 O#include <stdio.h>* z& t, ]1 \4 i' U' H
#include <string.h>& [: ?" V+ S" q

; l& D7 b( b1 {) q#include <uf.h>
+ _% N' d+ K$ p( ~9 m/ h5 y" v# X#include <uf_defs.h>
2 s/ ?7 ^! e6 S' Z8 J+ I#include <uf_cfi.h>8 {! L1 ]2 R& E& T3 V/ A
#include <uf_cam.h>. u' N) R& y+ x1 B/ W+ T
#include <uf_ncgroup.h>
9 {/ L3 u) X9 b! O#include <uf_part.h>* E8 i" u; l0 D( z% U$ z
#include <uf_setup.h>8 r2 q$ `7 T( x
#include <uf_fbm_geom.h>1 r: N$ H. S# W  C  o# ?$ V/ i
#include <uf_ui_param.h>
) W8 h0 i' z6 u7 P- n) T# G: N8 }. f% ^0 H/ v
/****************************************************************************/
: H$ v5 a3 U7 C$ Q) f
3 ?% R) d/ k6 O, fextern DllExport void ufusr 5 o+ k) U. x( G" J, C9 x9 _! y
(  X" U$ o! n( u0 n
   char   *param,
  J7 {1 Y, T( |( m+ z; s9 j0 S. |( T   int    *reTCode,
7 Y6 P; }7 u# o/ p7 A8 ^   int     param_len
# ~( k% G5 Z- w0 Z. j)* L' L: `. h* \7 P
{: B% ]' q( H4 d3 B
   int error_code = 0;
! a+ U6 W* P9 I   int i = 0, count = 0, part_units;+ W8 T1 c3 F$ V, h- _
   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];; q4 K6 X* u7 L
   char *env_trans;
3 ]( K" b7 a  N1 Z- N: d   char opt_name[ MAX_FSPEC_BUFSIZE ];
' |* Q/ g$ k+ [$ k8 ?: X# s/ D   char part_name[ MAX_FSPEC_BUFSIZE ];% M! G: R9 q! p5 W) K) R7 g
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";3 X7 j7 M, V' |* |  _. ?7 Z  b& `
   char  **feature_names;
. A: p# s6 P3 P1 }5 z$ u   UF_NCFEAT_t *features;( i+ o, i! U5 c: m- O

5 V6 P# k3 X  Q" k4 ^+ [   tag_t setupTag = 0, wp_tag = 0;6 ]1 |, k1 K2 E' }6 s; E
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;   N# z3 i) H3 M. l
   logical answer;
1 g* O+ f' B5 f, v
  g  P- H) I) @0 C1 C( l8 r2 C   char **criteria_list;
3 M# t4 Y- V8 }   char                         **criteria_to_consider;* x0 Q, s$ _3 z9 @
   int                           num_of_classified_sets;; E+ Z/ y% w/ {3 S, }
   UF_FBM_GEOM_classified_crit_t classified_sets;5 {5 `1 d6 b. o- m) a8 a* ~
   UF_FBM_GEOM_crit_value_type_t crit_type;
, w8 j9 i/ }7 t2 r; ~  g, N: V% o3 ^   double                        value;
  u2 E6 E) U( ?& d# q' t8 `  @   UF_PART_load_status_t         load_status;  i# R, t! p  M% c& \! Y

' d2 G# m' V  `2 r   *retcode = 0;) G; y1 A4 E/ c) Y- I+ s& b
  w7 j/ J! t3 J+ a# v' H$ l7 _
   error_code = UF_initialize();
5 x1 Q+ u. w8 f! y2 x  Z4 U. A   if( error_code != 0 )
- O( l: ?' _  [  w: T   {- H) b& R0 F; I) X% ~. \
      printf( "Failed to initialize uf %d\n", error_code );* m. c1 i: N1 C  O
      return;, T4 U8 f! H, L; s) q# i% O* ^
   }+ r9 b2 y, }) O, t  H

$ \# ?; q5 }8 b8 U4 ?$ s   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
9 F1 d) L7 O1 W                                                       &error_code );
) t4 N" V1 e$ E9 N0 U0 e( m% l: |! K: t  t
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, # h& k2 e4 P" Y! Q! n
                                                 &error_code );, x4 a. F0 N( i( [/ Q6 Z2 U
$ v" T$ I& S" f. V$ q0 ^6 }
! J. I7 |9 K. R# j/ z
   /*** This program works with the part files in the CAM samples directory
4 H0 S1 g# v' Y* u        so we need to get the path of the directory and the file name
+ s4 [7 E$ Y% J( Q" f   *****/
4 L2 ~3 g4 ^: w) v, k9 ~   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );' r; i9 C7 |! I. f" ]
   strcpy( part_name, env_trans );
6 n! ]4 U) |/ l' j& ~3 T' t7 @- J4 C   strcat( part_name, "cam_holemaking_base_" );
& k/ @) t6 W' G
5 K3 p  ~( i5 W  x4 y: v, ]   /*** If no part is open then open the part cam_holemaking_base_in.prt, s3 ]) |3 P4 U/ l1 N3 B4 D
        from the CAM samples directory / {- W# c2 J* S
        If not check to see if the units of the open part so that we can open
8 W' T; N9 p4 F; |3 f& _" V6 x2 N        the same units part
* x( {6 e! v3 X% ~   ****/
6 V! \! Q# [& _8 x8 c5 m% O3 ?   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
9 @) U% {5 o. x- `3 s# D3 J   {
. @3 e* D, k5 B) s4 @$ m0 e. S9 F6 I       strcat( part_name, "in.prt" ); ; h9 e- M* `7 J3 x7 N% d
   }
5 `( w2 b+ ?+ h7 Z$ c+ t   else
' c# L6 S  u8 I# [1 r1 d   {
8 {. x, E, m/ x, _) i7 g      UF_PART_ask_part_name( part_tag, open_part_name );
* A- E' |0 c( \$ @: v1 P" V      UF_PART_ask_units( part_tag, &part_units );
9 X$ |" g1 c$ U) v      if( part_units == UF_PART_ENGLISH )3 u8 |: d' M2 n& N
         strcat( part_name, "in.prt" ); - m$ A0 F8 y9 u9 B" m1 X- q/ e
      else
& K' M& h7 l9 s         strcat( part_name, "mm.prt" );
$ S! ?- G) o& l. r( M: j   }
( n3 I- x4 |6 e9 w2 E7 ^, I, W) a, u
   /*** ( m: y# ^! K! g
        If the file we are trying to open is the currently open file3 b+ U* C  A$ y5 Z6 a" r
        then continue on
5 e, S( b) U- ?! ?   ***/5 T: d' W- }1 r- ?+ ]4 N( @* r
   if( strcmp( open_part_name, part_name ) != 0 )
' |2 T( @; e, _! I7 G   {, W. X4 U' ?! j
      UF_PART_open( part_name, &part_tag, &load_status );! Y( m- d9 S, w
   }
2 C. l5 U* a9 }: G& K5 a1 L+ C
5 v. }4 c8 B2 n+ A  e) x$ U- C: m5 p   error_code = UF_CAM_init_session();- ~. _5 Q" N6 G! v
   if( error_code != 0 ). p; k( r7 t- o+ N% W8 S. J5 v' v1 w
   {
9 K% V4 |' c6 M  b( U      printf( "Failed to initialize the CAM session %d\n", error_code );
8 Q6 j3 F9 A5 o5 \4 l      return;
$ D. `# ?) h: |6 P) z4 j) Z) J   }% \% ], d# S1 F! ?
! b& u1 S! `0 p- c3 j/ T' x8 _/ }
   UF_SETUP_ask_setup( &setupTag );
, O1 F6 a1 @; N- R5 g& g7 R   if( setupTag == 0 )$ A* K( i! S( F# i: |' ~
   {) [0 t+ I0 I, y3 ~# T4 t
      return;
% E4 t% L! M. u7 t: R0 |3 N   }
" u9 p( G, \1 B
6 |# v! a0 Q4 F. S) b   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );2 Y6 T' G1 t6 L; j  U- G/ o" r( j& \5 X- v
   strcpy( opt_name, env_trans );) e  L  w( `  P$ w! @% J
   strcat( opt_name, "hole_making.opt" );
8 ]6 g. K/ T3 R, i
* `7 a: o4 f+ r   UF_CAM_reinit_opt( opt_name );* M! {) U+ e. C
# s* W6 J4 Z  y1 Z) d: m+ y4 `
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
6 C' P2 w; [$ l7 Z) M; @5 {; d1 ]6 t/ |% e  t! Q) U* P
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );" M# N. i' r( E% l! L% H8 \( y
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );7 g% H) d" F' G) g
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
0 p9 j: p9 H8 Z; ?+ ~3 Z, g; i9 K* K   if( answer == TRUE )) r8 S# C. u) e0 C! S/ ]' J
      UF_NCGROUP_accept_member( wp_tag, geomTag );
+ D1 c) R) P: M) y& i0 m5 @   else3 @& z" y6 P1 Y* x$ u3 X
      return;, ~. d  {. ^! S$ Z0 Q* _, p

3 j- f+ u" D% D- N; h   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names ); - ]/ G" g* E7 ]  S9 Z9 ]; o3 W

4 m4 |7 t+ ^8 s8 ?+ A$ ]) x   if( count > 0 )
3 q2 _, T8 i8 a2 Y& ?' Q+ i4 U      UF_free_string_array( count, feature_names );
2 c6 h/ b) w9 M( F. l7 r
* I% J; S% b: q# b- }   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
7 H5 p* i* q# M3 K& _! ~; U+ A& u, H- n$ k) t
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
4 Z2 k# b  a' T  B
: N  X: n. ~. Y1 y  P5 z! i; E; n' A! I   if( count > 0 )& T6 \$ m# o: F
      UF_free( features );9 v( x6 ~  C& H
   else
# ^8 E- E( i+ A) d9 D$ W* E* J- k0 V      return;
" O# w' k, ?$ b
  t) w/ O0 i1 n! ~! P2 W* U) T   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
" R& L. K- l$ R" n% g9 g# M# q! O5 j
   if( count == 0 )
  O* P' V: {& ?) v3 x# M      return;  p! e, @2 t) c( x5 i! u
" p& S( B* s: K# }" M
   strcpy( criteria_to_consider[0], criteria_list[0] );
$ ^- h% o& s9 ~) o" i# W' M9 d% A- p2 `- ^  \& S, }* Q
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,
- T6 t0 J& k% c$ ^, R9 C                                     &num_of_classified_sets,
% l, E! {( l  q% v) V                                     &classified_sets );3 j* V1 N0 v4 g7 f1 S$ m
; |! t: G  D2 j" B
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );' o5 D* K3 x/ G

) K( X3 _% J4 @+ [) g# ]   for( i = 1; i <= num_of_classified_sets; i++ )
1 ]# M5 g! s# I+ v6 k   {5 c6 `! F7 b0 l* x' }
      switch( crit_type )
+ u6 K6 u/ w4 \      {4 {% J9 P6 X2 d
         case UF_FBM_GEOM_crit_value_type_double:9 t3 f2 G! ?2 k6 _# A" F
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
3 U' w' V8 l* \' z1 g                                             criteria_list[0],
- V" ^* L% M) P: v8 ]" g" c                                             classified_sets, i, &value );
/ ?' p: u( J6 i0 y1 ^5 p6 G7 g            break;
- G; W6 l5 r( ^8 i& x1 S/ }         default:
5 g" u& \1 L1 k' K            break;$ I6 u, w5 C9 ^+ w; S: h& j
      }0 I% v4 [# ~( @4 i- t1 Y3 A
   }1 a' y' ^1 u$ m

! E/ W8 c/ H) W! o   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );+ G$ l6 a; V2 d* L8 _7 n
  \& ~1 D+ a* a: \8 f" }
   return;$ H+ d5 u( T; }9 v/ v, g, R* B
}/ [3 y$ ~* Z$ I9 ^( U5 Z# C
  G# L0 B9 K3 p
int ufusr_ask_unload(void)
3 H) j$ Q6 ]  ?- V) ?8 i% u{; s& D( M% }4 M& g
return (UF_UNLOAD_IMMEDIATELY);5 l. a7 _: D+ p2 v, L1 R
}  s1 E, j9 m9 X4 g5 K* _
4 ^0 q% d9 M6 u
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了