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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

- J7 K9 S& j, M
+ o; n( s, ~( x" b4 D  w, K! a
9 ~' e4 @* D* B( Q1 a/***************** Include Files *******************************************/# A2 I: V  Q9 |' n
#include <stdio.h>8 F' O2 n5 o8 |  w, H6 U
#include <string.h>0 \/ v9 ~3 ^+ C8 U/ ?
2 L0 r, t  W  E0 \- p
#include <uf.h>: S8 `2 B# A7 h! V1 q
#include <uf_defs.h>
# i1 a; m, q4 T; Q! b3 \6 W#include <uf_cfi.h>
+ Q7 B" F9 x# a8 o. w7 \- `#include <uf_cam.h>4 ]: {& q  A) ?
#include <uf_ncgroup.h>
% m6 E4 R8 U/ T5 [5 T. ]#include <uf_part.h>5 U8 H% ]4 P- {# I
#include <uf_setup.h>
" M6 ]. K8 r: [' o5 s#include <uf_fbm_geom.h>$ M% K1 r( }2 v7 n) j# w& Q; |3 n
#include <uf_ui_param.h>
2 y2 h% s% T$ m! F3 s6 [& D% M) g' b+ G2 i4 m+ z
/****************************************************************************/
. ^* n) N4 R% I
+ G# a& \# ]$ e+ b% e% D$ cextern DllExport void ufusr 8 B( F% W) R. T  J- @
(% P9 k7 b# f' ~
   char   *param,# ~- h( W/ o3 y9 E2 {
   int    *reTCode,
3 a  M( o$ Y5 y   int     param_len) d; X  x6 j: _; D$ i. p
)
* U, k3 i: [6 u- b& h& `{
3 G8 Y& B; Y* ~5 B   int error_code = 0;7 o; x' u) O0 k; L$ G6 |( q
   int i = 0, count = 0, part_units;
$ X- v" P7 p8 ?7 j$ C7 h1 c$ u   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
. g+ f" y* i8 D( k8 r   char *env_trans; 4 G" r2 ^0 j) H+ V2 K2 e
   char opt_name[ MAX_FSPEC_BUFSIZE ];5 m# [7 k& C% p4 p- U
   char part_name[ MAX_FSPEC_BUFSIZE ];( ]+ G! L4 }' j+ t  l6 R; H  a
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";8 ^( r; E; }- w! s0 p+ W, b
   char  **feature_names;
% Y1 Y" b6 {4 N/ l   UF_NCFEAT_t *features;; k. M- p. W$ d( y, U

$ G8 B; B: c' L/ c   tag_t setupTag = 0, wp_tag = 0;
" X; c6 g' `. A+ N* ^0 I# y   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
% u; @' y# s8 P( S6 o   logical answer;
2 V# X0 Z# J/ `0 `/ T* l% L# h% i) z0 H9 w! `
   char **criteria_list;  @) ^* j& p3 c; u( d
   char                         **criteria_to_consider;
9 W/ u' j* G  Y) z   int                           num_of_classified_sets;# [5 Z4 X& w8 J6 P: F
   UF_FBM_GEOM_classified_crit_t classified_sets;( I) K" ?( ]2 M5 C! f
   UF_FBM_GEOM_crit_value_type_t crit_type;0 M; S" N9 u8 ?6 {3 x( O
   double                        value;
# q0 i) l/ ^+ S% U; J- Z- `   UF_PART_load_status_t         load_status;
6 b$ J; W9 ~8 V# w6 H+ {
( c0 h; ~/ o( [2 Q; Q5 A; `3 _   *retcode = 0;
. P1 O6 N4 g$ n* _3 E" K8 z7 J' p2 d0 [4 A/ N; Z  s
   error_code = UF_initialize();, S+ T! [( M0 A: l5 U5 {* S
   if( error_code != 0 )
& o& h. _2 ?" _% Y. K4 E/ w   {2 ]& a0 |! l. d3 a' Q  W2 a# w' Q
      printf( "Failed to initialize uf %d\n", error_code );
! w- W1 p  F+ v  y      return;
7 x9 [2 [+ F! S7 _( H; F   }2 W! r6 C* l8 S. y/ N+ E: \2 B: ^

, l# p& Q0 U& V" L   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
. X' _# D$ L5 A                                                       &error_code );8 e: s! \: J) m' s% U: t& C2 c: b
- s& I8 z3 C: s* ]/ C
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, 8 w( o) K9 Q; M: y1 s9 w
                                                 &error_code );
* p/ X* J2 W; E9 A+ {, b# B2 J) H$ H0 i
) t% |2 L  N* r" B* ^  K# s4 U
   /*** This program works with the part files in the CAM samples directory" S/ a4 B& k0 H$ V$ N
        so we need to get the path of the directory and the file name7 H/ ~4 s0 E" M. ~1 ^
   *****/, X, `& I3 D$ _# u' s* C
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );- T8 n, {7 F) M% H7 k
   strcpy( part_name, env_trans );
4 F# d( O6 A5 s/ X+ g7 z! b' ?9 O   strcat( part_name, "cam_holemaking_base_" ); 9 n+ C" P# c8 {( ~9 M: ~) H

, W- i4 K- J9 O   /*** If no part is open then open the part cam_holemaking_base_in.prt
; `+ H" z$ h: \  Q        from the CAM samples directory   z  A6 z+ H, J9 a
        If not check to see if the units of the open part so that we can open+ C4 X4 B! h4 g# a+ I! _7 U
        the same units part * B! U. L1 W' T( Z$ `4 P4 b! b
   ****/, P# S* A: [& E3 ^+ g
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )) o9 }6 F: G& P" u, c8 Q
   {
0 u6 I+ o1 l7 m/ L1 |% Q; {/ }6 L       strcat( part_name, "in.prt" ); 9 m1 t: ^: V% N' X) G6 |) o
   }+ g1 p$ r& ^& ]4 @4 _  K% Y
   else% q) Y' ^( \* y4 \( P
   {
- Z' O4 f2 g9 J- E' \# Y      UF_PART_ask_part_name( part_tag, open_part_name );7 U3 |& G( ]( L" R
      UF_PART_ask_units( part_tag, &part_units );
% r: h7 w4 t8 C      if( part_units == UF_PART_ENGLISH )
& ?" {1 ?% M" y         strcat( part_name, "in.prt" );
* Y4 o+ K3 f& |! o& n# x0 Z      else
3 F1 Z" O3 O* G5 O         strcat( part_name, "mm.prt" );+ o3 y3 x8 ]+ o" z' k
   }
