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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

+ K/ ~! t; r% r, T* v/ d2 a
9 F$ A! R8 G5 C- x! c& w
2 L# X% E. L) B6 L2 U/***************** Include Files *******************************************/" D* I/ m2 A# a+ M- e$ d4 j9 R1 d9 S
#include <stdio.h>0 Z- o3 m4 ]' L* m# O9 f& [# p7 U
#include <string.h>
  v" `, d+ f  n3 W- S' v( u
5 [: z; t" q! g; ^& C' Z$ \4 u#include <uf.h>4 h/ n/ _! B2 }  A# ?% X
#include <uf_defs.h>
0 b- D1 }  W4 N$ e7 \9 x, N#include <uf_cfi.h>1 H5 r" p( @% ~# d
#include <uf_cam.h>
6 S6 @8 k& |, w7 i4 Y* }7 ?: d4 l2 [#include <uf_ncgroup.h>( X* q1 w1 o4 N9 ?1 i" x
#include <uf_part.h>
2 v" ]# W: ~- F/ f5 J#include <uf_setup.h>) r! k1 b2 Z6 X" l! d( ^  u2 l. C
#include <uf_fbm_geom.h>8 ^/ l' L% d! E# j7 l3 |4 _. o
#include <uf_ui_param.h>, D# z4 w/ i  X! J& i" [
& n7 ]. j6 \* a" \
/****************************************************************************/
6 m, T/ K& X. o6 S
) Q) I$ C/ [$ U/ mextern DllExport void ufusr ( q; c" {$ l- x: i
(3 w! x1 H- _1 K$ b: x3 W
   char   *param,: F$ j% f( y4 u
   int    *reTCode,
. n# u- l% e) }2 ?' P) e9 d, S   int     param_len
, b2 }2 f9 \1 j/ Y5 g): j& r( D, ?8 ^" p; P, U4 C/ O
{) _& K& I3 E5 h; C' D' S# v
   int error_code = 0;
( }3 O) {+ z! C  p2 O   int i = 0, count = 0, part_units;
/ @8 ]) F* R5 _# L* D7 V+ `   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];9 u& c' o3 |( t4 a- o' a* Q2 y
   char *env_trans;
) x$ I. m- h- x* p   char opt_name[ MAX_FSPEC_BUFSIZE ];% I: _7 |. K/ `7 {* s
   char part_name[ MAX_FSPEC_BUFSIZE ];
1 ]  i& a# Q3 D' K   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";; s3 l. K: o7 ], ]4 D
   char  **feature_names;6 \* v8 o* |* y- X$ k$ A. V
   UF_NCFEAT_t *features;
  j/ H9 q7 u& N1 l% \
2 Y* ~% Z/ C+ m2 z& P. n1 W* d0 b$ \   tag_t setupTag = 0, wp_tag = 0;+ n8 X6 o$ O; ?8 Q8 F& N
   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0;
5 r& a" @3 m0 Y* {3 y( t: Z   logical answer;
2 G5 f6 Z+ G" @
. r, P- f, [( J; P% n4 Q* x   char **criteria_list;$ G/ m$ z+ F3 Z1 c$ I
   char                         **criteria_to_consider;0 ^# o; ~, |7 W, c. P7 z: c
   int                           num_of_classified_sets;9 }4 O' S- |& S5 ?
   UF_FBM_GEOM_classified_crit_t classified_sets;' L+ p, V1 z' u- m* ~2 E/ H
   UF_FBM_GEOM_crit_value_type_t crit_type;
) ]* ]6 v$ s- i/ @   double                        value;
: [2 c) [5 I- i0 B   UF_PART_load_status_t         load_status;
+ D( D; @: D6 v$ ]4 ]
# B* P" g$ y$ T  C; W8 b   *retcode = 0;- j  K. j' M  u# g7 {3 f

2 g5 e* |& L  @1 r' ?( @2 T( J   error_code = UF_initialize();
: a6 ]6 C. E7 G5 v$ o  W  r3 r   if( error_code != 0 )' z5 w& B" ?. d2 Y6 O
   {
3 p4 h$ \* V' c1 e8 {: D/ U      printf( "Failed to initialize uf %d\n", error_code );# e3 o# i* f0 U" T$ u
      return;4 @2 o5 c8 Q8 s% P. ?+ A
   }; |$ G" a& g, N' q5 g
4 E: t9 r$ R/ k' b$ ^( e' l+ j
   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
) [9 I4 V& Y5 d" q( z                                                       &error_code );5 G: g2 L: J3 ]+ C1 H, d$ o. O7 {

& h& w7 ~* U# U& b' E! J2 L7 ]( Y   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
+ M' w5 e! i+ F/ C7 A. J                                                 &error_code );; P* Z$ i" r% Z. P3 w+ U, y

5 D' h( O+ V  m4 x2 b( `
3 i! n; ^# V- e   /*** This program works with the part files in the CAM samples directory
4 G& V! r! ^- \. E$ n        so we need to get the path of the directory and the file name5 Q# ]( Q* A7 P
   *****/$ t+ ?/ R1 |5 R# X
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );' }3 o* c7 D9 _6 N& S
   strcpy( part_name, env_trans );& }7 X& r3 F) L, K, `
   strcat( part_name, "cam_holemaking_base_" );
. E: \5 x3 L; N5 u
# {6 c- k' A" V1 w) i% Q% g& p* v   /*** If no part is open then open the part cam_holemaking_base_in.prt8 T3 {  d2 i3 `  g! e9 z' X8 C% Y
        from the CAM samples directory " J* r/ M' o9 B- A
        If not check to see if the units of the open part so that we can open1 C7 V$ u$ I! |
        the same units part 8 ~# ~2 A1 V8 n0 u+ m
   ****/
