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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x

$ C2 b$ `, Z7 d- v: n1 ?. e
( ^8 N- X( J( `& y" G2 ?+ B2 ?* d2 x& z; `6 a
/***************** Include Files *******************************************/
5 {. r; i6 U3 W! J& M#include <stdio.h>- E4 Z+ C9 p9 x7 W" ~: W
#include <string.h>
8 v3 o6 `8 M" y+ j; Q& I, E+ |
5 U: C) ~* f- n( W#include <uf.h># a$ z$ P% |$ |" l7 j4 e( h
#include <uf_defs.h>2 ^' v/ ~! z3 [% e
#include <uf_cfi.h>
( d' _# V8 }3 c8 d6 ~#include <uf_cam.h>! X# f8 o0 O  g9 M
#include <uf_ncgroup.h>5 d# u! @- N( Z# m7 s$ R
#include <uf_part.h>' {; C& o' e% Y5 i! Z8 j
#include <uf_setup.h>4 T1 Y( y6 B6 h  D8 V8 s
#include <uf_fbm_geom.h>+ l! _8 \' h& k2 l9 q8 c3 F
#include <uf_ui_param.h>' l5 t: U4 V$ g/ H* B

) v  \+ ]6 o" v% Q; @$ q/ E5 S/****************************************************************************/1 l7 u$ y: U. _5 X4 S  W! g  D

' a3 \) t: s3 v" M5 Aextern DllExport void ufusr
5 s! [, }3 I+ L1 x7 |& }% t(
1 m5 s2 c( c$ _( J. N% s# B   char   *param,& Y9 V2 J( C" s+ e6 u' A% ^9 J% K
   int    *reTCode,
6 x7 ^7 q% o& ?/ H% u0 I   int     param_len) `: Q. e5 {* j# u; X9 v1 d& B
)
% o+ H( ?5 b% m" ?4 A/ N{
' x5 j6 B/ [* m: v; J1 j   int error_code = 0;8 N' b/ _4 n6 b- k
   int i = 0, count = 0, part_units;
6 G/ ]' A+ e# F) S; k* }   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];8 X+ W: u% ]8 G9 Z
   char *env_trans;
4 W" I5 e3 C7 f4 R  O6 }   char opt_name[ MAX_FSPEC_BUFSIZE ];0 z! x9 Z+ t$ d: P! M1 H
   char part_name[ MAX_FSPEC_BUFSIZE ];% R; c5 ?+ O( T, }# b0 J3 |
   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";  E- ^1 \9 u& i5 _1 Y; z
   char  **feature_names;8 X( D: Z4 d3 [
   UF_NCFEAT_t *features;3 E# a0 Q5 u& _% L% r1 U( _

( U4 T# b  j* L( N) O  S   tag_t setupTag = 0, wp_tag = 0;
# T5 `) B1 q) h( I3 S: \' q   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; 2 L- w( w9 H% g# S) v# z
   logical answer;& B- X; J+ c5 A- V2 N4 h

4 ~5 m# h7 G& G   char **criteria_list;
/ j7 o5 L+ ^9 y5 b# R2 J4 v   char                         **criteria_to_consider;. n  E3 i& ~* F0 J5 u' \
   int                           num_of_classified_sets;
  A; T# M5 t- ~5 S3 l6 \   UF_FBM_GEOM_classified_crit_t classified_sets;& i) x7 w0 x$ F; I$ x" l5 {) T
   UF_FBM_GEOM_crit_value_type_t crit_type;
; L3 G0 `$ F6 D7 K) [6 V   double                        value;
: s4 c5 T  t) T) F5 \   UF_PART_load_status_t         load_status;, j  p  o3 W  y' i" V+ K

( m& c( V  t4 V3 Q+ ^5 ]   *retcode = 0;
- W  y" P, f- P+ I. O4 \9 r5 c' A- j$ C! g6 A7 V
   error_code = UF_initialize();
$ |( @* [4 _+ @% v* N6 R: ]   if( error_code != 0 )
. r( Y( l- T# G! d   {3 R; O7 h) O, [
      printf( "Failed to initialize uf %d\n", error_code );5 m0 |9 X  ~3 i; J' \# y
      return;
3 `6 }, V$ ?) u* N- w$ d" f   }7 a$ j9 i( _- V; E) q' \' u0 h8 z

- K+ z( n9 W) n; a4 \' ^   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ), " w! c7 O1 z# M* \
                                                       &error_code );2 h" x$ v! ^: C& u$ [/ B
2 S' ]  D2 I0 l/ g
   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132, * }* O4 @  y/ K: q4 E
                                                 &error_code );
