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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
; M+ ^  [5 {+ y2 S. D
  C4 ]# D( O8 D6 k6 @- E

5 z1 Q9 |' A% v4 `/***************** Include Files *******************************************/
$ b- @3 X2 E6 @* x2 x#include <stdio.h>
8 W- G" r/ o3 y7 c#include <string.h>
6 p4 Z1 S9 o* M) a+ h' f+ T3 s% I; J. _/ W
#include <uf.h>( a* G4 o, g* a
#include <uf_defs.h>/ b# \* a  ]7 F7 T1 w% M$ _: k
#include <uf_cfi.h>
) ~) _5 ]9 C3 l/ m8 w" g) J" a1 }2 m#include <uf_cam.h>5 u( J! r, G. G3 l
#include <uf_ncgroup.h>% U# p& c+ Z* O, s4 Z$ U# o  a) R
#include <uf_part.h>  I8 T) }7 C5 n1 L2 H
#include <uf_setup.h>
5 |6 V. n, D9 h9 E4 V6 T& B! v3 G4 p6 `#include <uf_fbm_geom.h>
* c$ ^$ ]1 D9 W# w/ W: z4 E#include <uf_ui_param.h>$ |9 H9 s! a/ b; ~. `% Q7 ^
2 ], `& e9 r. K
/****************************************************************************/
& T" T2 M. w1 S
" ]0 }, D8 G4 G7 ~4 F0 @% Fextern DllExport void ufusr
3 w6 \, P& ^& d- }( Z(( Q) r! Z" Y* o- V; h
   char   *param,! I9 R8 n6 _1 W- T7 i! W4 A) L2 [
   int    *reTCode,& a- i+ G; d7 h' q5 W2 U) x  f, n
   int     param_len
' u: d: v) b: h5 i9 K1 e)
, y8 o) H, Y( F, H{5 Z3 E( e: k6 m# ^1 f- q
   int error_code = 0;
# P7 S5 J1 t  M$ W) t/ ~   int i = 0, count = 0, part_units;
& A2 G, [' k6 Q6 ^; @* B  {   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];  u. K. C% u0 |. O: m
   char *env_trans; / S( D2 m" x& j( `
   char opt_name[ MAX_FSPEC_BUFSIZE ];3 H# H' A  x3 n# m/ n
   char part_name[ MAX_FSPEC_BUFSIZE ];
6 S; `# N, ^8 k   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
7 H" l; B7 A0 Q# Z   char  **feature_names;3 s3 V' x3 I* e: S% ^3 Z5 T
   UF_NCFEAT_t *features;9 k; k( v* n' E# i9 X- I- Z3 f

  [5 x6 e. p" p   tag_t setupTag = 0, wp_tag = 0;0 W0 v  d$ Y( K5 u# C, ]: T
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; 2 f. `1 U- q$ {1 N, S# d1 E
   logical answer;1 N2 E% M8 h+ M& L
- c1 A& F# J; a9 q6 [& L3 w7 }
   char **criteria_list;+ E- w; E4 T6 ?3 d
   char                         **criteria_to_consider;
+ J; m9 Y3 \) G" A7 Y+ h   int                           num_of_classified_sets;
  x5 [7 V* Z2 r* s/ y+ v   UF_FBM_GEOM_classified_crit_t classified_sets;
% M( P: S, \8 f$ Q& _   UF_FBM_GEOM_crit_value_type_t crit_type;
- e1 L9 @6 Z# j* J   double                        value;
  X0 U8 M* P/ N   UF_PART_load_status_t         load_status;' G3 t/ X9 O0 k! v) v0 A; n* f! v
! _7 T% v7 \' @( C
   *retcode = 0;! e' e# B; j. v4 N: p: y

7 p' h  }+ J5 @; t   error_code = UF_initialize();
) {" J' D  M3 x3 G1 d9 e& K   if( error_code != 0 )/ y0 q- K  p3 z$ y
   {
# _( q- U" H! I! Q0 V/ j      printf( "Failed to initialize uf %d\n", error_code );* N3 V9 Q. z7 ^# I: V
      return;
1 M* a8 R0 E% B5 y) B   }& p1 F. s9 B8 h% u& U

, f. S# A# |3 `9 v7 M2 e4 [- T3 o   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
  c7 L& S7 x& Q' }1 e& u7 d                                                       &error_code );- }+ E- d- ~  F* ]; |

) K1 I4 ~% L% [" p  c   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
2 O0 ?$ i2 ^5 \, E- G# s. z                                                 &error_code );
" f: d* y% X& q2 d9 ^
- v2 i7 S! v/ w$ r1 L( ?
# J; a! s( u( u; ^  X   /*** This program works with the part files in the CAM samples directory8 ]1 T6 L! y7 K& W9 D4 _' `+ T
        so we need to get the path of the directory and the file name
/ B' v; ~* C' ^1 O# {% I   *****/
$ q4 q0 E8 f8 v- C% D   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );% L- N3 y+ [! F; ]
   strcpy( part_name, env_trans );
* V4 s0 E# n& U   strcat( part_name, "cam_holemaking_base_" ); - s2 ~. C) M; ?' U# c

# B  l7 l7 t) e, `- b9 G   /*** If no part is open then open the part cam_holemaking_base_in.prt1 p; G* h( d  D/ @9 Y4 D9 b5 Y6 L
        from the CAM samples directory
) b# ]" l  s) M7 b4 |        If not check to see if the units of the open part so that we can open
; j, h$ D! p) z        the same units part
- Y8 N1 K' s5 b' ]* R# K0 n7 A   ****/
9 O; m) ?$ z& k; G   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
/ b9 i4 g" b# u% ]: Q1 k8 s   {6 ]$ a" D- h5 t
       strcat( part_name, "in.prt" ); ' t; M% G4 v- p! r- ?7 g' M3 s" {
   }& ~% I# V' w4 r/ L
   else
) W8 p; ~* E6 p* m   {
/ P) \' t" B9 {      UF_PART_ask_part_name( part_tag, open_part_name );6 Q% w3 a  B1 _8 C  k. v& }% ]
      UF_PART_ask_units( part_tag, &part_units );
