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

[二次开发源码] UG二次开发源码分享:UG NX CAM加工开发简单实例

  [复制链接]

2017-12-11 15:49:09 8507 5

admin 发表于 2014-6-7 10:50:25 |阅读模式

admin 楼主

2014-6-7 10:50:25

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

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

x

! C' ?8 Y: b3 ^) r4 z
  D6 [& o1 K- k1 d& I! M3 r/ K; x4 J- ?, c4 {, z& F. f$ v  Z1 {/ x
. V+ _1 m* Q: U! K! v* }/ o

#include <stdlib.h>
1 b3 S7 R5 b0 l) G+ G, ^#include <stdio.h>

#include <uf.h>
: ?6 `5 X: l2 w) V- i; M#include <uf_object_types.h>, B/ M# t% M+ T, q7 U( h6 N
#include <uf_ui.h>5 b3 _( M0 E/ B' y
#include <uf_disp.h>& ~% w8 G: H5 v! q4 F
#include <uf_obj.h>" r" U0 e. d" u4 Q- v. v# R+ P0 z* v% ]
#include <uf_cam.h>6 u1 S) o9 y" D# `
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
( }$ z7 K3 g# i- K" G6 R6 H#define EXIT_SUCCESS 0

/*#define DEBUG*/

static char *title1 = "Select an API routine...";

static int geoption;; m; m% T! B( [2 s* T
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何* v0 l+ w& Q  e' D/ [
static char menu3[][38] = { "1) Part Geometry",
  @& M- y) G$ N# u9 j$ T"2) Blank Geometry",
6 I, X* d7 i0 P7 {8 W7 _"3) Drive Geometry",* w5 b- h4 q; i
"4) Cut Area Geometry",
& j& s/ ?* ~$ ]1 Y"5) Trim Geometry",3 F' b% Z3 q5 }; t& U& b4 ~
"6) Selection Complete"};

static int init_proc(UF_UI_selection_p_t select, void *user_data);//初始化程序

static void init_camgeom_app_data(UF_CAMGEOM_app_data_p_t app_data);

int ufd_camgeom_ugroup( tag_t objTag, int obj_count )

{' z) K' z* }  c( p+ A
UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];' r, U2 }  p. T3 w6 ]8 ]8 z6 r3 v; z
tag_t *objects, entity_list[MAX_CAMGEOM];
9 O& q. F! M, D" s, I% Yint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
! b8 Y) M" g. C! rchar *cue = "Identify Geometry - Wait for the Filter!";
) D9 h2 k. z+ e5 rchar errorstrg[133];
$ f, }5 j* y8 e+ z4 sint response, irc;8 N7 O- R6 K5 m! o
tag_t eid, view;6 V) m" b" a) U4 ^( u4 n. |
double cursor[3];

#ifdef DEBUG
7 i! V: u' v: g+ h8 [printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
/ n0 \% P! D3 v#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????
: D5 w  H0 O% G4 Q1 @7 b' L  q{+ \1 R) @% H* ?$ O
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

geoption = uc1603(title3, 1, menu3, 6);

if (geoption == 1 || geoption == 2 || geoption == 10 )  h: L7 O1 a+ r0 C5 a( M
{# F: ?0 y, j2 G
break;
% t& h8 i* u; g}" e# F+ k9 z3 ?% J
#ifdef DEBUG( s4 w. L; G$ p6 P; E- I* R
printf("\n Geometry option returns %d\n", geoption);+ A/ Q9 l4 P- H- u# R
#endif
$ n0 C6 d5 a  W! I/* Allow the user to select faces or bodies. 选取面和实体*/

/* Pass in this function the object to be assigned geometry 通过函数,对象被分配到几何体 */

if (obj_count > 0 ): d! Q4 o/ a2 @- D9 i
{7 |! _" F  ^! M2 \
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
* y" u- c9 x. T6 m* GUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
% b( j/ ]! t$ F( ]7 l9 y! H! a; W) s&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义9 G* a* p) v& n5 V- Y; i
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED), Q, e# C- w1 P" L5 P8 N* Z
{
1 S" n( ~4 g2 Qentity_list[entity_count] = eid;
; x- G1 R+ f$ r0 i- W" k#ifdef DEBUG
0 y+ m1 ]$ Y7 y2 Z; iprintf(" EID number returns %d\n", eid );
7 K2 }; F( F0 Y0 Z#endif

/* Allocate the memory for the application data of an item. 为当前的应用数据分配内存*/

app_data_list[entity_count] = (UF_CAMGEOM_app_data_p_t)UF_allocate_memory(sizeof(UF_CAMGEOM_app_data_t),6 d  X7 k" M. J9 S- |
&err_code);

/* Initialize the application data.初始化应用数据 */

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
9 [  @1 F8 y9 l1 s# r/ P}
: t) [' P4 Q- S% Pelse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
' B9 F9 U: A; N/ p# o1 Z: m{
  N( F3 r6 }  E/* Geometry selection is finished.几何体选取完成 */
4 |+ y' `, R, B! Hbreak;  y5 a) H6 t1 ]1 R- d0 W
}" F9 T9 q1 g: l3 W- g
}
2 S  K( y& q4 g& D5 e! l$ y8 a% S' g#ifdef DEBUG
2 ]1 y. [  b$ v% P. O7 Qprintf(" Entity count this selection is %d\n",entity_count);
) ~/ L( }( W' N) K# w#endif

if (entity_count > 0)  Y: ~8 F2 N5 Q8 M9 Q
{
" ^! A( n: d8 f" K- A* E1 w/ s% x/* UF_CAMGEOM_item_t *items;+ ~% M" ~: n3 `& Q5 _. N0 T* Q4 P. M
int item_count;*/

for( i = 0; i < obj_count; i++ )
: C4 n6 ?+ Y- R$ c- V{5 B; s8 O, w. C
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
  _' A6 B0 i: E3 l! }: o2 x! g/ \7 Y9 gtype == UF_machining_geometry_grp_type)

#ifdef DEBUG8 Q/ R8 x# R4 g# k9 Y
printf("\n Current entity count is %d", entity_count);# ]/ {; o% r$ J0 L
printf("\n Current object count is %d", obj_count);
0 v9 U. _5 G: ?printf("\n Geometry option is %d \n", geoption );
+ q3 Q- @, G, ^) a: G8 }#endif

/* Above prints to help in debugging if "DEBUG" defined. */

{1 X$ l$ ^8 G1 ?4 ?) |$ I
swiTCh (geoption)
  b/ U$ ]" i3 u9 d* L# |/ Z, \{) j- Y3 U, B1 {; y# L