0 H% P+ Y. u5 Q- _' C; I* z
8 F" a2 X1 L( p8 ]   /*** / E- _, [' M' {3 E
        If the file we are trying to open is the currently open file" D3 j% c% a: g6 U. O; q, r) d
        then continue on
1 H  p" s* o  x2 g- D) |; t7 N& l   ***/
9 `% r) F" A& M8 `  c( ?   if( strcmp( open_part_name, part_name ) != 0 )- b. e5 ~; I" Y" P
   {
1 _3 r* [) r% O  @' H" }$ @5 r2 R. H' r      UF_PART_open( part_name, &part_tag, &load_status );5 X, f5 i# K0 {9 f
   }$ U' d% N. j' c

6 Y. V' }, h: y' L   error_code = UF_CAM_init_session();  s; H6 _# s8 x0 o) l3 I: E
   if( error_code != 0 )
. }6 x$ w- k2 t3 O/ ^% A   {
) V8 T* t8 C' c/ F2 K  U/ O      printf( "Failed to initialize the CAM session %d\n", error_code );
6 g" U* g4 Y5 Q; V% h8 f, [7 F      return;4 P$ g- `/ [5 l
   }" p+ u2 `/ H$ a" V5 c, \1 s

) s6 j2 m$ a; o% Y9 ]! O   UF_SETUP_ask_setup( &setupTag );# h, ^& B: W# `4 `
   if( setupTag == 0 )
