PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

- r) W2 D" W0 G' f
: Z8 y3 ~  y) h. d: P+ R) G, h% J2 p$ p. a$ y# r- Y/ r* t

! z. M: i- r. }/ Y3 t: R3 L

#include <stdlib.h>
- \( a' T) F  s7 M: i$ K# z#include <stdio.h>

#include <uf.h>4 Y8 H  q( }( G
#include <uf_object_types.h>
9 ^! m# t4 p0 k& y" C#include <uf_ui.h>
& o& j5 J9 x  c  D; J#include <uf_disp.h>4 c! t" @6 }, R4 B4 x8 a* b
#include <uf_obj.h>3 N3 r: A5 Y; D0 d3 `9 ^
#include <uf_cam.h>
+ O) g; F; T- _+ P#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20; m4 B3 V3 q8 g7 b6 C
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;, ^; W5 C* A) }% o6 S8 Q4 h# L
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
- Y" H& x$ n/ k' {2 z4 B! e( ystatic char menu3[][38] = { "1) Part Geometry",
# Q: I+ S3 Z/ V$ f2 }+ `, \3 J"2) Blank Geometry",; f5 n* R! C6 B# i: G  s9 _! b
"3) Drive Geometry",
' w: u, g8 Q% z" Q"4) Cut Area Geometry",
2 j5 N( @& `/ O4 l+ `- n  R"5) Trim Geometry",
3 L, [3 r& E! L# m"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 )

{
, X& ~8 \3 j8 U* N* S# a  AUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];; @2 R4 J4 l. n7 j4 Z9 Z2 a4 X% ?; }  u
tag_t *objects, entity_list[MAX_CAMGEOM];
6 k2 m- ^8 ~" rint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
* [$ h$ H, B. I) J( |6 fchar *cue = "Identify Geometry - Wait for the Filter!";
! @/ ]# P2 D; ]0 v+ m' fchar errorstrg[133];2 p4 |  I& N9 K, S6 p
int response, irc;9 c" [) K0 u5 P) D
tag_t eid, view;+ M6 x3 h, Y4 e; o- ]3 E
double cursor[3];

#ifdef DEBUG, h8 a" l- g1 w- i
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
+ s% e! M, \2 }1 P#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????# i% Y' p; m, g; S+ m
{5 u) R& b4 H2 P
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )5 A: E; k7 S3 [: {
{+ `1 d! k; ]7 n( m. C
break;9 M9 q3 f# H4 Z/ p* O0 B$ y: {
}+ F5 l1 `! X* s, Z& i" Z  l  u
#ifdef DEBUG8 Z% e7 x+ J' E& a( i
printf("\n Geometry option returns %d\n", geoption);
6 M, E2 B6 }3 i6 s4 u#endif
! k6 D9 ?! ~) q/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
2 C* n$ N: E- R8 H( ?{! q! H& L# @) a  {
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
% W+ X/ U, j! N# SUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,# T8 O0 x( c, Z2 D/ f
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义5 ^- w2 b* z3 z/ a' w
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)% G( L' _  z8 I7 k( v4 E* ^
{
$ N% y; V3 }5 s" i- Tentity_list[entity_count] = eid;
9 \0 e/ [8 m1 ^* R* |3 L8 n, d#ifdef DEBUG
, G- J: y/ i7 n0 P6 v9 F2 [, n) fprintf(" EID number returns %d\n", eid );; T7 x+ w) y. y
#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),7 N. Y' f$ ?7 l
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;# F6 @1 O0 S) Y: r4 d( E  \* |
}
0 L% o, V" d7 Nelse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
. A3 q+ p. g/ t+ \! D* s/ V{- r5 s6 t& Z# `; F
/* Geometry selection is finished.几何体选取完成 */$ d! u( i1 s3 t# @4 V0 L0 z5 Y
break;
, v4 ~* h4 O7 A}
" e2 j1 B! M$ x4 ^* b+ w' K}. y3 C/ }! Y9 K. r  H( g$ Y7 C' n5 u
#ifdef DEBUG
; _  h6 B2 l, J% Cprintf(" Entity count this selection is %d\n",entity_count);3 [, R+ e8 _& N" X1 d/ R
#endif

if (entity_count > 0)2 N9 F7 w" \- n8 |
{  O4 K" o" l+ h4 h
/* UF_CAMGEOM_item_t *items;
0 U8 _8 A" r1 V- G9 N. Dint item_count;*/

for( i = 0; i < obj_count; i++ )
9 U4 f5 i( I3 E& j) E{3 L+ H* S# O1 ~" g
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
- L* z7 ~2 R" K: Q# L9 Q% v4 m, vtype == UF_machining_geometry_grp_type)

#ifdef DEBUG
2 |$ l5 b% e4 z7 z$ Pprintf("\n Current entity count is %d", entity_count);" y# f  f: h4 U
printf("\n Current object count is %d", obj_count);) j* A5 ~: y' t/ _
printf("\n Geometry option is %d \n", geoption );0 J4 F" n8 m: g! E4 t0 y
#endif

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

{0 V& ~9 |6 N% T9 t) F7 P$ A
swiTCh (geoption)" u9 K& A! Q: n
{# X. x% M' o0 j4 m3 J4 Y2 J, E
case 1:
" ~% n- s( L1 h- o, [5 xcase 2:; b# k, O7 b& l4 [1 X7 g; i# R
case 3:
0 {4 O9 V, |' d- y/ h7 y6 n4 ncase 4:
1 ]% ^: d) b- D* D. acase 5: /* Part Geometry 部件几何体*/% `/ ^' H% G3 Y0 ]  u
{
' a: g9 G  P/ @: ?" E: n8 g#ifdef DEBUG0 R( \& j1 V* U( z
printf("\n Type returned is %d", type);
3 [$ H, U: Q3 j; L+ t% F5 |printf("\n Subtype returned is %d", subtype);
' {; q' ]& I" p$ C1 ]" O#endif/ S5 s: N8 F1 Y% Z$ r
{7 W! B6 }6 I# G1 L7 o. T6 D: Z
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,. w! }- P+ ^9 q" y; k- y6 o# }
entity_list, app_data_list );
0 v8 s2 w, C$ J" F1 v" r//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
3 B+ B( S( ^9 e+ @4 k//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
! i8 A/ B' @: i; J}/ c* g: |- _( j$ B3 A
if ( irc != 0 )3 T0 K9 L5 W  D' x7 ^& F
{
2 ]. Z- H4 `' `/ Y, _  c/ jUF_get_fail_message( irc, errorstrg );; j0 f. i7 }7 Y" C6 i+ X3 V; v
printf("\n The return code is %d\n", irc);, F0 k  p) Z" t5 [! i
printf("\n Error code translates to %s\n", errorstrg);, [7 r+ ]  M9 z
return objTag;
) a) m: q: }: M( y& H: V}
) F' o! Y* r5 Sbreak;7 Z8 Q5 B, O3 R( N# W7 d1 J2 |
}