. y- N! |7 x% r5 @# [% Y
$ T4 @* A% f7 Z/ \8 q% Q. K, x  \9 i; ~* n& S
   /*** This program works with the part files in the CAM samples directory5 u( B7 b! u6 L4 \: l" b8 U# `$ j
        so we need to get the path of the directory and the file name! A: Q! Q8 b1 p+ @# I, g5 A6 \
   *****/
+ i+ V& y0 @! c3 s! u" b7 g   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );% [5 Y( \$ m5 u: f7 v: V
   strcpy( part_name, env_trans );6 Q" O0 t1 \  e; n) q4 i
   strcat( part_name, "cam_holemaking_base_" ); 1 i% ~( O, ]' H; M- |3 K" o

; E: C! X1 }" H5 Q/ G: z# g" [   /*** If no part is open then open the part cam_holemaking_base_in.prt1 p1 A7 c8 o4 |6 U2 K5 x
        from the CAM samples directory ' I( v; A) D7 _( c- @
        If not check to see if the units of the open part so that we can open
7 \* o6 d# G' ~% o. {6 Y9 c        the same units part
7 g) @% [7 i% h0 n. [   ****/  a! G% m! [2 Q6 I  a
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )
# q; g( J' T$ g. x# n% Q. {' e   {
2 E0 a& q! M* U7 B3 E+ y# I) Y3 k# Z3 ~       strcat( part_name, "in.prt" );
. X' I/ w. k. ^, w   }
. e6 f- l6 o3 g   else
& h9 J+ H2 @; U3 w8 }   {
  a% b9 D% n: |* c3 T9 O" o      UF_PART_ask_part_name( part_tag, open_part_name );
; J$ g, l2 a+ J; u  F+ ?) I      UF_PART_ask_units( part_tag, &part_units );* _$ C+ k: E7 H
      if( part_units == UF_PART_ENGLISH )1 K+ l7 G  B( G0 S1 n
         strcat( part_name, "in.prt" ); & I. N& q: F! K- Y' ?! t% M* }
      else9 \9 P( l5 l7 T# D* u" u. y0 Z
         strcat( part_name, "mm.prt" );& N3 Z* ~. \& y1 i* Z' w
   }
, A! E% [9 z. l, t3 X! c6 Q4 b
: d* R# w) x9 A7 B+ F& |   /***
# l" j" f$ s, ?' R$ V; K6 M' C6 m        If the file we are trying to open is the currently open file
* l9 ?* J1 K1 z        then continue on
' _4 S. R0 |; r0 N   ***/
5 K" B5 s) I- T8 w' }$ m( @. `$ W1 w   if( strcmp( open_part_name, part_name ) != 0 )
4 y+ {  j# w6 w( h   {
- }( F6 j3 \9 H9 H# e      UF_PART_open( part_name, &part_tag, &load_status );: z! V9 L) \6 \, [" d8 F
   }
' j0 ]: n7 [# E+ A
+ J. |! y2 o2 c) V   error_code = UF_CAM_init_session();' _# ?1 T# m  _$ ?
   if( error_code != 0 )* C: Q8 B( g* Y/ q3 `6 ^
   {7 L: B5 [1 \1 J9 C) E% u! g4 D
      printf( "Failed to initialize the CAM session %d\n", error_code );' k3 F3 g, j! Q+ ?% R
      return;7 N6 W0 v6 m+ Z; C5 |
   }- K& R, W3 Q8 p4 z  E5 r
5 d, K3 P8 E* U* u! ^( V3 g- s& M
   UF_SETUP_ask_setup( &setupTag );
; R% d- P, D& S2 Z, h: a+ G! U   if( setupTag == 0 )# E) ]1 E% ]: @/ P4 Q& D& x9 f
   {$ `) d" A0 B9 Z- J9 W% w3 X
      return;' O" r  F" l& R
   }0 h* t0 Y3 _' Y2 X! f- z9 B6 j

' q/ w) P- V1 r7 _% P3 M1 `   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );$ Y3 v: x- v" E; \9 b3 h/ t3 n
   strcpy( opt_name, env_trans );
) @, |: T9 `: _. G' E) P   strcat( opt_name, "hole_making.opt" );
, R( }" t9 h, i; `- ]. o8 G. j8 X
   UF_CAM_reinit_opt( opt_name );
