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

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x
" p6 E/ M1 i( [) K  |) B/ L

( u& H; @/ \  J0 g' ^4 w  Q  h
7 }5 `  d# e+ Q
9 `8 H' U: T5 t* s5 M, q: X% z

#include <stdlib.h>/ z! B. ?" Z( C* @
#include <stdio.h>

#include <uf.h>: J" n# Z' G5 y
#include <uf_object_types.h>4 H8 p' o  `  _  C* y
#include <uf_ui.h>
* G$ A" ~% T/ x- @#include <uf_disp.h>
* \# |3 U" {, _5 y  L% c, x% P#include <uf_obj.h>
/ G+ a$ U' E2 N#include <uf_cam.h>
8 i, U! ~: L( v4 h5 }; ?! n, p  {#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
0 i6 Z$ n0 c' r2 h7 @2 S8 M#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
. E6 Z0 d& y$ i3 G  w* dstatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
, h# V+ D! }: T: R; h2 B2 zstatic char menu3[][38] = { "1) Part Geometry",' H+ h# Z- d9 t, `# v/ ]* ^# M0 ]
"2) Blank Geometry",
" S7 j; d- t3 ^5 q4 b  T"3) Drive Geometry",
3 M3 Z( T2 m3 i3 I# p6 J"4) Cut Area Geometry",
4 s7 U: g' ^7 E5 S"5) Trim Geometry",  L8 Y8 [; m& \# H8 p9 ?
"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 )

{
1 {& ]4 x5 I" KUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];: f5 O4 k* G! e) L+ \; L) x
tag_t *objects, entity_list[MAX_CAMGEOM];5 f! m% \1 P  Z; ?9 V
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
. K& q+ |3 Q# m5 W% E# [char *cue = "Identify Geometry - Wait for the Filter!";
& W" B+ Q% _; _6 [& Mchar errorstrg[133];
& l" s. J* l3 _5 j" vint response, irc;
4 j) L/ b) v$ A6 y1 t5 b  Htag_t eid, view;
$ D: @4 C, m+ J/ ?  W; Tdouble cursor[3];