case 6: /* Blank Geometry 空白几何体*/
- K8 _- t9 Y- \# ^7 B{
) r! ^8 ?' Y* N#ifdef DEBUG
2 L% x, ]( t1 ~) w% [$ Yprintf("\n Type returned is %d", type);
( x- k- }& Q2 V& O2 e7 `printf("\n Subtype returned is %d", subtype);. [1 }5 q  A; X
#endif
; i, r) R0 p0 y9 T' [0 n4 c{
$ _5 }2 m- [" e/ y4 `irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
! Q9 f& h( b1 I3 Bentity_list, app_data_list );
  o' j) o+ p5 O8 g& f# {}
  O+ w+ y) }* ^9 Tif ( irc != 0 )
( Y$ A% W: q" e' D9 V9 |{
; |! G' G2 A7 J! `1 s5 m, vUF_get_fail_message( irc, errorstrg );, n, K9 `! e) C" Z
printf("\n The return code is %d\n", irc);
$ E6 @! @# f, r% ]3 R% x: C4 S! Iprintf("\n Error code translates to %s\n", errorstrg);
5 D, ~3 p0 t/ v. S; c; Xreturn objTag;
% u/ m$ `7 z, s" ^) }% F}. @7 G/ S$ N- V) i: V! L+ t
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/- j# v& t% W3 v2 l& r3 q# S
{
: O) ]; h: r6 q#ifdef DEBUG
0 x3 d# J0 v0 ]# Y9 `% Vprintf("\n Type returned is %d", type);
  P& D0 T9 f4 X) Nprintf("\n Subtype returned is %d", subtype);