case 1:
% i& O# ?1 D% ]6 Y  J1 w! X2 scase 2:2 ?" [5 f* m1 C& F* L
case 3:
: M% X7 O0 f' w$ Qcase 4:
& H, N; P7 c; D+ B/ Icase 5: /* Part Geometry 部件几何体*/  u  `- U9 m% Z4 ~8 H  f
{
" V0 t: ^( N1 s; Y. Q#ifdef DEBUG
% a- m4 L7 B$ Zprintf("\n Type returned is %d", type);
3 B( J. @& G; q+ p7 H" H+ J! R2 Fprintf("\n Subtype returned is %d", subtype);
6 [* {5 g. n  |8 C) W, g#endif
2 m& ~3 S& U  |2 V{
. o5 |' a5 @( [% y" M5 ?irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,% S( Q  R. u  N8 ~6 P5 \5 |+ E
entity_list, app_data_list );
' K7 \! @; j+ R; o- f2 W0 u8 _//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。" H' r! g8 v8 b2 q+ J+ n
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
6 ?& w  n9 u2 F( y5 v0 |}3 {1 C3 e8 X) \9 T$ o4 M
if ( irc != 0 )& g2 _3 L9 f8 i9 p: @
{
. N3 Z9 o, Q! s" o- ^UF_get_fail_message( irc, errorstrg );" g+ z' {" Q; x3 q$ i
printf("\n The return code is %d\n", irc);0 a0 x; y6 @$ Q$ m- o
printf("\n Error code translates to %s\n", errorstrg);
3 q- v9 G' R6 j* T: a9 zreturn objTag;3 ]! x) j* c7 a1 B, ]3 S$ R1 c
}
  J, V/ Y/ e- u6 M" ybreak;
1 v  Q2 Z" |, {3 B}

case 6: /* Blank Geometry 空白几何体*/1 b1 q7 M2 Z5 y
{0 i3 Z  }8 e# ]
#ifdef DEBUG, M# o( @& Y, T
printf("\n Type returned is %d", type);
8 N, Q' |1 N+ }! x- Jprintf("\n Subtype returned is %d", subtype);# ^8 B  U" T1 i
#endif
! q) f: `5 J& c% R# _$ l{3 d& O6 q3 E5 ?+ `9 W
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,5 f- z) A9 X; p( T
entity_list, app_data_list );$ W, {% V0 H1 A1 @2 c: w& J% @
}
: r3 A. x* k8 |# V/ x( jif ( irc != 0 )
* q. P  v. p! p; V& k) f- \{/ W$ a* I9 N+ f# l; Q3 N/ G
UF_get_fail_message( irc, errorstrg );
2 q: t" i- S5 g* U0 D$ Dprintf("\n The return code is %d\n", irc);
2 P  `: O: s/ i8 h5 L: T* \printf("\n Error code translates to %s\n", errorstrg);6 J( v: \; p2 b
return objTag;
- u: N, I0 ]* m  }7 Z  A* \1 Z+ C9 k}
5 J1 N" u9 X  E1 \9 t7 _break;

}

case 7: /* Check Geometry 检查几何体 驱动*/! M. n) F% A5 a( b+ h$ B
{! P( G& E, s! z- ~& M/ r
#ifdef DEBUG
4 g9 L/ ?6 R, v* \4 s8 Qprintf("\n Type returned is %d", type);
' j+ T( {6 Q3 M7 G# l; L! C* ]printf("\n Subtype returned is %d", subtype);
% Y9 g# u; x! I# T#endif
. K( H5 L4 Q: @9 y3 Q{
2 S# I& {6 J" \  a9 U- M$ \irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
8 m; M4 l/ s- G5 [6 {3 ?7 Lentity_list,app_data_list);" E# m$ Z" T1 \8 n7 W9 o/ X" _! z0 U
}' I" r/ p( B8 C! f4 ?% m8 @
if ( irc != 0 )' E  E1 f8 W( z1 n' A3 j1 _
{8 G+ T: \. m$ ]" ~- }  e2 t
UF_get_fail_message( irc, errorstrg );2 J, E  Y+ o  c, B/ q
printf("\n The return code is %d\n", irc);0 T, w( t+ E# c: r8 b
printf("\n Error code translates to %s\n", errorstrg);
3 D4 k( w4 B( e, ?" Areturn objTag;4 ^, N: P" A+ P* Z
}1 Q9 t* i' B" D
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
, K; V3 E! y0 w{2 K/ {# T8 `5 R/ i, f3 U
#ifdef DEBUG
: t; y& b4 t. q: bprintf("\n Type returned is %d", type);6 Y$ i7 k+ b& a$ D1 i
printf("\n Subtype returned is %d", subtype);
) m: P+ M5 j' a4 ~7 F& r#endif
' P1 l  E* v( |) q% t{( k: @1 Z9 b& v2 L* c) S
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,5 P" A9 t* m- N
entity_list, app_data_list );3 O; z& W9 G; B' {9 I! l0 S
}
! \" S  `+ }$ t6 ?if ( irc != 0 )
4 V/ g" t( R$ o, F  X{
. k, H# Z: K/ [/ J$ T9 QUF_get_fail_message( irc, errorstrg );
3 W! N! H- O7 a' ]$ X/ p9 Fprintf("\n The return code is %d\n", irc);4 w5 V2 q* }4 W: |6 b/ V3 \
printf("\n Error code translates to %s\n", errorstrg);0 j0 e4 {/ {: O" v0 i
return objTag;
: p, A  \) P9 D$ C* N0 O}' S, I& _1 B: P( ^, z/ A
break;
  e( K' e/ h' n$ E( N8 H}& y7 k3 S4 U* ^& l- N- l) C# d