; ]$ T, C2 Q% k6 J, X/ J, X      if( part_units == UF_PART_ENGLISH )
1 s; E: f7 _! x$ g         strcat( part_name, "in.prt" ); 5 a! c& U9 L- R
      else
" S1 J( t4 r) W! d1 W, ]7 r7 ]         strcat( part_name, "mm.prt" );9 n$ E0 ]) s5 X+ g3 q
   }: Q; Y3 P8 n6 q0 S8 [
$ M$ A3 O: P0 f- c( V+ l
   /***
: U- D! t6 H$ G" a3 {        If the file we are trying to open is the currently open file! H* g: T$ S2 h# r1 K3 ~
        then continue on) K4 j% Q) i" H) u9 s
   ***/  [2 C- v9 ]7 Q; q: i0 q( _* \
   if( strcmp( open_part_name, part_name ) != 0 )
9 e3 g! y9 b2 C% x3 M. C/ O$ N1 I   {; p, a& J- ]& V+ K& x& _2 B7 m# c
      UF_PART_open( part_name, &part_tag, &load_status );
5 q# l) X. y. ]   }' P1 ?; d( b5 G& E
1 y) {( N9 g  o8 H
   error_code = UF_CAM_init_session();
  ~  b; [. ?; Y( q2 y- A- [9 y   if( error_code != 0 )
1 ]. {# Y$ ~7 t% I, j   {
0 |2 Z7 E7 a5 p' b* b) x# m! w      printf( "Failed to initialize the CAM session %d\n", error_code );
1 n1 b2 a% p% p; S) }' Z+ \! K' A. ?      return;
  t3 L# \$ C* Y- I   }4 L$ S; \" C: J7 P: E/ D: Q
7 @# z5 S5 s1 g
   UF_SETUP_ask_setup( &setupTag );2 B" [9 w: g5 m- \6 S8 j
   if( setupTag == 0 )
" ]" V: j$ ^* W# |; e0 A' B   {9 W0 z+ J4 W/ a8 t
      return;( l( J9 f2 |" L) {+ M( b; f
   }
/ p% v# T: `# Z8 q; v* H- F2 z9 n" h1 J0 @) B% w& S
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
6 d" X' t) C3 _! [   strcpy( opt_name, env_trans );' l! Y+ Z+ a. @; g( S0 |- Y6 Y4 j$ `7 S, G
   strcat( opt_name, "hole_making.opt" );% A8 I% X' v4 L; ?

' }2 A& C  `/ E4 R   UF_CAM_reinit_opt( opt_name );) M9 r% v# R" K' _3 C/ ^: [$ b+ D( }
1 o( d" ^( d% i& n; }7 E) U
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
# F9 l* C1 s3 z
+ c0 _" w+ B8 ?1 y: R3 o   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
; m  ^: V- q  n6 `7 f3 X! w" U) R   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
+ T5 M8 E4 N0 b- E" C! C   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
' q1 Y0 v$ ?1 I   if( answer == TRUE )
$ C8 U4 }: ]; U      UF_NCGROUP_accept_member( wp_tag, geomTag );! v/ e2 I; g% _& Z5 d3 H
   else  g* s" q; K" Y+ \3 D  ?
      return;6 E, V0 D* \3 D7 |6 |

4 ]) g8 ]) H0 e0 y- C& s   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
4 j/ S* X, ]6 L2 U( v7 H* ~5 P6 z$ I. v# g% |
   if( count > 0 )+ V% P8 j$ w1 m6 {! |: J' h) G
      UF_free_string_array( count, feature_names );
% f6 {8 A: [7 [$ `, F. R6 W
- p+ f. [8 n  d2 [  v3 A; G   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
* L- M) ?  m3 {$ q. Q: n
. A  E. _, @% Z; o1 P# x   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
' `$ a& u2 G' @. T1 v6 A0 \+ g0 d+ o
   if( count > 0 )
+ ]) e4 e. {) J6 I+ h      UF_free( features );) q3 b+ U! q, J
   else
9 b! C  p* t. ^* T2 z+ @8 H      return;. B- D! k9 v. W: u& }) n$ |/ q" g$ X

( |6 `6 A1 d0 q$ ^" R$ ]9 o   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );- N' C( j/ z! t* E3 [
0 [2 o; u& K$ |/ ^" S" o1 H
   if( count == 0 )
7 ?4 ?1 {& I# S      return;
: e9 T8 b$ A6 N6 R; h/ H' M% c& b0 u
: I6 L" d1 h4 D- g& W   strcpy( criteria_to_consider[0], criteria_list[0] );
. c+ v! L" N( A, m4 K- Y9 l# j) B6 s% `; O3 q0 v8 E  ~* D+ m# h# r
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,/ ~" F" H7 ?( ]+ ^
                                     &num_of_classified_sets,) v6 c7 A- L+ o. }6 G
                                     &classified_sets );
8 @6 E# O  l8 ?
. \% h. R/ w( `8 P: q" f  R   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );
; V  d  U4 @# f5 U/ E9 F6 C6 r% {  T# Y. b# j* p
   for( i = 1; i <= num_of_classified_sets; i++ )
; D) S, K- R: U, j& q; t( F' ?: ^   {
. l8 L2 @1 k2 L/ N      switch( crit_type )8 O8 [7 g; |3 I- T% m$ l  }
      {
- f. f# Q' f4 N2 R2 T% D  D# p$ U- H! \         case UF_FBM_GEOM_crit_value_type_double:
$ p) N% @- m5 w+ U  h" j3 Y$ u            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
0 S+ @/ q1 G5 c: F: a4 a                                             criteria_list[0], ! ~1 z: R! D, a& d' ~8 U
                                             classified_sets, i, &value );
( ?8 G. {: X: o7 c  z. {            break;" {; J& n- ^! ^5 y# M& {
         default:
3 A0 X$ S. @" O# `! z, Z, ~            break;
8 s5 d! l4 R0 G$ y3 S9 B0 a      }, n$ F* |. i# i& Y9 ?1 G- {4 e
   }
: }* W' U* e5 r# R6 S
7 R; v- h/ Y4 w( U8 W   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
8 n2 m) k; n, u4 m  P; P, c, \/ p
   return;
* R6 o; ^& S, X9 u$ }, v}9 u' Z* u) ?/ V0 k2 t; E
5 @. M1 k/ [) p# |8 a" N7 i4 `
int ufusr_ask_unload(void)
: T# a: t* ]) ^1 T! K) p  }$ M{* i6 j' C4 A! X3 c. y
return (UF_UNLOAD_IMMEDIATELY);; J. N) w+ M( Q; X8 i
}$ D: u2 W& g0 w$ h
' C& \9 u  i0 B+ _7 P4 l$ {
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了