- U% ^" t5 t3 g# q#endif$ P8 l; r2 ~5 m( V& m, U( Z
{' T" c4 J8 v: c) a1 l# D
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
: K( D8 N' r! d+ f' P+ p* tentity_list,app_data_list);
* [! g3 L' H+ h1 `}
6 j0 |/ U  E7 Pif ( irc != 0 )
; {: Y/ x1 h2 m, c" n5 E$ J% }{- b' B% F5 b# A1 m0 y1 ]. ~
UF_get_fail_message( irc, errorstrg );
6 Y% j  l2 N  t" D( mprintf("\n The return code is %d\n", irc);5 \7 U) C- s; Y! |
printf("\n Error code translates to %s\n", errorstrg);! h) y# n- g# P( n7 c8 |
return objTag;, Y0 ~7 I& h" N: X
}
  i/ A9 `# y2 E) k7 Ibreak;

}

case 8: /* Cut Area Geometry 切削区域几何体*/( O% Q6 w7 ^; _) X8 N
{% j$ X* A% K  E. V% Q2 D2 P9 G
#ifdef DEBUG& I2 w( R+ y. l* t0 T, u
printf("\n Type returned is %d", type);, U1 g& p1 ~5 j' g: E3 r; q
printf("\n Subtype returned is %d", subtype);2 R) h/ _5 j( j" O9 [1 p9 w
#endif5 X7 [) m; A9 d- h8 z# y8 X, H0 O
{
3 b. h( z/ }; }: q; }% [irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
. N3 X, @/ L' v$ C( S! Dentity_list, app_data_list );
8 J" h: ?& H- n2 X& G0 v2 L6 H: o6 \* ?2 P}
, B& ]. s) z: g2 q, Jif ( irc != 0 )
4 b( M% Y7 V! ~7 I{
8 o& g% }; b( q% i  EUF_get_fail_message( irc, errorstrg );# E5 v4 W" |: s  n2 M
printf("\n The return code is %d\n", irc);
3 c8 C0 Z( l4 j; P. z; o  mprintf("\n Error code translates to %s\n", errorstrg);$ `; B; Q. t' s0 }3 `
return objTag;1 p7 y( W! w8 C; P& y- b
}$ q9 h; `% ?- R; b
break;: J/ m- [; A3 U. S1 t
}! c0 x: R- b$ y) a. t+ A2 ~
case 9: /* Trim Geometry 修剪几何体 */* x; v; L2 H0 F( H0 {& t
{
$ _  d! P, ^- hprintf("This case not implemented.\n");
/ h) d4 l# |) wbreak;' y& m$ Q$ X8 O5 c( s9 b
}
' V3 B7 R5 I) r, j) H/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/8 J2 K" Z, d2 V' c. |7 i+ ]7 o
{
3 J4 D  }/ H. q" Y  x8 Vbreak;
# {# i4 T) H% Y+ J5 ?}) v# z; v/ @  m+ I% k7 d9 M
}6 u* [* l) E; E  v3 L" N  ]: y3 x/ K
}4 o, j1 c! p& n* e3 _
}
" a, ^! V4 ]3 S  }" C8 j: C}' u2 n& E  D+ G8 g; T7 D
}5 C+ `/ \; K* M9 H
}. K3 B; e# ~& Y3 t* A: a
/* Free the Allocated Memory. 释放内存*/
% f" n: g+ ~6 L, l8 H8 cfor (i=0; i<entity_count; i++)
+ H1 D1 Z! T: X3 `{. Y# o# l$ A& {6 L  ]9 o/ z
UF_free (app_data_list);
" R5 i) {7 f4 `& j# C}

/* UF_free (objects);*/