case 9: /* Trim Geometry 修剪几何体 */$ S: ~# W8 M6 R% E& M2 E* \
{
1 I9 q$ Y2 K' S7 [" Fprintf("This case not implemented.\n");
2 R2 h* O- i9 xbreak;
$ z; s. N; G* ^' O}
; r0 |/ a; f" f" l- g: C! j! z) s/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/
1 q: ]. L% q( ^4 m  \8 s6 E) U{) F) {/ y5 b, K8 m2 b4 |
break;4 U% @: v" D9 M0 J
}
% z5 Z0 H4 ~# `; S# D! |+ i}7 A! ]) _$ y. w$ V5 Z; f/ u
}. z! J/ Z3 e. X% W; ?; A
}6 y9 I; e' B4 A8 M) U1 q# r' k
}
! v5 G3 R9 I5 M" ]9 M7 [* G}
' D  f3 ]  ^4 k}. x, J& C. p- y% T7 I) G
/* Free the Allocated Memory. 释放内存*/
6 F7 b1 k, N6 z9 K) d8 m: Qfor (i=0; i<entity_count; i++)- L. Z- C0 E. p0 C
{/ E) N3 m* o/ O
UF_free (app_data_list);4 B2 F- e! ?: [$ Y7 C% H& y
}

/* UF_free (objects);*/

return(0);
5 P8 X# p0 b! [) L1 z}
  I# R; r$ g) }' V/* Selection initialization procedure 选择初始化程序*/  S9 y, E" K/ x& T