& Y1 {! ~! c$ q: o; p0 n
9 c3 `  v( R- j2 p   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );% R+ T# J2 C  x: U2 T' b. w

) r+ @/ u) v; D$ c   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );2 ~+ T9 s. B7 m+ O% ~, z$ W4 A
   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
2 Q0 ~& h1 w$ f: K$ {& R   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );9 {8 F$ r  u7 l% h! v# X+ Q
   if( answer == TRUE )" ]" t( ~2 Q( N$ Z' h9 m
      UF_NCGROUP_accept_member( wp_tag, geomTag );
4 L4 l( \- w; O- e* D   else* t& N! a  R+ b6 t. n
      return;+ W% V: Z" d9 z- I
, m: @" s; y$ T+ R6 g
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names ); 4 r! c: [) t+ h' `; }% M0 O

) a/ j4 N8 K' T" m! a   if( count > 0 )# J" H! A2 D/ d2 |1 {
      UF_free_string_array( count, feature_names );. ?$ n( V5 O) q$ K, Z5 `! Z9 A5 [
3 x* z0 n7 e2 c7 r
   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
$ y; V; R; `) W3 _: Y( ^1 O
. R# k; m. {/ e   UF_FBM_GEOM_ask_features( geomTag, &count, &features );. G/ u+ v0 G6 N8 R# \. U

2 o  ~) v' r( g9 }, ?: c  I   if( count > 0 )  ?- T9 Q4 {( V0 H2 R
      UF_free( features );
( O4 X# y6 {* W7 s9 Y   else
2 d6 D3 E" R, M* z' b- B' v2 [% D; C, L      return;
& e' u- L, B1 f& ?  J2 E6 Z, \5 d; t! u5 J
   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );
3 \) L1 I$ Y# u0 H; S" Z" i( {
; l7 F' w& j7 x: N- m( ~" Z# `   if( count == 0 )
; R) K) a! H9 j# P( A8 X: [# N      return;
* B- ^3 c. Y7 s" c3 c
& q9 f- V# ~: n2 w5 X. b1 H   strcpy( criteria_to_consider[0], criteria_list[0] );
- E+ C) C4 }4 b. U& L0 a
' D9 J  j3 c( B! ]$ F/ k   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,* U+ `2 e) e& e4 x' s
                                     &num_of_classified_sets,$ }0 i1 q1 E% U/ N9 C  ?! z
                                     &classified_sets );
) L  S; A+ n% }3 g% z# @- `3 T; d) n% {
   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );
3 W8 C% n& c) S$ b. t5 U+ D& X4 H1 X  W4 i% D. w+ S5 A4 ^  h
   for( i = 1; i <= num_of_classified_sets; i++ )' o3 D; d- L# _2 N5 V! Y# e+ L
   {; v; Q! e0 K: P
      switch( crit_type )
: L; A0 Y& j3 f8 ]      {1 G( K% p0 O) g0 R& Z  J
         case UF_FBM_GEOM_crit_value_type_double:# l7 }8 J3 i. i6 e) ?# k
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag,
$ d) D* ]6 T( T; T" n                                             criteria_list[0],
) f2 Y8 D  z, v, e  ~                                             classified_sets, i, &value );
; b" B# a1 d' t+ G% N) Y            break;+ z; D9 _  d/ r) u. E% z. X4 Y( N
         default:' o" ]$ ~- X: z5 {' ^
            break;( N* G: z8 a& S1 B- _2 \
      }
# X3 `; _( z+ d   }
) C7 A- D) k& V. ^; L3 P3 K+ z3 s" }* p; F
   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
* n/ Z9 x7 [# H5 M8 n
, C# m* }( U+ ?* Y6 U9 T) Y/ L   return;
5 x' m1 L& Y9 I4 b# v}
# a" f, `3 L1 m: b4 I' \/ x) M& r6 B
& k' n5 A) h+ A2 u% [( Vint ufusr_ask_unload(void)
6 G* ^, \9 @4 I6 N) v+ ~& v{
4 j0 X+ X; M. h. n7 u; Q return (UF_UNLOAD_IMMEDIATELY);
% [9 ?8 n3 U# h4 v7 h+ m}4 Z; E1 S/ `2 g) L7 ~6 g3 H
0 w. l1 n6 k* x/ `
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了