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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

4 O* o5 ^, q, q5 s
0 J2 [; G* c$ i+ m
4 k8 H4 k# `8 u1 u3 v/***************** Include Files *******************************************/
- S! f" c6 M* Q$ }1 F$ {2 n$ n#include <stdio.h>% f) M; z  S3 y
#include <string.h>
) B6 y/ ^' W1 l, O; r9 C8 W; D, V3 I1 }; f- @5 a
#include <uf.h>6 M6 P7 x1 k# ?1 H- T" o* @9 I7 h
#include <uf_defs.h>: I9 v5 A, J  g4 q. u  C5 m* H
#include <uf_cfi.h>0 M* N" p1 d* [  }  G, s! ^
#include <uf_cam.h>5 M- p6 t6 W$ n% {7 V+ T& r
#include <uf_ncgroup.h>
8 x1 i) E. d5 L  y- X#include <uf_part.h>
4 \* e8 I5 t9 o#include <uf_setup.h>
- T3 Q& l7 v0 n! b, m+ T#include <uf_fbm_geom.h>
* ]8 C* W, Q: @5 H, b# u#include <uf_ui_param.h>
/ p: K: Y6 Y. V" e, {# _9 p# r, E- N5 @# L- S3 u
/****************************************************************************/. ^. z+ P: m$ m. Z/ O8 A* Q

4 W8 X( E; V6 \+ F  f! k  Cextern DllExport void ufusr
# j5 \' C- h- g5 @) O($ r' e0 e# j: ^6 L2 S9 V
   char   *param,0 K  i$ s( \+ H
   int    *reTCode,$ {; K. a, A3 }, Y: k
   int     param_len1 W# D& R6 l. S3 `% B( @) K
)
% \5 G. n' r$ f{
' o/ G) j; a3 Y4 g. N) N5 E   int error_code = 0;
  @- d0 E0 L' Q( k" _" g, c7 F5 c! ?+ x1 v   int i = 0, count = 0, part_units;
. w& g  Q# ~; I' w2 G! J; \   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];4 C+ ], S+ M) ^+ i7 X4 d$ w2 ]
   char *env_trans; 3 p. e0 i. T* @- Y0 C
   char opt_name[ MAX_FSPEC_BUFSIZE ];1 I4 \* e9 L8 _% H) a1 N
   char part_name[ MAX_FSPEC_BUFSIZE ];
5 g/ G! L" m' m& t   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
% v: ^$ W" \5 g8 r4 ?   char  **feature_names;
- m1 }6 L  h4 U- p. ]* u9 b   UF_NCFEAT_t *features;
6 \- q1 P0 M" z  f& ^! w! e7 L2 k2 u4 ~
   tag_t setupTag = 0, wp_tag = 0;6 z( u9 O8 d: M% X" p2 |* n( ~
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
6 h. w5 g( I6 w) N% V% s. L8 l   logical answer;
  Q. ]! L7 v7 V1 W! {, D! A* k( f
$ j# F" }% Y- w9 ~   char **criteria_list;
2 z' |! _/ q1 p2 S; s) F   char                         **criteria_to_consider;
, N' \1 r' i; ~4 J* e1 y' G   int                           num_of_classified_sets;
5 L4 u' B1 P6 t6 ^6 K   UF_FBM_GEOM_classified_crit_t classified_sets;
% J; l8 N. {, f& S9 J. f5 c   UF_FBM_GEOM_crit_value_type_t crit_type;
, T7 \  {9 T9 m$ \2 ]/ ]+ y   double                        value;% l' G: e% Q7 ?
   UF_PART_load_status_t         load_status;7 G3 n, u* a4 L
, N7 o3 K" e+ w* N% z9 M; n
   *retcode = 0;$ y# a; |6 L8 r+ Y. o4 o

9 O9 B* k) W; k9 a" U   error_code = UF_initialize();
8 I+ H. R5 D; ]/ Z2 R   if( error_code != 0 )
2 L' R2 b6 ^8 H9 S' D  O& H' D9 ^   {/ l& D2 ^! @. ?  z1 m4 i% U  ?1 Y
      printf( "Failed to initialize uf %d\n", error_code );
9 H6 L! P# U% f- ]* X      return;6 Y/ L- U9 y6 \0 w3 Z, L) e* k
   }