return(0);6 y9 E( k( v4 l$ c9 m0 D
}
& O- c1 ?0 k# n/ V$ [/* Selection initialization procedure 选择初始化程序*/
8 L: U( q, K! z: U2 o' W+ i# bstatic int init_proc
# Q* }6 i7 y9 k- {, K" x1 a# O(
! g6 G- K: S+ s- ?; P1 @UF_UI_selection_p_t select,//指针 pointer: ]! Y2 K  B7 M
void* user_data* r2 v! ^2 u1 j; S7 v
)
4 u6 }* Y5 y3 d1 B{3 u0 a4 ~6 I3 ^; I8 Z: l
int num_triples = 3;
# Q) j2 s' k9 r7 |" y' F//最终指定的特征类型: f$ v+ @) H1 u, M: \. ^
UF_UI_mask_t mask_triples[] = {! ^7 I! ~. F& a6 E+ ~
UF_line_type, 0, 0,
4 C" `! N+ @7 `& K% C2 p5 R' AUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,2 m: `/ m: ~4 ]" I0 q
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
& Q+ w4 W, a" _! x; q8 pUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
1 ~2 s; n" a( y  M8 _' s$ N0 Dnum_triples, mask_triples)) == 0)//3倍 3*3=9

{
+ K2 s2 _( O; F  ]; A6 p. g, K6 yreturn (UF_UI_SEL_SUCCESS);
: q0 ?4 L  E) [% M- y}8 m/ `* Z/ U) {; m5 }" ]/ ~% [; P
else
/ s) X6 A) @4 B" s% Z7 T& b( i{% `0 B7 W# q; D5 c! X8 W; c, f
return (UF_UI_SEL_FAILURE);
! E* L# }: k9 X7 I) c) t}
/ q& k% q3 p( ?/ V; s* [6 _# n}
) @2 r, [6 l0 r, ^3 ?" O6 Astatic void init_camgeom_app_data
3 a6 v; _1 t; P4 ?(% s+ O! _6 E) T6 M; [4 q* h  ^
UF_CAMGEOM_app_data_p_t app_data5 d& n! I/ U3 O! ~
)9 h+ ^& j! U. p" |! i
{
4 W* n( B+ }9 A, o0 F' X' Tif (app_data)- I9 x2 C( D8 ^0 L8 s
{
, j7 w  s1 H* @+ W- X( _2 Q- N! B/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
+ H- Z5 K- X0 f" bapp_data->has_cut_stock = 0; /* Used 1 - Else 0 */: \  _  L5 {$ h( H0 _2 s2 \
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
1 m5 `+ ^7 h$ K6 w  Tapp_data->has_feedrate = 0 ; /* Used 1 - Else 0 */$ ]; Z: m% X# G6 ^/ ?7 ]0 |
app_data->has_offset = 0; /* Used 1 - Else 0 */6 J2 J% y( ?7 j4 X8 w0 A
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
/ R; \# ~4 j' c" B* \  l3 e/ Kapp_data->stock = 0.033 ;1 C" R* r8 e6 U/ G8 I: Y
app_data->cut_stock[0] = 0.2 ;
$ V6 i3 i) Q+ h% M; d9 _1 @app_data->cut_stock[1] = 0.1 ;6 X& l4 w( [& F
app_data->cut_stock[2] = 0.5 ;
& l$ p; T( P7 _: _7 uapp_data->tolerances[0] = 0.003 ;
$ l( K) [5 a; o  ]9 k- J( kapp_data->tolerances[1] = 0.003 ;7 N0 _* w8 R7 c& F6 R
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;& [. C+ x0 |' d2 _
app_data->feedrate_value = 33.0 ;- r! |( E1 v, h* a0 |$ o/ E$ Y7 b
app_data->offset = 0.055 ;1 A8 W4 }+ e/ a* V; ?" @
app_data->avoidance_type = UF_CAM_avoidance_type_warning;2 p4 l8 }, i( x7 {- S! D
}4 Z$ s7 y! U6 G) M# M  u8 ^
}

- F' Q, \4 K& |1 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 c3 K4 G% d3 v  s+ U( @* A
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

8 A% g+ m; A# D. F0 s- j3 S! e
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了