#ifdef DEBUG
, g6 }' K) w; lprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
" q/ e9 z9 c; n/ F0 G7 M. y9 m#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????$ i) q1 v; g1 j( [
{
6 q  F& U$ h' u5 F/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )4 @+ Q6 k; ^" L& L  G: S8 O8 z7 o
{
8 @3 g/ Z: ?' O- lbreak;' i. ^7 R0 C- a9 W  I! M- v. z
}: g7 a% r- g! g. _& T4 l
#ifdef DEBUG
7 p9 f+ \+ t+ `7 Z9 p& `- T4 Q7 Gprintf("\n Geometry option returns %d\n", geoption);
" j; @/ `/ B4 E7 C% ^  w; |#endif
: S* F$ O5 \6 }% J/ h8 }6 F/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )7 B! g# V4 \4 a7 M! E3 T
{% |+ ^) y3 ^' l
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
* \: `( L/ C* ~: `' ^+ G# l! GUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,+ e. x5 E* r/ i$ X2 D: V8 K) O, M
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义8 Y( p+ o! K3 ]: U9 i: u7 d
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)& Q- a- W2 o0 i
{
% d$ W- z; X/ j9 ~; a8 {% Sentity_list[entity_count] = eid;, n, u+ U. j% Q' O' x
#ifdef DEBUG
% _. X- n. Z( T, [  uprintf(" EID number returns %d\n", eid );6 K- h! C% }3 I, F
#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),; b" _  N/ I0 a- ^% G" \; b) O. z+ c
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;$ x" d) N1 P! r6 e" o7 I2 {
}
9 I( N$ U1 y9 m# b8 G+ \, Yelse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )9 t3 w: o, i3 u
{; C# h* O% v5 u2 A% C1 }. A
/* Geometry selection is finished.几何体选取完成 */3 f: s. _) x/ q. q
break;3 n: x1 z4 _4 _
}$ w+ U( U- {* M4 ^
}
) G9 u; I' `# ]9 h( e5 E: |#ifdef DEBUG$ q  m( o+ f% d
printf(" Entity count this selection is %d\n",entity_count);# J4 Z5 c# O4 P4 V. ~8 s  ]" E- E
#endif

if (entity_count > 0)1 L; l0 [' s) j5 b
{
# B! E; S, S  E/ I3 \/* UF_CAMGEOM_item_t *items;  t/ W' Y. y+ p7 x
int item_count;*/

for( i = 0; i < obj_count; i++ )6 D. N$ k1 L7 L" p
{
1 ^! G# |# E; Y6 D6 O6 c1 t) W4 ?/ ]8 firc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
* }  _5 }  I, A7 Stype == UF_machining_geometry_grp_type)

#ifdef DEBUG
8 v1 B: T! r& q0 Yprintf("\n Current entity count is %d", entity_count);
! w! [+ O) W* K/ ]printf("\n Current object count is %d", obj_count);
( Z2 r1 F0 O: T" N- S" M( |! `; Jprintf("\n Geometry option is %d \n", geoption );) U8 R5 t6 h0 ?) P
#endif

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

{
& ~0 v1 m3 d# l/ ?# S5 G% zswiTCh (geoption)2 q1 y( ?8 f1 \7 F2 [1 i: j  ?/ k
{1 G7 M% x2 b' ^4 w% X
case 1:
* ^& ^  J; B# @case 2:
/ x4 z0 q6 z% Y/ G+ M/ wcase 3:, U1 q- q2 l- J
case 4:
+ M' R. X9 n: h" y! }case 5: /* Part Geometry 部件几何体*/
/ w' r5 \3 }5 Y; @/ M( P5 @{
$ m: G7 \- m1 J: I* X3 `3 I" S#ifdef DEBUG* d5 Q! E6 @9 j$ u
printf("\n Type returned is %d", type);
9 l6 T0 d& `4 ^printf("\n Subtype returned is %d", subtype);
3 L" ~, m8 N* N  X  b. V#endif
- }# P2 }$ P( I% p# t7 S{
2 O% K& K8 e- K* g- }/ g0 \7 birc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
5 t: _$ M9 p$ f- z9 Jentity_list, app_data_list );3 g9 |7 x( l0 q3 H$ l
//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
6 U, O) e3 X, m2 ]2 {//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
- x) m; f) [3 }% c5 c/ I}) \8 N) f0 [0 H& T
if ( irc != 0 ). [. I7 s6 J( \
{
( O% c% ~! z2 [  UUF_get_fail_message( irc, errorstrg );/ L/ B( q; x4 T6 [% X
printf("\n The return code is %d\n", irc);
; P5 W. @! m4 S, F/ p' i* dprintf("\n Error code translates to %s\n", errorstrg);( v7 e& W- P; H2 Q# O; H
return objTag;
  b2 V. S: B1 g) R9 b1 {}
+ o1 \, I$ M/ n2 f% U/ [, M% d( hbreak;0 z/ F( p- o  f; O4 H: ^
}

case 6: /* Blank Geometry 空白几何体*/
! Y" h1 Z# V, u9 R" y{, S8 B. N4 w% ]3 z
#ifdef DEBUG
) g( z2 o7 ^( `) q$ `/ hprintf("\n Type returned is %d", type);, _0 |/ G# }2 A  b
printf("\n Subtype returned is %d", subtype);6 F" H  Y$ d0 v, V8 i+ `, ^
#endif
& q: C; q: r( L) L2 o; S  }2 i{
8 Q! G8 y' E. o; p+ t% i8 `irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,( Y- ~3 \# C1 ?9 F" M  Q  Y9 D4 k
entity_list, app_data_list );% D/ R# L5 q& v
}
% v6 }4 ?2 r4 c0 m  Nif ( irc != 0 )) I% d9 A) o7 ?, K: a$ J
{' l' @' o4 W2 j: o+ A) O$ W2 i
UF_get_fail_message( irc, errorstrg );" X: W. q3 n8 m( Q, Z$ i
printf("\n The return code is %d\n", irc);
0 n: i+ u! ?! W1 e) ~3 i3 \printf("\n Error code translates to %s\n", errorstrg);) s" G+ R. ?) {1 d1 a+ ?
return objTag;% r6 B% a  Y8 Q7 U0 j6 r
}: [9 z6 V7 \7 }0 C( X$ J+ x5 y* }: t
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/4 ]) d1 V: v% ]+ N7 J9 e
{7 q& p8 w, t( V4 o  r, j
#ifdef DEBUG3 r( N. a7 @  Q2 ]. s- l( d
printf("\n Type returned is %d", type);) W8 \! W; E7 M- J3 N/ M
printf("\n Subtype returned is %d", subtype);
5 L$ s4 Y$ E5 w7 x& A; ]#endif5 z% z' e( h7 G
{* o4 B6 o/ E  r7 p, J
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
7 J6 I7 h. |/ W5 s; Aentity_list,app_data_list);3 `4 ~) j( q' Y0 I
}
1 x9 x5 R/ x) L( _& R. r6 p7 jif ( irc != 0 )
9 z' P4 S7 y) b* |- T( U9 x: }{
2 C$ `- Y7 m. v1 @UF_get_fail_message( irc, errorstrg );
6 p4 I: S) j3 ^4 N1 w2 B- [9 uprintf("\n The return code is %d\n", irc);
8 \! A; o& r, g% W! dprintf("\n Error code translates to %s\n", errorstrg);1 T2 c& p, Z$ l' I
return objTag;
- Y" |% L3 k( C% I" N}
0 T/ K/ U9 d# ]break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
% h3 k' v  x: ^4 S0 L$ X{; e8 ^9 o. N- D( Q% a. ?& C9 U
#ifdef DEBUG! I$ y2 m) b( c" S9 h1 g6 N6 V9 I
printf("\n Type returned is %d", type);
% y8 a# l( W" f; I8 U! Q, iprintf("\n Subtype returned is %d", subtype);
# _# [  c9 b+ s- w0 U#endif, E) y9 f7 ?, j0 l3 N4 T" S3 h3 p
{
, V  w4 ]; o3 }6 C9 Lirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,4 S2 ^4 E/ K1 X- e2 `" I
entity_list, app_data_list );+ X) A/ r# @/ |: l* v- k5 M# U6 s  R
}
8 Y$ ]& r& r5 M4 S3 ?& |& [+ S3 \. [if ( irc != 0 )2 K) B) L7 i3 Q, D! V: r  u
{
* ~/ Z" n# R& E. p$ t+ a' D4 cUF_get_fail_message( irc, errorstrg );
- \8 t' L: y. }' f# Iprintf("\n The return code is %d\n", irc);
% J4 a* t2 N9 ?5 R! s) l( [printf("\n Error code translates to %s\n", errorstrg);
, N, ^! g; C% {9 p# A6 P0 z3 p" qreturn objTag;' m0 R  o; z8 Y: d+ d1 H7 x
}
" [8 q3 B  h+ f( m9 I" I: N  Z+ xbreak;7 D' X4 V! n1 v0 m1 x6 u% Q& T
}
* W7 T' u- n* j+ d1 Wcase 9: /* Trim Geometry 修剪几何体 */& U& o! f2 U' {& ~  n7 h
{
* H/ z+ i* G  C( j1 H; lprintf("This case not implemented.\n");5 B8 b6 e! J$ A* q4 y
break;
" H  r. P7 z! z7 T: w, X: ]- D}
7 I4 W( C0 K' q  O3 a2 R+ K, l+ ?/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/
' U: K4 i% S6 n/ a) A  k) O5 n{
" d; Y$ ?; A5 W- ?! x/ kbreak;
% |" z9 a6 U5 G" m" X7 }3 d}, f: }9 a/ G& x. F
}$ n  W, E" ^7 Z; s
}4 m2 {& z. {. T6 M. n& t
}5 J; K. S7 I+ ~6 Q: T% X
}. Y( f: F5 \7 \0 K. J
}
- Y" z! e' K* w0 Y9 T8 g- I. C}1 m% O! V9 C/ [% ?3 u2 R
/* Free the Allocated Memory. 释放内存*/1 h1 ^+ d1 k$ l: G4 A; i' |% Q- i
for (i=0; i<entity_count; i++)! T- o( w$ D+ ^6 p" a/ R+ ?
{
$ z8 r2 J  ^" M2 S+ D' D  tUF_free (app_data_list);3 x; f5 j2 ]5 p' k# \9 `5 `8 m$ z
}

/* UF_free (objects);*/

return(0);' ?- r! c8 x5 k, g* O0 h" G
}- ?8 s1 H  h# ^* G
/* Selection initialization procedure 选择初始化程序*/
6 {% V* K$ ~' S- p2 pstatic int init_proc
- i) [  R! ?6 p2 A(
& z: w; v7 A9 s9 ]5 C5 eUF_UI_selection_p_t select,//指针 pointer+ j  I8 ~+ J& u, l1 L
void* user_data
( w* w2 @: B% `3 y( o2 w; T$ U)
! W; v0 v! B) z{) f& _+ x$ U" n# @, n
int num_triples = 3;
) D# n- q. t" A$ r4 [% U. |; E//最终指定的特征类型* \6 {' X+ r# H- b) h. r7 N
UF_UI_mask_t mask_triples[] = {" p  @' P3 c. o0 A3 x3 X
UF_line_type, 0, 0,( h/ o3 {9 b$ D) D0 U9 z5 X5 n; f) i
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
5 c/ M# |2 n% TUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
% x# M! P- ]( e! RUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,4 D" y* H, l: d. X: k7 P4 p- V; U
num_triples, mask_triples)) == 0)//3倍 3*3=9