2 j  K) @( E, e# j# \7 x6 F   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
$ ^; W% S7 G* R* L7 W+ l! B   {" q/ n& y9 P- V: O0 y: p9 s1 G# `
       strcat( part_name, "in.prt" ); . L" u/ U1 m0 g6 [1 ?+ I- h
   }& k5 _/ {% z" d- F; s" z9 n
   else2 k2 H5 k' `% F! ]* l
   {
; e6 F4 H6 h: t* s      UF_PART_ask_part_name( part_tag, open_part_name );3 s- V9 m0 A3 `  k
      UF_PART_ask_units( part_tag, &part_units );
9 ?4 o# S( U. E' x4 [3 ^      if( part_units == UF_PART_ENGLISH )
5 y; Y( i1 F+ J6 U1 W         strcat( part_name, "in.prt" );
, v; O  x. s; U& S      else
* O. Y4 z# N( n6 H         strcat( part_name, "mm.prt" );. S( ^0 U6 w- Y9 ?
   }
. @0 ?. B9 @) [; {- s. C
; _: h" d8 k. F   /*** 6 u- Y0 x# r2 {* M- y( p
        If the file we are trying to open is the currently open file
9 b! u0 w, _6 y% A. n        then continue on, @" z; R9 N/ v5 S6 v
   ***/
9 j3 U9 {8 ^1 e  V   if( strcmp( open_part_name, part_name ) != 0 )( I& b% s) z( l& @
   {
4 u5 N( w9 J" V' O. u' k      UF_PART_open( part_name, &part_tag, &load_status );
# I- |  a- y( `3 S   }) a, \8 Y2 K8 X

+ R% s$ M3 [" k3 H1 _$ y; Y+ ]   error_code = UF_CAM_init_session();
+ b. b4 c5 @+ N( L% u   if( error_code != 0 )
  p6 X7 X0 c" e. K8 V   {8 f% o& ~9 Y* U( ]* \9 S0 o& I5 M
      printf( "Failed to initialize the CAM session %d\n", error_code );2 s+ t' \: J* N) s/ X8 E6 x
      return;
9 V# D3 ?' ?! |& [4 [   }
: x( _8 g  o$ x! q. Q7 D* N6 ?* x
   UF_SETUP_ask_setup( &setupTag );
' J1 o; B! M, U# W: P  }( Q   if( setupTag == 0 )# ?% [" f1 t' Y% h6 d
   {
. G* h' i- B9 N$ j! S/ W- f      return;- K' a0 m) m! M% J) a. f( F# g7 l
   }
' |+ A5 L" |  @. ?
, V- x: m. W, B; @   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );
" J9 w! K+ V' U. K3 Y# ]   strcpy( opt_name, env_trans );
, [; l! Y2 ]  d# v1 L  t   strcat( opt_name, "hole_making.opt" );
' w# I& B2 g" l# W4 A, w+ H5 P( I5 ^  i* D) n2 {
   UF_CAM_reinit_opt( opt_name );
: n# Y9 W3 y7 N4 b4 Y8 _& N
; Z! u) `% C! c$ s. t" I7 e& w   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
. c1 `! K9 b! L7 [- c* P0 j- B1 o9 x! i5 L; M% k
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );  S$ j! H+ ?! W! f1 l" M
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );! D3 z6 c3 s2 H: x
   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );1 a+ I7 [: i7 ]1 B5 x
   if( answer == TRUE )1 {" Q+ u8 i9 X" V" q- g' I
      UF_NCGROUP_accept_member( wp_tag, geomTag );
1 ^  ]4 u3 h7 b1 W' M   else2 E3 n! z3 `8 }) g4 [
      return;& G2 A! g. {6 F. `5 W$ h

- T2 L$ N* A0 R0 p. \# M   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names ); , z- W% V' a' {
2 Q# v+ X. K2 V9 I- P0 I
   if( count > 0 )- Z8 P$ t1 p% Z! K) Z5 i; s
      UF_free_string_array( count, feature_names );2 C! p; g, m" V7 |' g+ V' G
8 ^) x8 \5 S1 Z5 z, y1 H
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );. y; ]8 i- f& w  s! I7 N( e# {' B+ g3 u
9 R9 q6 u8 L4 L$ a! Q9 p# |, a' i
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
/ Q* N% G6 p& g6 f/ C* F; d( D
7 p: U  J; w$ ?% z% L6 W' U1 J/ \   if( count > 0 )- P5 n8 [. i) w
      UF_free( features );- d9 ~" O4 C# c0 A' @5 }
   else
3 S8 H7 j, n2 U! X' h: |' H      return;4 ?6 X- T8 D. T8 V

4 \- i9 I& I* j) @, o   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );9 z; G8 J  M& d. Q9 Q3 I3 V' b
& n$ q/ S7 T6 \5 g+ e9 Q5 P; g) i# [" ~
   if( count == 0 )
- q' r% x0 U: c+ N: A) ~      return;
% c& z' g" y+ [" p3 w- f
! C# @8 f& Z! k; y- K   strcpy( criteria_to_consider[0], criteria_list[0] );; P1 ?1 `& a1 g& \. X: h% v
% L  T! Q/ C& m! ^2 E) x; N
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,' A: A2 g3 r8 f& |- R* t, k( ]- X
                                     &num_of_classified_sets,4 y+ [+ U) g( x+ l1 J1 E
                                     &classified_sets );
