PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

3 S: {. L( ?& P9 R& i# f
1 b; L' M  s9 m4 A9 t/ j, A9 n5 ~7 y: M# @* \
/***************** Include Files *******************************************/" ^2 Z# F6 I' `5 v
#include <stdio.h>" l( c1 [; H* u( Q$ T  T3 A0 e# K
#include <string.h>" S. J, E+ t" G" z0 R7 _6 k; ~) k; J0 z- }

8 R  V. Z1 j* b  f/ m! D0 g#include <uf.h>
4 k( y6 j, e- a8 V7 ?# X#include <uf_defs.h>
6 L4 u* F. O, g% u$ S" E#include <uf_cfi.h>; O# m8 X) q0 n0 w' u8 L, H9 A4 i
#include <uf_cam.h>
" M* C4 B$ G1 Q" n, w#include <uf_ncgroup.h>
8 i+ J. g; G: c/ T#include <uf_part.h>: C1 e& X2 a. e, |. N9 D
#include <uf_setup.h>' x% P9 a2 [. L/ ]. I* n* H
#include <uf_fbm_geom.h>4 i6 G1 H& R/ o  @; U1 w0 L* k4 Q4 L3 f
#include <uf_ui_param.h>
1 ?! B( h( q$ ?! u/ |
8 `2 S1 `8 r) o9 i/ O' P/****************************************************************************/  t, @6 T1 l7 {% ^0 J" |

$ o+ `9 C# P  e6 U% o0 Cextern DllExport void ufusr
/ ~8 A, F4 R# [0 F1 T0 T: t(
0 v% \4 w% t% Y9 q! P: z$ a# }   char   *param,4 t( ]; V4 {5 S3 i; j4 R
   int    *reTCode,9 Y: P8 H7 L3 ~0 Q0 m8 x. `; U, X
   int     param_len
/ R! S: r8 y$ P; j, z)2 G: y4 E3 Z9 z* j5 y5 W
{! r& G) `7 h" o% y6 F
   int error_code = 0;
+ T5 V5 E4 M8 e- Y5 U! Z* R   int i = 0, count = 0, part_units;
1 W/ \) ~" O9 W, j   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];0 ]# Z' s5 L% s# q1 K
   char *env_trans;
5 o1 y9 R! T2 X   char opt_name[ MAX_FSPEC_BUFSIZE ];
: t9 t" K- M4 S8 M) {   char part_name[ MAX_FSPEC_BUFSIZE ];7 r  W8 b9 B- V; S1 h
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
! F2 @0 T4 h% r5 t' Z, t( R# R( Y   char  **feature_names;: i5 N; v8 n8 Y8 q$ `
   UF_NCFEAT_t *features;
3 \: l: Q2 E! U/ O
' v; |+ a5 l0 p2 r3 m   tag_t setupTag = 0, wp_tag = 0;
4 L  `3 L0 }; P   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
/ v; s* L- h$ \# r0 I   logical answer;
5 C4 M: E0 m4 A8 X5 e! C. [: v! B% i$ Z$ v
   char **criteria_list;
% I0 R3 v! v2 ?2 n$ D! d# G5 v   char                         **criteria_to_consider;; G" p  {; K; g
   int                           num_of_classified_sets;
6 _3 Z3 ~1 `; k" L" c/ s   UF_FBM_GEOM_classified_crit_t classified_sets;
* H# j& ]+ V) i+ ]9 j. w% a   UF_FBM_GEOM_crit_value_type_t crit_type;% @) A2 a# d; H6 d4 J; b2 u
   double                        value;! @/ o& w( Z6 p# \
   UF_PART_load_status_t         load_status;7 `/ R: B5 \4 Y( H7 w# O

- j( E- [1 |! C   *retcode = 0;7 j% F- O  x! l
8 m/ K& n  Q# S# x
   error_code = UF_initialize();
) d- V  F; I7 L$ V# e   if( error_code != 0 )
0 }5 }) T6 C3 |9 D; ^/ Z4 r( U   {7 A5 \$ L, e* [+ a7 e5 W
      printf( "Failed to initialize uf %d\n", error_code );8 R: o% @0 ]/ M3 H# Z
      return;5 m9 f* F* o! |& C1 N
   }
! S' A  I; A5 M- s4 _) O$ M
) m$ S3 n6 P0 Q5 X; m9 f2 ?! q   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ), * u" [3 k/ S  h4 X: P! y3 ~" h
                                                       &error_code );8 y2 v, |3 B2 p6 t
, Y! q8 d/ `; P
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
! u3 }/ t+ f% Z9 R                                                 &error_code );' W# p3 D$ n' M9 H7 [( a$ t2 }
. b; q# v$ L) v  h* ~7 X  T
( B' v+ t# v1 d
   /*** This program works with the part files in the CAM samples directory0 @4 M; `6 T9 A2 F: R* \( X2 r
        so we need to get the path of the directory and the file name* g% l$ D0 J4 p
   *****/
4 `8 I0 G) ?/ l$ a: F: R& ^- `# y   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );( K3 M9 w( c! H" i2 v
   strcpy( part_name, env_trans );8 B8 O* J. l/ ^  U9 I
   strcat( part_name, "cam_holemaking_base_" );
* e" W/ G0 y) f% }. F
2 Y1 `0 H! G0 @2 P2 ~) }0 Z   /*** If no part is open then open the part cam_holemaking_base_in.prt
  B! }* t9 z+ @        from the CAM samples directory
: L5 B+ ^+ P) D0 a( q* |7 j/ v        If not check to see if the units of the open part so that we can open
, O0 n. T  Z; q; ]        the same units part
6 J: a, X% e: T) e/ h; g) W   ****/
! \. o6 _2 T$ ^3 ^7 \   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )& {! G# T3 C/ D0 ~& [5 V2 Q
   {4 A7 N" d% h' B; b
       strcat( part_name, "in.prt" );
4 C) |$ \9 R, T/ z" B   }
" T7 X% H; {: z' H' e   else9 c- p) R/ Z( g1 Y
   {, O4 u0 d' i6 v6 J* W
      UF_PART_ask_part_name( part_tag, open_part_name );
3 B+ S) f% h$ j- ^; s      UF_PART_ask_units( part_tag, &part_units );/ v5 V& _: ~' S* _  s
      if( part_units == UF_PART_ENGLISH )
; Q- G# F. z0 h$ H8 [- T         strcat( part_name, "in.prt" );
, _# L/ T4 y$ J; }0 p4 N- N      else
+ R( Q/ h; t+ Y" w* `% P5 i         strcat( part_name, "mm.prt" );. d! L& r3 I, o% X0 B7 c
   }
+ ]. n( P' J) U8 _3 K; n2 q( s+ |8 O" j. C+ q- ^% @
   /*** 2 u# @- U' n$ c& T
        If the file we are trying to open is the currently open file
  {, [9 T6 l4 M+ q  M3 B        then continue on
2 [& v- h- M4 Y- x) |   ***/
3 P/ m; r8 W/ O% s* [; E8 o! G   if( strcmp( open_part_name, part_name ) != 0 ); |! B9 y, O, q9 z' y: ^
   {
2 X6 |( ]+ d! L      UF_PART_open( part_name, &part_tag, &load_status );
) w% f. B, J1 {+ S+ F* d   }$ r9 X+ o7 u; c( K; A

4 o7 ~7 r: z+ f4 H, k( |% P   error_code = UF_CAM_init_session();
/ F0 ~9 @% u: U/ T" G   if( error_code != 0 )
" G7 F) Z/ i0 V6 ?' B# ^+ b   {
: f2 u: U# V9 f      printf( "Failed to initialize the CAM session %d\n", error_code );
3 m1 K1 c; U  B2 G: z* ]3 X      return;0 D. p# U9 p. O6 ?- I7 W$ n' b
   }
( R5 D7 w2 g, `
( f! T  i4 i. H& O5 X+ A8 Z6 K+ ]   UF_SETUP_ask_setup( &setupTag );
) e' Q) _0 H& M  Q7 i   if( setupTag == 0 )
/ _! h0 f" J3 G' _* ]# G   {
9 r/ O0 D3 Y- C( |: B# W: l      return;
1 U. Q/ s" L2 E; b3 S6 J6 ~3 C/ U   }
9 L8 w/ F, n: c! `! @  l
; {  \- D" t; Z4 Q1 c8 t" ^   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );/ x: ^/ N# ?+ L) [9 E
   strcpy( opt_name, env_trans );! Q, f: \5 b8 Z8 V
   strcat( opt_name, "hole_making.opt" );2 w$ `$ s/ a$ I/ v1 {# R
% [/ D1 t# r) d! n" x* f
   UF_CAM_reinit_opt( opt_name );
1 r: j% {# d# i8 @2 P# e0 ~& D3 `3 L6 |' z$ o
   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
4 F2 u" ?1 D7 v0 s6 X1 n. Q9 w3 h- N/ }
& i. A* a* x2 `9 [8 u( j   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );7 b# A" R! T" F1 ]; Z/ g
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );* N; \1 d) T5 g1 ~2 J  ~( }
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
' u$ o+ q$ C5 K5 S/ _" O   if( answer == TRUE )
9 M/ Z- a/ b9 Z' D      UF_NCGROUP_accept_member( wp_tag, geomTag );! Y/ ]9 @- d, I
   else
! k. C, D# w& U2 O3 J6 {) V* C      return;6 A) ^* z+ s& z- i- _

9 n; n* u: R1 \+ s  A% l- S   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
# |. \$ ?7 R9 e" Y, R+ s8 @( }( C. O5 h* M, g2 x. I8 a6 T( s
   if( count > 0 )2 ]* Y2 l9 \1 p
      UF_free_string_array( count, feature_names );4 O& O0 U5 d: f6 i8 t
5 p8 v) j4 x9 k& h
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
+ u5 M0 q% i* `0 [3 d. y) j
( w- S2 s! v4 v% H   UF_FBM_GEOM_ask_features( geomTag, &count, &features );  r, u( P+ \' W' w5 s0 Q7 C
& p6 O% Z" V* y3 z3 x' l. m
   if( count > 0 )3 _" E. G1 v& E8 L
      UF_free( features );
1 Z' j8 b- b2 r5 w/ u5 b2 A4 C   else
; @/ O& |& N7 n  H3 f) z      return;
/ p* S; `& i$ T0 K; b7 Q1 e8 a8 K6 X: {* _" t: w" ]/ j
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
- \& Z2 M: [! C% {: [) {
! h* r% [7 ?. H/ y2 B2 [   if( count == 0 )
1 t+ r) a+ R* A5 K1 p% _      return;
9 t9 t5 c, p" I: _: U
( t# M, h0 c1 h   strcpy( criteria_to_consider[0], criteria_list[0] );
  A& g2 U' C9 h) r& v2 e7 J- e/ W5 x: i9 O
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,
3 j1 \; j8 A/ I' ]* u2 J1 _                                     &num_of_classified_sets,
$ N, ]* r# a5 j/ P                                     &classified_sets );
: K5 p$ O: F1 q6 H: M  q/ t5 O! A
1 M3 w  |' r) G) i   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );  }+ [: }0 ?8 G7 i+ H% O9 E6 l
+ I* ]  r3 u4 c
   for( i = 1; i <= num_of_classified_sets; i++ )
8 O( Q6 Y* y; T+ y9 X" j) d   {
5 J( L& H$ {8 r. H0 k+ g1 Q: u      switch( crit_type )5 }7 r, C+ `0 h1 `* k. X9 j4 u: D
      {% u4 j. f- P6 F; B8 w& }
         case UF_FBM_GEOM_crit_value_type_double:9 B/ Z2 s3 k5 ~
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
- X2 \' |) j0 }                                             criteria_list[0],
9 |/ x" {, W( v3 \* r2 p                                             classified_sets, i, &value );
. v$ h4 W' P/ x  f% q% y            break;
9 R1 b' d. \- i  p         default:
; c, j9 _- P9 w" Y            break;
, T* O7 E( R  T      }
; c6 L1 @* H4 W6 Y! T+ q   }
: K, u  Q" G! T% |: }7 ^3 \
1 c* a0 J' r3 o   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
4 Y+ S' l# k: u( k; D2 A! T4 A4 _  k) l( Z; ~6 q+ ^
   return;1 b' y: j+ g. g7 l9 n: ?
}
& x& J0 o  J2 H$ E4 [/ A7 u4 ~* X& c* q
int ufusr_ask_unload(void)
3 M6 b" d! l7 ?$ |* Y# x5 ]+ J{
7 |  e# @. l2 C4 ?* n  |. A+ [% O# X return (UF_UNLOAD_IMMEDIATELY);
2 i! m. f9 G3 N}- h/ Q1 i; C: D. m0 d2 n0 i: \

  n6 \: X( y5 [% o. R4 g
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了