. H9 e. m6 H% f8 @( Q8 e9 R9 v( o: m4 V" M& m& q
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
& g5 R  P3 M- h: k5 k                                                       &error_code );
0 w6 v2 X* y" o4 s( \" `4 Y* Y
9 K! p( _1 @. a! }" `   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, 0 q4 w% Q  ?5 ?! g% M
                                                 &error_code );
7 |* {' t2 l0 K6 X5 x
5 S' `) Q4 {: h0 n
! n4 g  Z6 S5 f' J, k   /*** This program works with the part files in the CAM samples directory  s. c$ m% O+ D1 u) G& n. G' P
        so we need to get the path of the directory and the file name
3 |7 b: w* i  H# E4 u! |   *****/& }" u- i) X& y6 \5 ~, n6 R& d' ^
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );* W7 L7 O( }* ?+ G/ |
   strcpy( part_name, env_trans );$ |6 v; e& v, a3 T( I' H! Q9 V
   strcat( part_name, "cam_holemaking_base_" ); / O7 L6 T( D2 F" \
$ _1 ~& Z' f' D9 \' }
   /*** If no part is open then open the part cam_holemaking_base_in.prt
) f, ~! E* L9 C# _        from the CAM samples directory
9 Q. [8 L3 m6 t# T" C8 c* F* C        If not check to see if the units of the open part so that we can open% j4 Q1 k$ Y6 t1 `& j% y" y" f
        the same units part + ^+ J% ^0 W+ X# t8 t+ A
   ****/5 g( ?. c5 E3 U) y- Y+ n
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 ); U' d& @- E! r& u/ P! y
   {7 A$ F* J; o9 ]) x, J0 }" ^/ T$ p
       strcat( part_name, "in.prt" );
7 v' U* f# r/ y; Q- {9 n  v   }
7 T+ |: I! ~) Q/ R9 J; r   else& k5 z: \7 J- f) ~
   {" k/ m( [7 p' l* Q7 R. L/ u! r
      UF_PART_ask_part_name( part_tag, open_part_name );- L2 v# z$ H& m% R+ D+ z  d1 ?( K
      UF_PART_ask_units( part_tag, &part_units );
7 C$ N% M7 a3 b; ^. k0 g      if( part_units == UF_PART_ENGLISH )
, C& P. i/ T1 @* h/ M         strcat( part_name, "in.prt" );
4 z8 r. w8 U3 C  P      else+ g, M' e) ?+ @5 z6 s
         strcat( part_name, "mm.prt" );# }( \9 m5 N2 ~7 T
   }
, Y# ?' G+ q# B) J$ ]. j7 Q4 Q5 r/ E2 n
   /***
/ V4 E, f; ~9 v! e: m# H0 Q" I$ ]        If the file we are trying to open is the currently open file: t5 T: s. O$ I: A; A
        then continue on: \  k: o" {: T/ D1 w0 X
   ***/
3 L% r" [) k% l7 w1 K/ e   if( strcmp( open_part_name, part_name ) != 0 )
6 A$ c1 z2 {& K+ T% K2 e9 `   {
1 b% e/ P  H, T      UF_PART_open( part_name, &part_tag, &load_status );
( O) k3 o4 V3 {% j5 J, W   }# O) g& ]6 h3 I9 j* Z1 p; [

1 M/ }# p7 R9 [- n8 S1 Q# D( y% K   error_code = UF_CAM_init_session();( ^+ \: b; s) Y1 i# o
   if( error_code != 0 )
6 F& |( u; v3 Z9 L   {7 l7 d3 W. U: j2 S8 @7 h; d
      printf( "Failed to initialize the CAM session %d\n", error_code );' O3 M1 N! w- A
      return;
5 ~+ b& v7 H2 d1 @   }, Z" K- J# {/ K) v: V- w
# N; F- f' K$ ^1 |1 ]" G: p
   UF_SETUP_ask_setup( &setupTag );/ X1 q8 P9 j( L$ V9 S2 M1 }% W6 L
   if( setupTag == 0 )
: T5 k5 N) b3 ^* n- s+ l   {
' H0 m1 M9 g# V. }9 v      return;
  ~4 t$ }* |7 M5 _4 a+ G+ {9 s   }
7 s' ~7 J2 ~4 S) h: q. M2 `; b) @8 U' M. t  Q5 m2 A7 E. g
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );/ e2 C* s  N4 F% o" c* V
   strcpy( opt_name, env_trans );