static int init_proc
3 m4 _# Z. l2 Z% Y; L(
9 `, t6 p# Y- @' X2 I4 B" M$ hUF_UI_selection_p_t select,//指针 pointer# B  ]2 j, [  B! \" f8 |" `" M
void* user_data
& \( s( C* y. `* K  T+ M& ~)/ Y6 ?0 K; Y7 e5 D, D. O" B
{
3 D0 l- w9 \1 C; }+ Oint num_triples = 3;; w% F; P# \4 q1 k  j
//最终指定的特征类型
/ d6 |- m* e2 p% OUF_UI_mask_t mask_triples[] = {8 U0 r6 V& j: ]! _& Z) i) l
UF_line_type, 0, 0,
! ~( y- j# y8 z+ r4 x4 ?  l. ZUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,3 P3 E7 p/ m+ Y7 u/ z
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

/* Enable Faces and Solid Bodies允许选取面和实体 */

if((UF_UI_set_sel_mask(select,, u6 M. v. l* y/ F. F( u* ~+ }
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
& S. R' Q: j1 W9 y$ Xnum_triples, mask_triples)) == 0)//3倍 3*3=9

{
. l/ g/ V& q2 Z/ Creturn (UF_UI_SEL_SUCCESS);
$ P+ Z+ [9 R& _/ q$ Z}
, U2 V" G# G" K" i! r# K: c% _) i! ~+ Celse
6 P8 I; e: ?( }* a# o, F{
" d% }( v, w" T2 }8 q9 m( preturn (UF_UI_SEL_FAILURE);
5 l9 T; o$ X6 E7 ~; _& |}# y3 A6 `7 H- q" \5 M+ H8 R
}2 }. a  d) g4 I
static void init_camgeom_app_data
* {) ^- c. l) \  R0 @# d(* k' _6 z5 h9 D3 [
UF_CAMGEOM_app_data_p_t app_data# j9 d9 [3 m: r
)
6 N- q, E% d% ^5 V: i{
$ }" o7 W( |. d! r' [if (app_data)2 p6 d& A( e3 D" w/ ^8 `$ u7 Q& S
{
/ _$ x. H3 I, U4 C0 i; f9 H/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */$ p( w) d: ~0 _; e
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */: n+ g3 I4 [7 A. W
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */. \) A1 J- B1 x: Z, I& x
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
) ~+ R. h4 L0 ~- O- `: q+ papp_data->has_offset = 0; /* Used 1 - Else 0 */
  |$ s% u, K$ ~app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */. s3 _" f* X1 K( x# |5 |
app_data->stock = 0.033 ;
  g1 R' z) E$ u* K% T# ^! Rapp_data->cut_stock[0] = 0.2 ;
5 n% U8 P& E* Z. G1 Vapp_data->cut_stock[1] = 0.1 ;
4 v! C: b2 a0 Tapp_data->cut_stock[2] = 0.5 ;, Q1 A* L$ j6 `7 D6 s0 f: C% v% x
app_data->tolerances[0] = 0.003 ;7 ^% s& ~* B! f% A* y4 |) Q% y
app_data->tolerances[1] = 0.003 ;, q& k. O/ e' u3 F
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
8 `3 A( R) O2 |. N' V) }app_data->feedrate_value = 33.0 ;2 K. V$ C4 L, [9 {, o
app_data->offset = 0.055 ;9 s( p/ z+ v. X0 ?! g$ V- i  T( O4 t
app_data->avoidance_type = UF_CAM_avoidance_type_warning;2 x. ]% u- s6 e9 c
}
) G7 M6 p( Q3 L+ [7 z' h! @}


" m- C- W1 e+ V% _! K  b) O
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复5

wskgumnm 发表于 2014-8-5 00:57:44 PLM之家手机频道

wskgumnm 沙发

2014-8-5 00:57:44

很好好好学习
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

Jocelyn 发表于 2017-7-18 21:43:08

Jocelyn 板凳

2017-7-18 21:43:08

UF_CAMGEOM_append_items
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

Jocelyn 发表于 2017-7-18 21:44:34

Jocelyn 地板

2017-7-18 21:44:34

UF_CAMGEOM_append_items我是用C#写的,用这个函数总是报‘Method not found’错误。
5 Y2 t* f: b, _; Q/ \有了解可能的原因的吗?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

至简天成 发表于 2017-12-11 15:36:10

至简天成 5#

2017-12-11 15:36:10

不错不错,正需要的东西
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

至简天成 发表于 2017-12-11 15:49:09

至简天成 6#

2017-12-11 15:49:09

: L4 u' Z# j) E+ H; l
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了