9 {8 ^4 p3 v/ z( b( n) |- m& v8 B
7 }* T: T0 m* ^; N' i& g& [   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );* `$ J$ \! Z+ t3 A, W
# H, A$ _8 K, U
   for( i = 1; i <= num_of_classified_sets; i++ )
  `3 y7 L0 R# W, t' d   {
# P3 W1 S3 W( B- C/ \& {1 h      switch( crit_type )
  Y5 T2 P: w! o# b      {* K: O2 U; E. K" u8 g% l7 T
         case UF_FBM_GEOM_crit_value_type_double:( k  t- Q' J' K- P: H/ ]. I7 D
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, * w% t5 R( r+ p2 I+ G- A
                                             criteria_list[0],
. w& a4 R# x3 g( ~                                             classified_sets, i, &value );
6 z& w+ g* r2 ~! @/ U            break;
* N( K* a- L& j         default:
! s; n" v' Z2 x9 R' ^+ c$ c+ P            break;
2 H. N1 B- z; B6 C$ Z  v      }
5 z* X1 s8 d$ [   }1 ^, {" C2 k# B8 J. u: ?$ w0 ]6 C

8 K  i- M9 y( v9 D3 h   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );! n8 R! s0 f, ^8 ?3 X4 |- g
0 v# s% n2 V$ W) _: n8 U! Q3 w: |; i
   return;8 Z/ X: b* \' Q7 d9 H9 X9 S
}7 U5 ]" g0 J7 f7 b# A3 n. F
3 r7 F7 h/ I! R! r& R" e
int ufusr_ask_unload(void)
0 R3 x$ ~( F+ c/ ?$ S{; q1 N1 r  I: ~! T/ H
return (UF_UNLOAD_IMMEDIATELY);
1 }; R+ K# s9 f  m}# y+ n  T$ b, q4 c1 A6 e. ^+ Y

0 O$ M: l3 ~/ n+ k! H
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了