* C  P1 ~* {! I   strcat( opt_name, "hole_making.opt" );
8 l% m; P" ^2 d7 [* U2 \+ @$ Y# }% t. m! o
   UF_CAM_reinit_opt( opt_name );4 h0 x6 c/ e! o9 i/ P( |) u. {8 E# _

- @+ G1 ~+ W( R2 X9 A   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
6 l7 q0 L9 j, y& N
# l4 }6 s9 J& p   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
1 r6 |) c% i) t, z* m# c" q( h   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
0 z; D) `5 A+ `; r9 Z   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );- m, h( w+ H- l  K8 d' J2 u2 O& X
   if( answer == TRUE )
( E, V% s7 t" }- w) K% o9 S( ~      UF_NCGROUP_accept_member( wp_tag, geomTag );
; s! H4 a$ Y% i' a$ Q! I1 P   else- u( `7 ~* z. H- G
      return;
7 a! S' K& q- \! f6 _  Q: L' f
, h. {* Y' M* W" v# S. S/ D5 b   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names ); 6 N& s% y- ]5 w# z# f/ ^
) V; L8 H, ~& {- x' d& l
   if( count > 0 )
" E1 }: w7 I' H; I- |) j/ h      UF_free_string_array( count, feature_names );
9 ]" f# d' o( f8 }$ x' w
# _+ ~0 s$ @+ v2 _2 [' ?   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );1 u, }5 \3 z5 X  @( q
* A- q( q2 v8 e4 T: u. r
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );3 A. ^$ o$ g  }0 c* c7 i
3 W0 F4 s0 F; \5 Z
   if( count > 0 )
+ K* _8 p9 H7 ^* r6 C      UF_free( features );: \" f6 t' y+ b# Q2 E4 s% s5 L
   else
0 X- s" C" Y$ [& D) u' C0 G      return;
. n( o- w8 j+ x5 k/ L6 r
% |  _/ t# r8 S   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
' H7 I  l, k0 |: z9 e, {; o+ ?8 g( ~
& H0 [: w. C) f. ^   if( count == 0 )6 i0 c) C  f6 W) V5 P, P
      return;
- ^" {/ ?  H* R& g; `. ~; C" T
$ r3 ^& e) @# O9 O) s, B   strcpy( criteria_to_consider[0], criteria_list[0] );  G7 o* c5 [" t" U
* _0 f' f! X  U$ s$ x
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,7 f2 ^, H2 t6 c& L1 _+ h: I' W7 B
                                     &num_of_classified_sets,
( m5 W& S7 D, M1 B                                     &classified_sets );
0 o! p1 M& b$ g( A7 k$ @; d! b9 J& x8 R
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );" ]) r1 ^! x5 C# m1 [
  ~4 w2 `+ q7 j: c& P; V) P, H
   for( i = 1; i <= num_of_classified_sets; i++ )- `% z# m+ |; J, d3 U& d3 W$ z
   {6 w7 p+ v. r& V2 ~% Z& t- H
      switch( crit_type )
. T% |5 c" M+ w8 M      {! n! F& q0 k" D
         case UF_FBM_GEOM_crit_value_type_double:& Z- f! j1 g+ u! M! P
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
0 m3 D# K; P- n4 J+ N" Q* ?                                             criteria_list[0], * p7 b" P3 x* I; T8 t! [
                                             classified_sets, i, &value );
9 h1 T- \# _' e: M) t# _            break;
# {6 J$ G4 i8 y) \. W         default:* o8 ^0 D# j6 o% L( E0 ~- V9 Q
            break;$ l5 i7 j- x. L8 R6 o! v
      }
& k- k+ P8 k( R  S0 h$ B+ A2 x   }
3 i  S! R# N" a8 b; x6 g
& x1 `+ d6 Q# s# M) H3 |: H& ?   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );3 p+ g' R2 R# c  u0 E
( y! {& [! E) }0 z* i( E
   return;7 r/ Q' P( p7 \! [
}
- p$ Y5 E2 z2 }5 O2 _: U  E, K4 j% R2 y& r, z4 [' C! [
int ufusr_ask_unload(void)
* m9 s) S9 M& [8 t{
! g' E) u* Z- ? return (UF_UNLOAD_IMMEDIATELY);; l. a; ^3 R* B4 o; O
}+ P. E" J/ @& P% ?4 `! A
( E$ e: _( {+ n# C/ e0 }) X8 J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了