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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2014-6-7 10:50:25 | 显示全部楼层 |阅读模式

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

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

x

6 E- S* @( U' ]" y  c, m3 P# F% d: [' q; Q( x5 {
! \; J8 L- S& d; E* `6 H5 C( F
! E1 H5 o6 r: p6 G. G, V, I4 J

#include <stdlib.h>
; e- h' q' K- n1 }+ p#include <stdio.h>

#include <uf.h>; O3 k6 ?. s! [! b7 Z, S7 C
#include <uf_object_types.h>/ X- L* {+ T( l7 ~
#include <uf_ui.h>
8 S4 I8 \7 E4 I4 Q: I) K#include <uf_disp.h>
3 s+ o5 p' z! w/ C. l/ Q#include <uf_obj.h>
% Z* L9 q0 ^: V3 E; |# B) \# |#include <uf_cam.h>
1 f3 b0 a0 v1 n5 y, Z+ S2 I6 O) S#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20/ P9 q) [+ e, F) s8 ]9 e
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;( g! Z+ E1 w/ a2 r7 K& m6 D. H
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何0 n# M) V: ]  L( j7 K) b
static char menu3[][38] = { "1) Part Geometry",
, P9 ^& S' o  J' @"2) Blank Geometry",
: P* C6 r# ^+ m- B# f/ V0 p* X"3) Drive Geometry",8 {4 t% C  j1 I/ l: y$ o
"4) Cut Area Geometry",; J; L8 h; }- D
"5) Trim Geometry",
$ O$ r5 u" x+ {$ l* p: E# @* T"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 )

{
2 B$ F2 \1 [" Y3 E( ~1 xUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];+ j0 N2 r' h5 d
tag_t *objects, entity_list[MAX_CAMGEOM];
, S! W& h" `% B! j8 Lint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";8 p! ^3 i5 N' Y3 ]
char *cue = "Identify Geometry - Wait for the Filter!";
' e2 ]0 @: c6 G2 x+ l3 S' nchar errorstrg[133];* G# r* p$ N2 L
int response, irc;2 _& f& a6 W+ c" V7 \" v
tag_t eid, view;
, }$ u6 N; x5 W% c9 J2 l  bdouble cursor[3];

#ifdef DEBUG
1 h$ G! H$ [: U: j* \printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );. w" H( R. T$ @1 [) s
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????# s) K/ N8 a9 N" W$ s: ~, S3 B
{
- U, ?" ]; K* l# _0 W/ T% ~/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
3 M6 n0 a7 @1 w3 G{" F/ W  x2 L* x! y
break;
+ m/ F  H+ c; B& r9 m* w4 F/ q}
" l8 Z. F1 m7 @: z/ Y/ @9 I# J#ifdef DEBUG
6 q& ^, N2 E% o3 N- sprintf("\n Geometry option returns %d\n", geoption);) d# i; b- K7 A4 i+ ^
#endif
1 ?9 Z1 u( {0 J/ S( m, F/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )6 C2 i) {. F, L% A
{8 j' ]* b; [$ Q  [; {5 Q
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,% g' H5 U6 T7 m4 h  t' i
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
$ N  i# P  T  ?&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义# F* i& V: P; h" Y& U* k3 x
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
! Z$ I/ {, R( T. ]% D{! u: u2 ~" J: Q0 X- p* e1 d5 r
entity_list[entity_count] = eid;6 K2 `+ e1 U1 i& f# f
#ifdef DEBUG
: {4 Y. w" |7 _: L4 T1 J, D& v- iprintf(" EID number returns %d\n", eid );
! u+ k1 q- _  v% q( G) X% R#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),
4 i8 g% V+ E% _, m&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
% l2 o" m1 G# h+ O. G& {}
! L6 s/ H3 K2 n- Z) h; J6 Felse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )" ?5 `" d# ^( a/ @5 Q" l: E
{
3 x8 X+ H; x3 l$ Y" Z/* Geometry selection is finished.几何体选取完成 */' V8 o- n' @5 M8 t: D) ]$ K, t! {
break;. v' j# ]$ b8 C/ g$ m8 }7 i4 G4 S( t
}- I: \8 s. R, R
}# a7 J& q8 h" T. @9 s# s
#ifdef DEBUG+ l8 V( T% n& h6 h+ K1 L( X" W
printf(" Entity count this selection is %d\n",entity_count);% e8 d7 R, o. g
#endif

if (entity_count > 0)
4 x6 t1 ]/ w9 \( s% s# |5 `0 M* o{' V0 D! @+ S4 S5 _0 S3 {6 \$ [# n: \
/* UF_CAMGEOM_item_t *items;
8 y6 v4 G; K2 X  G" Kint item_count;*/

for( i = 0; i < obj_count; i++ )
# r7 Z, `+ p, M. t" d# @6 O{) u& P1 R. [$ Y4 L* [' ~3 s
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
7 p$ }# X8 C  R! \! U+ Gtype == UF_machining_geometry_grp_type)

#ifdef DEBUG
  g1 v, J7 ?9 {& Qprintf("\n Current entity count is %d", entity_count);
& n- a  v! U+ s% ~printf("\n Current object count is %d", obj_count);) h  \& v/ |0 N: U5 C" [
printf("\n Geometry option is %d \n", geoption );
9 _; |$ c4 [% K* Q: c#endif

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

{' |+ _& ]7 ?5 F! [# _: X
swiTCh (geoption)' z& D9 k; h2 O5 x
{
& V/ h7 p' d, K2 R5 Ccase 1:* p2 b5 D/ j: a' k8 ]
case 2:
4 g% h3 T+ G( n) s/ t7 Wcase 3:
0 [! O" N# Y( icase 4:, l0 U0 y% Q' T6 N  e1 H1 x% ]. |
case 5: /* Part Geometry 部件几何体*/
. ?- j3 F; [) ]{
  i) W* ^' n0 O% v+ q$ E$ m' f#ifdef DEBUG& O2 B/ ~5 [2 n4 k- G
printf("\n Type returned is %d", type);
$ P1 s, f6 R8 P7 L5 ^printf("\n Subtype returned is %d", subtype);% {( E# l7 c# C
#endif/ U: d# |5 e. p
{
' U- t- W" w7 x* f- c# xirc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
2 @6 D) v+ h6 l1 `: z) B( ientity_list, app_data_list );
& A4 ?& @& q/ g( Z6 {1 \4 d$ k//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。4 L$ E4 z" }# y' ~9 J! F
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。4 n' l0 @% u- u' \( B2 w2 k
}, C- L1 L# J# O  r
if ( irc != 0 )
5 c/ H4 R. X% F4 a4 U{
) u9 g( X) F8 V% E8 IUF_get_fail_message( irc, errorstrg );
+ U- E4 ]+ f% oprintf("\n The return code is %d\n", irc);
% r0 X; k4 m/ c- l: u, Iprintf("\n Error code translates to %s\n", errorstrg);$ x+ V* P- S) i
return objTag;: A  x; }/ ?/ P  o
}/ o& ^; n5 ~! r, ~- W7 A
break;
. Z' S) E% f( `* ^, g}

case 6: /* Blank Geometry 空白几何体*/
9 I0 }1 b  c* [{
( J, ?+ i) \9 [$ Q% K#ifdef DEBUG
, Z$ q% D1 ~0 A% S0 s) O6 Z0 L0 y; ?printf("\n Type returned is %d", type);
* K# q( o" R. G. l" v# wprintf("\n Subtype returned is %d", subtype);5 P6 G: ]' q; l2 f
#endif' ^% z/ e  i$ t9 P3 }7 q
{& _; W* z" E. U
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,& ]5 |1 N1 j, ~. q1 e  m7 f
entity_list, app_data_list );
' X' U' Q  ]' Y, ^7 R8 N}
: h3 O( f- r$ ^: y/ C; Z. Gif ( irc != 0 )( X2 W$ m6 Q" x  u% z: ~2 P
{/ C, w- Z, U, y6 I' E' H) ?
UF_get_fail_message( irc, errorstrg );
7 _# l6 b& G3 b' v! Hprintf("\n The return code is %d\n", irc);) D( E( k- @& p5 _. S* w
printf("\n Error code translates to %s\n", errorstrg);
6 g3 C) k; R3 G" z9 r* V" `return objTag;
) G, Z' G+ Y1 t) t! a}
$ H; y: u$ v/ V* K( xbreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/3 w2 {0 G; n! k
{% g4 p9 K6 o; w( m6 b
#ifdef DEBUG: p1 v; p- D% S- p- e' Z
printf("\n Type returned is %d", type);
9 ]3 V& p9 N) y% P  \. N" q' g' pprintf("\n Subtype returned is %d", subtype);; n( ~0 R: q( G/ n9 J2 y
#endif* b  d8 A3 Z7 B/ q' f3 y0 e8 L$ ]
{
& {# }$ I, C+ K9 I& `( Rirc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,+ W5 r8 o$ W& t) `" ?; j, t
entity_list,app_data_list);
& v  Z9 G+ E) ?0 S2 H% d- ^}! H/ m" E6 t* b
if ( irc != 0 )
# a! V. H4 c& C{
& x# L% b3 p# D3 @" k+ ?2 IUF_get_fail_message( irc, errorstrg );
+ G  {- E$ B" A: E2 R5 |printf("\n The return code is %d\n", irc);* W" ?2 f/ R1 v9 b6 y
printf("\n Error code translates to %s\n", errorstrg);
6 v0 Y' H0 k$ p9 g* c9 ]return objTag;% T: q7 A; t* T% U& d1 N
}: {, C2 P0 a5 i
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
! [( [: S9 [2 U, o( v" k# C{
+ ^  I$ L8 X$ M8 |, n: S( d& Z#ifdef DEBUG
! K5 k4 ?8 V( P: ~printf("\n Type returned is %d", type);" ~- G8 X2 f  {. Z8 O
printf("\n Subtype returned is %d", subtype);
/ Y) e, C- c1 a8 d" B! @. p" _#endif
" \: |. C; X5 A7 E8 A9 ]: R{
1 r! W' W4 R, I: Zirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,: U+ Y& P) G1 @
entity_list, app_data_list );) u5 N1 K* x: z6 X
}
, N1 s# @0 \. w! gif ( irc != 0 )1 V7 W2 q6 o+ B% B
{
1 |5 f! P! d' A. V% FUF_get_fail_message( irc, errorstrg );" q/ ^5 p' O# P- b8 v7 F! \
printf("\n The return code is %d\n", irc);4 @& T2 g0 m9 I8 z
printf("\n Error code translates to %s\n", errorstrg);
; ?& T* n9 t6 ]& Breturn objTag;
% N: m0 J$ x' {1 O/ t% _; |+ c( L}
. p7 a# _0 y7 Q5 `0 e$ p# S0 J8 o" hbreak;/ [- ?9 w! F9 J# p) g. D7 |- e
}
+ h( V, t+ N) J- Z* W+ Qcase 9: /* Trim Geometry 修剪几何体 */0 a! b( M7 R. q5 O% b
{# P) i* R7 \* C; O3 s
printf("This case not implemented.\n");
1 `1 K" l0 _0 j! |* Q6 Lbreak;) e$ J8 v6 ]7 H# w8 Z
}5 Q, Q$ N4 U( R" I3 ]
/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/, Z$ o; E1 |  G, F. {$ e, x
{
7 k1 O2 k: K: L) @0 D  r+ ^break;
' A: ~! i( P3 s* q& L5 p}
& ~- }+ E  x3 p7 D6 @}
: \8 Y; ~+ g' p. ]}
& s; j3 G7 k) p* m}
2 U" |: }2 k6 ]( y* b. O}
( A4 @1 G$ q- J}$ |! S- V& I9 r: z
}. i8 L4 W3 [6 W
/* Free the Allocated Memory. 释放内存*/2 m5 m& J) J7 b+ }# f( U
for (i=0; i<entity_count; i++), v+ i+ h# Z4 k- i
{
6 H8 _$ [" _  G7 X: L. EUF_free (app_data_list);# f) d$ B, b9 }) s( W0 `
}

/* UF_free (objects);*/

return(0);
9 l) T$ H' x. k" @7 p}
& ~$ f# E' z+ c3 e+ n* Y7 S3 c/* Selection initialization procedure 选择初始化程序*/
* D1 G5 R& p& b' I' rstatic int init_proc
) b" g$ G2 ]# x! }% d(# F$ i, O6 I2 H$ c, e' t
UF_UI_selection_p_t select,//指针 pointer
8 \/ s/ {! T& s. l: evoid* user_data! ?, B' K2 [8 D; L
)- o2 I) H0 a. u+ C% ]; C! `
{
7 ^: X2 O/ G2 jint num_triples = 3;
! X6 M/ P1 E+ g  O" S% K5 j//最终指定的特征类型
$ k% |5 s! D$ }UF_UI_mask_t mask_triples[] = {
$ W( ?7 i; u0 I3 z3 EUF_line_type, 0, 0,
# ]5 D4 S- |! u! R8 A# g( EUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
: T6 [- ?7 F  p! Z9 x3 M- _& ?+ hUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
  Z; H2 e5 d0 T% N2 l3 |. I. [UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
: e  L* s; O' l9 Pnum_triples, mask_triples)) == 0)//3倍 3*3=9

{
# f/ J5 n, i0 e8 |3 X8 I5 treturn (UF_UI_SEL_SUCCESS);4 J( ?  S* t3 x8 V! N. _
}& Q$ t4 h) i( r( k, C
else
7 y' y8 a- {8 e0 v: r% d{
; V4 m6 W1 q& N, j  |5 q* Mreturn (UF_UI_SEL_FAILURE);  U$ T  H6 _( k9 E, d! `& \% v
}
: ]: m1 @$ _/ z}6 ^% `& h( Z- q. B& D4 U
static void init_camgeom_app_data
% C8 y9 q1 P' I# q5 ^2 v! h(+ K9 D6 i* @9 Y2 _9 V
UF_CAMGEOM_app_data_p_t app_data3 k0 z( k8 q  r" e+ }% p) \! `2 Z
)
$ W1 f# t1 P& W2 M{& A' r) B+ U: K
if (app_data)  ~4 R9 a  G; P6 x9 h' s
{. Z( j% |/ Y' ^# _
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */4 D( G; d' Y7 ?: U* p
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
. s8 H# u2 D8 n/ |. wapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */  j- M7 E- {6 J, r% O( y$ F
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
) q* Y7 \0 b4 f- n2 }app_data->has_offset = 0; /* Used 1 - Else 0 */% e' L- j6 o. m/ z
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
( i0 U/ N: z6 f7 Y% A; Japp_data->stock = 0.033 ;0 V* {, Z& s/ N! n# }( Z2 _
app_data->cut_stock[0] = 0.2 ;3 i: m3 R' g9 P. o# ~/ ~9 a9 \
app_data->cut_stock[1] = 0.1 ;
+ m8 H) X( _& |app_data->cut_stock[2] = 0.5 ;
0 `% E, a  U: r. `8 v2 Napp_data->tolerances[0] = 0.003 ;
/ u3 v- d6 s9 M# u" T: f7 P. T# Papp_data->tolerances[1] = 0.003 ;. }4 Y& Z5 T, o, o
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;' M$ u* S' H, T+ w
app_data->feedrate_value = 33.0 ;+ _. j0 K' d- X' ~8 }% R8 f
app_data->offset = 0.055 ;/ R7 ^; ?' f3 o- r4 E- r5 x
app_data->avoidance_type = UF_CAM_avoidance_type_warning;  d( t5 `; W% e0 F0 U! J
}
3 Z* c' O+ e0 [( d1 q/ o% k- d}

( U6 \# t) Z* E' X
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复5

0

主题

7

回帖

41

积分

新手上路

积分
41
发表于 2014-8-5 00:57:44 来自手机 | 显示全部楼层
很好好好学习
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

0

主题

4

回帖

47

积分

新手上路

积分
47
发表于 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.doteam.tech
回复 支持 反对

使用道具 举报

0

主题

4

回帖

47

积分

新手上路

积分
47
发表于 2017-7-18 21:44:34 | 显示全部楼层
UF_CAMGEOM_append_items我是用C#写的,用这个函数总是报‘Method not found’错误。
8 [" I* k/ O+ T( ^有了解可能的原因的吗?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

0

主题

19

回帖

117

积分

注册会员

积分
117
发表于 2017-12-11 15:36:10 | 显示全部楼层
不错不错,正需要的东西
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

0

主题

19

回帖

117

积分

注册会员

积分
117
发表于 2017-12-11 15:49:09 | 显示全部楼层
" m; N8 }) ^* A' e/ @. x8 `6 W
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了