{2 I- s9 E0 S" F( D  k1 I7 I
return (UF_UI_SEL_SUCCESS);( g. X! N7 v# F5 j* @! Z
}! M. m% d* S3 {- l% I7 ?
else: T. P7 K3 L( }6 S& d& i6 r) P
{, w1 k' |: u# |$ O0 Q& R
return (UF_UI_SEL_FAILURE);5 R: l+ p7 v1 u; c7 o/ S
}3 Y# a$ E3 e9 L$ ^5 H3 U+ ^8 d
}
9 |6 i. c- u1 C6 l" Astatic void init_camgeom_app_data% S6 ]& Z+ V5 V, s# a6 U+ S
(
1 D! B/ |. e% fUF_CAMGEOM_app_data_p_t app_data
2 B# }# W0 y3 P' G4 w( O)0 y$ t/ L& p1 S
{( U7 |$ K* w; Y+ G1 Y
if (app_data)
) C. ^: k. m" p/ i* Q7 @" \! O3 O) T{5 N+ g/ d- n  K$ @0 X8 Q/ {
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */3 O6 D5 g2 R5 _
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
0 B0 g: w1 x0 c% P, \: dapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
3 r0 ~+ w( K2 A1 \2 M, g; gapp_data->has_feedrate = 0 ; /* Used 1 - Else 0 */* f; ^! I% Y0 \, _' g
app_data->has_offset = 0; /* Used 1 - Else 0 */
; Y+ p( W# {/ l8 O+ d1 V' gapp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
( x# ^3 n- d6 i2 j- mapp_data->stock = 0.033 ;
# I2 \/ m5 H3 a. sapp_data->cut_stock[0] = 0.2 ;  d: G7 `' s; y5 }: I9 g
app_data->cut_stock[1] = 0.1 ;
5 u, {& e9 K9 m9 B7 aapp_data->cut_stock[2] = 0.5 ;' R0 b; b! E- q  D
app_data->tolerances[0] = 0.003 ;
+ @+ M( t& x0 F) s; Happ_data->tolerances[1] = 0.003 ;
0 i8 ^* z+ v. K; lapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
; l) y+ ^7 b9 n$ F# I; B+ gapp_data->feedrate_value = 33.0 ;0 }" A+ `) |7 S' G( Q( O6 T
app_data->offset = 0.055 ;
' e7 Y# Y/ m$ `8 O8 H, ]$ [app_data->avoidance_type = UF_CAM_avoidance_type_warning;
6 U" L! k/ x  y8 y3 u% T3 b}2 Z! n8 w, K/ [+ }6 b/ ]* c
}


/ @+ T- g1 W+ S' g. J* D
上海点团信息科技有限公司,承接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 i9 N4 [1 q9 C有了解可能的原因的吗?
上海点团信息科技有限公司,承接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


0 X  e6 C% @' a7 ^2 j, G6 \/ [/ C不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了