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

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

[复制链接]

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

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

admin 楼主

2015-3-17 20:41:02

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

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

x
+ a, [+ d' X' O+ N+ C

( d, r6 t8 P8 x- N9 [" L  g* X) m/ M! c6 L6 @1 R. i' b
/***************** Include Files *******************************************/8 i/ A3 L$ D! A
#include <stdio.h>
$ W3 H/ y" ^& G8 E6 G5 {0 ^- ~, }- K#include <string.h>
! l* S( j* L% C- g7 Q+ q
# a' u$ P, {6 ?; o#include <uf.h>6 a. K5 q% Y# F
#include <uf_defs.h>+ b  N& }9 d" F2 i# m
#include <uf_cfi.h>
) S7 |: e! i6 E3 v* i6 S. j4 D1 S#include <uf_cam.h>  O( {- K' T  b) w- z5 L
#include <uf_ncgroup.h>
! m. y% ?& ]3 N, m9 m5 y% Q#include <uf_part.h>
- T6 R+ o+ ~' }, U' y  @#include <uf_setup.h>
" R. _, L' N( q" E- R$ W5 F#include <uf_fbm_geom.h>4 Q3 ^0 W6 |, B: i- q
#include <uf_ui_param.h>4 W) q2 R2 {& E4 B0 `) ~

: u$ v4 \( ~& g3 L/****************************************************************************/
' ~- D; S/ l' v2 `% t# c: ^+ M$ ~5 V; O
extern DllExport void ufusr
* g  \* V5 ]! Z9 ^- {- x# D0 y# ~; V(. Z1 d( g5 O" i% e3 L  N+ ?
   char   *param,
! [7 F) T8 B/ b' b2 l+ u   int    *reTCode,; p. [1 M+ ]) o$ ]( g: T
   int     param_len# Y3 L" L- B# [7 c, w( `0 }" T: l
)
' I0 _: O7 w1 i- B{
1 K2 }2 ~" Z' w5 l  f+ q% Q   int error_code = 0;
6 {3 p! U( e- ~* r   int i = 0, count = 0, part_units;
, Y7 T4 `9 a, y3 l+ D+ {   char reason[UF_NCGROUP_MAX_REASON_BUFSIZE];
5 c1 W# c  {8 g2 X/ T6 i& l6 F   char *env_trans; ! ?( I7 j" p' W  X% s! b- K" j
   char opt_name[ MAX_FSPEC_BUFSIZE ];
9 a- |/ c* _9 P; O   char part_name[ MAX_FSPEC_BUFSIZE ];
% E& ]! ~$ t. h9 q0 n/ Y+ w   char open_part_name[ MAX_FSPEC_BUFSIZE ] = "";
% K  S& `& g" m4 P% O5 c' T1 |   char  **feature_names;* Y. K3 i/ {: g" r2 ~
   UF_NCFEAT_t *features;
4 {5 g3 q$ M, O5 @; G! h1 J8 H7 Y, w8 _9 G( j
   tag_t setupTag = 0, wp_tag = 0;
& X/ t8 l# [( F0 C) d; W   tag_t part_tag = 0, geomTag = 0, geomRootTag = 0; ( ^! x% C" S" q. a
   logical answer;0 M5 c' P4 i$ J* R  p: H1 a
- C3 e8 v! b' J8 h
   char **criteria_list;
0 X8 z0 n- s/ X* J% g   char                         **criteria_to_consider;" |( Q. t8 L0 i. V
   int                           num_of_classified_sets;* C5 ~. z0 F  _; r0 E3 S( `8 P' l
   UF_FBM_GEOM_classified_crit_t classified_sets;! _5 t: A( s) L  [* `
   UF_FBM_GEOM_crit_value_type_t crit_type;
' S2 W8 z2 g" U5 I   double                        value;7 ?3 K3 S* u+ Z% I7 W
   UF_PART_load_status_t         load_status;
8 x2 V/ O3 N7 F* t. H! K  y1 t: ]5 q
   *retcode = 0;
$ O/ O' g$ D- a5 C5 e- ?2 I8 \* \& G$ V7 j: {! I
   error_code = UF_initialize();. e, d/ Z+ r0 F* j5 ~) s* u
   if( error_code != 0 )2 y3 q1 x7 v4 Y+ w8 r  s* X
   {
8 N; G  g$ Z  J  I' c7 I5 Y6 z* i      printf( "Failed to initialize uf %d\n", error_code );! z$ j$ r3 f% X7 o! @
      return;
9 g3 ^) x6 [4 P% w: v* Z   }
. ]  B5 L, z0 [; B) H# i
) h# T8 K$ E) A" i$ q   criteria_to_consider = (char **)UF_allocate_memory( sizeof( char* ),
1 l, ?. Q3 \5 E) c$ m, C1 ]                                                       &error_code );! Y( A" G. K: q! V+ U* E% v6 n

% d& z4 N* z- P7 C7 M6 y4 e   criteria_to_consider[0] = (char *)UF_allocate_memory( sizeof( char ) * 132,
9 F0 u; r5 ]1 X/ n                                                 &error_code );
; M3 A& Y0 K! S
; p# s( c9 \/ _
5 H( T; s4 }: t. r, p8 ]! {5 x# i' Q   /*** This program works with the part files in the CAM samples directory0 z* W2 M- C6 \9 I! W
        so we need to get the path of the directory and the file name9 _. G! h9 s$ |8 D. k' V
   *****/( R; @  O9 {, S. D; P1 z5 E( |$ e
   UF_translate_variable( "UGII_CAM_SAMPLES_DIR", &env_trans );" u  i/ a8 f8 t; x2 _) @
   strcpy( part_name, env_trans );
' u* [4 i3 \0 e8 E+ x  r$ H   strcat( part_name, "cam_holemaking_base_" ); 0 w' ?2 y  X7 J/ Z6 T" S* [
+ _& n2 p2 D& U% t
   /*** If no part is open then open the part cam_holemaking_base_in.prt; U$ [2 M! N4 H0 b/ x; s6 G9 k
        from the CAM samples directory " N" w# }6 I# q2 b
        If not check to see if the units of the open part so that we can open0 u  n4 ~' @$ b, i6 {  Q2 M
        the same units part
0 _, _) X* H( j  h. a5 j0 K   ****/9 F% e7 `" {. v; U9 J7 }: R
   if( ( part_tag = UF_PART_ask_display_part() ) == 0 )  v- z" H0 I6 ~
   {9 U1 F& F3 ~1 s9 Y
       strcat( part_name, "in.prt" );
. y" \9 T0 S/ I' K   }
6 X& B5 G5 D' E/ H3 p- q! X7 `6 W: y   else3 ?; B2 {% B: J$ C% G0 Q) k
   {+ K  L0 ~6 \% |) h
      UF_PART_ask_part_name( part_tag, open_part_name );
& c% F$ F+ c) E: L) n+ T8 C6 b      UF_PART_ask_units( part_tag, &part_units );' F, f# l- s8 j; \5 {
      if( part_units == UF_PART_ENGLISH )4 y4 l. e( K+ d9 |
         strcat( part_name, "in.prt" );
! n- K2 Y  Q" D, t      else
! R5 [, `# W, |+ }$ Q, D, b         strcat( part_name, "mm.prt" );
  x0 Y8 G2 M& f1 W   }: k, }: `9 n) J# {2 G* E
: x( B! C8 `4 h3 n
   /*** % V, }; v/ k, k$ J: l
        If the file we are trying to open is the currently open file
; j' I- _/ I, ?0 I0 \- x        then continue on$ t' I6 A- z4 e! W5 c2 u6 a
   ***/( ?& v5 g9 E3 V/ I* f
   if( strcmp( open_part_name, part_name ) != 0 )
' Z0 S& a1 M) E& Y   {
" ?* G* l- P3 e& G      UF_PART_open( part_name, &part_tag, &load_status );
* G3 Q: n- t* {: K2 w4 l   }
" N2 i+ V9 `' n- e- h# x* @6 }9 `3 J0 p- S  ?
   error_code = UF_CAM_init_session();/ V* ]. b6 q. T' T. m) x
   if( error_code != 0 )5 k3 H( u! E; |( A  P
   {
( O7 a5 f( d( i: o8 s      printf( "Failed to initialize the CAM session %d\n", error_code );
, J& @! Y- T+ y* n, R      return;) n' h0 {7 ?/ W3 V' b2 q! C+ `
   }
" [5 `  ?3 I$ R4 }8 R' U4 o; w. ?- A
   UF_SETUP_ask_setup( &setupTag );
7 E- P) ]: @/ Q2 q& ?) J   if( setupTag == 0 )# ]" V9 X; a) R/ f
   {
* v: d' q0 s' p+ a      return;6 `) n% T. A0 B/ Y
   }
, v2 W% w9 {0 P+ J3 Y3 K6 T" Y, L) k
   UF_translate_variable( "UGII_CAM_TEMPLATE_SET_DIR", &env_trans );/ ]( N% J/ h/ Q8 E1 j/ l& K' a
   strcpy( opt_name, env_trans );
0 p. @1 y, m% F( B; [   strcat( opt_name, "hole_making.opt" );9 _6 h3 L) @4 q& K& X

: s7 C9 {, {  H! \* x   UF_CAM_reinit_opt( opt_name );6 v) Y$ V( \' h0 G( F7 S

' a9 F0 d! x  F9 g2 [5 U2 u4 M   UF_NCGEOM_create( "hole_making", "fbm_geom", &geomTag );
6 i" l0 f, ^- u7 L& w$ q  o' Q7 ~$ D" r) d
   UF_SETUP_ask_geom_root( setupTag, &geomRootTag );
; d6 Z: `2 [4 S& N   UF_NCGROUP_ask_object_of_name( geomRootTag, "WORKPIECE",&wp_tag );
' ^! y+ b' {5 g1 O   UF_NCGROUP_can_accept_member( wp_tag, geomTag, &answer, reason );8 o" A% U5 }; V' L$ Q
   if( answer == TRUE )
, A1 Z+ p  g0 T* D' I% p# w0 L      UF_NCGROUP_accept_member( wp_tag, geomTag );7 n! V1 J- a2 D0 v0 Y- L8 ?/ ~' z
   else
2 e( V  o1 Y; }% w      return;
* P5 V; n+ {, B% K- R( v# x  X- o0 X; q: f; n( I# V4 ~- Y4 t3 v
   UF_FBM_GEOM_ask_list_of_feature_names( geomTag, &count, &feature_names );
4 k% _7 ]' w! d) g6 n1 s5 B
" o9 k' G# `! N5 h6 z; g   if( count > 0 )/ {) ~: f0 g: U# g9 N" q2 y+ _4 e# G; D
      UF_free_string_array( count, feature_names );! B4 h8 s; G# f6 l* e

, d+ l# l3 g3 i5 E- E) u   UF_FBM_GEOM_set_feature_name( geomTag, "SIMPLE_HOLE" );
! I6 j; q2 R" r$ R0 N8 u5 j5 A! P+ }0 w
   UF_FBM_GEOM_ask_features( geomTag, &count, &features );
1 k  E7 h: V% z% X4 p
2 w  `. w. `* r: ~2 |4 R' Y3 v   if( count > 0 )/ a& ^( ]7 J7 S+ @8 L8 \& e; p
      UF_free( features );4 B& I" B+ m% Z/ x
   else
6 a! E; G: B1 i# r" M5 H5 M      return;( u$ p+ }( [4 b! l

; y' l- b& \7 N# w0 }( R+ G: d" Z   UF_FBM_GEOM_ask_available_criteria(  geomTag, &count, &criteria_list );! J. y9 }8 b% `# B& X4 ]
* T  d) f) y+ ]  B* b. S
   if( count == 0 )  u0 W( V5 x3 L4 ^
      return;
" |  m9 Q+ G& v& K. n1 N; R
) L! v# s! B# a$ U   strcpy( criteria_to_consider[0], criteria_list[0] );% @& @; t9 B" a, _# P( T; P
2 R" C: s# h  k$ h5 f
   UF_FBM_GEOM_classify_by_criteria( geomTag, 1, criteria_to_consider,
. @1 ~5 W- v7 w9 Q) r                                     &num_of_classified_sets,5 B  h5 V& X3 a# u9 L6 Y* m8 ~, E& I
                                     &classified_sets );. R& Q! N6 P5 E

. v7 J" @; u+ x2 m3 q& p  {& m3 b   UF_FBM_GEOM_ask_type_of_criterion( geomTag, criteria_list[0], &crit_type );
2 K4 z/ g- \0 L2 A+ z% ^
: Z4 U+ y! _$ x: T, Q5 |   for( i = 1; i <= num_of_classified_sets; i++ )
4 h" E  Q- Y% l6 x   {2 R; i3 u+ ~5 u* X2 V; L* S
      switch( crit_type )
5 |) ]/ q6 `' ?, F      {' Y, [) A3 i" i1 p2 M- y
         case UF_FBM_GEOM_crit_value_type_double:0 F; @  P1 o2 S1 K: V5 w0 e
            UF_FBM_GEOM_ask_double_value_of_classified_crit( geomTag, " l- C" l9 c, v6 ?
                                             criteria_list[0], ' o2 l1 j. ^, B6 O% t$ H
                                             classified_sets, i, &value );) b$ v% D8 j) y3 U; a( b4 J, M
            break;! J0 F+ x" t/ z( H+ i3 g
         default:3 @* }3 C8 K  e% T5 u
            break;. b) u& l3 w2 S1 ~
      }; O1 Y- k' B  Z3 M. X
   }$ z# b. [4 S  B- d5 F

# L) U) P' K0 R   UF_FBM_GEOM_set_classified_features( geomTag, classified_sets, 1 );
5 r% V5 ^/ E, k; B& J9 f( G
( \' ~9 [' Y* u   return;! y. M) q, M3 }2 y' [" T5 f+ I
}, S1 F. |" H9 {$ L# h0 b
* [& i0 d. b- R5 Y
int ufusr_ask_unload(void)
# e6 s$ Y. @  b% E{3 N( N/ e6 ~- a& ~7 T/ J" v- ^& [
return (UF_UNLOAD_IMMEDIATELY);* T8 A8 n5 M) G6 x* A
}
4 }. \( ?% b5 A6 j
! T  h9 V! f% |6 R# s  S
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了