. [0 C( t3 d# s5 l: F   {- ]) p1 `1 r/ X- d9 L
      return;
" \( ]9 r% X% Y  x+ l% w5 P  e% J   }
: i' y/ t3 W2 V( V
8 _% i/ r5 R; c8 k1 s* [0 E4 K5 M   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
9 T& n$ y) f. V' X   strcpy( opt_name, env_trans );! {* N/ t1 z7 Q9 `; U! \
   strcat( opt_name, "hole_making.opt" );; n0 _) K( v. b

$ [: h1 O% h9 g' y   UF_CAM_reinit_opt( opt_name );" C1 w* V; m- M2 G: }

/ T+ e  ~9 f1 y' D; y2 m   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );9 {* u% q  o/ i4 _) g
# s$ o: m; c- K3 G1 z" O, u" v
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
1 t, P. h4 l2 J, y% a   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
5 `; a4 c7 }( Y- W   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );
- x( }4 }6 C3 }   if( answer == TRUE )
8 F$ t$ i& r$ x      UF_NCGROUP_accept_member( wp_tag, geomTag );
& o" }+ m0 }/ E1 o" {, a% @2 A   else* T1 j' V0 f! t! R" S0 C
      return;
" z. Z3 N$ p( z7 J; A6 ]( I- v/ L7 g8 k$ w4 Q4 _. L# M' D  i8 I
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names ); + k) r* r, ^9 ^
- o% l& \- c2 J$ z: S% x2 ~
   if( count > 0 )( |0 l4 H/ ]7 e/ x
      UF_free_string_array( count, feature_names );4 u. l0 s( M4 \6 S/ R/ c9 b
: `7 l" D* H' Z4 H! r/ a
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
& w1 E6 C" ~) q' A- ~3 g4 i8 {# ?' I
' ]  ~! U" G* w) G1 O   UF_FBM_GEOM_ask_features( geomTag, &count, &features );2 r  ?! {1 a/ @1 n; r- P( R
- e$ Z! k: p% R# B9 e* z, s8 d
   if( count > 0 )# R' o: i" `% K# M8 w5 i) R
      UF_free( features );5 G) F- T; ^1 v9 Q6 H' o4 k
   else+ v6 B8 q& ^- w
      return;
- A/ g3 B( Z/ `* P8 w9 C  _+ T; U$ d" |4 [  D" p2 w
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );) @! _7 H' N3 Q$ t& s

' H- q' O: @% j+ L7 ~   if( count == 0 )
6 b2 I& Z4 C6 ]- c  g      return;: {# K- y1 j# _) f& x
: Y) O- X# G6 b; u6 e
   strcpy( criteria_to_consider[0], criteria_list[0] );
# I7 I1 m( N+ T/ [% e5 c$ t
# }$ _7 V/ ?* _6 w8 O' k: W   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,, L9 |/ e2 F8 G( w% X$ C* F% U
                                     &num_of_classified_sets,
' U  O5 o1 L+ F0 E7 s" g                                     &classified_sets );; h* `( g  c: ^7 C
+ c' k0 @$ o# c. R' o, O# k5 R
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );. K7 V9 y" t/ X6 I; S* h, ?# h7 }

4 V  E( M0 Y$ y   for( i = 1; i <= num_of_classified_sets; i++ )
$ L% E( e  N2 T( ]! @   {& M  N5 h1 H% v" j  l' ]
      switch( crit_type )# U. Y8 {8 ?  Y7 N# P4 x" ~
      {
3 y# \$ q$ N  }( ~' ]3 @         case UF_FBM_GEOM_crit_value_type_double:, ^* F0 _. @' d, q
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, 8 s/ d7 l* [0 J7 K/ }$ f3 l  Y
                                             criteria_list[0], ' m6 j7 b# H4 S
                                             classified_sets, i, &value );
5 F1 n0 C. v% R; N" e% T            break;
+ w/ A0 b5 m1 B* r& z         default:; D  K1 _4 M! X( p0 C$ }
            break;
8 L, m1 w7 ?9 ]8 i; n      }& j* f9 T" x( c# ?3 }! J
   }
4 [" G" f) j7 ~# D+ q6 k! D* y5 L$ v6 h: K9 h, C
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );  W" S4 q; j" @; F* g$ ]+ F# c- m

% d) l5 Y6 L" O+ O: x1 x3 _, o4 H8 `   return;) I" Z, c: @0 \# `
}/ ?) j& P0 e/ u( b, ], X( Z% f
* G+ B& ^& y! H4 N7 E
int ufusr_ask_unload(void)5 A) N! H4 T: L) s# C1 e( ]+ _
{4 g$ A1 q- _0 D9 u; h
return (UF_UNLOAD_IMMEDIATELY);1 W6 d! J7 T9 t" N
}
- t- f8 B4 A) i! d9 B+ F# Z1 W* W4 s- W6 c
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了