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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

! L6 s4 b) J1 T. e' m+ [5 u% Q1 Y2 {' m) a+ ^8 V" X4 U$ v

% s6 h' B; ^9 f+ E
2 `% \4 X- n% f0 `# }6 @% r

#include <stdlib.h>
( t% x2 P4 B" S" F+ _  ^4 \5 P#include <stdio.h>

#include <uf.h>; k9 {; K1 V6 R9 _5 r* F/ W% i( b
#include <uf_object_types.h>
1 v0 l  W! I7 C" _* h#include <uf_ui.h>
( ?% q5 u0 W* v2 K* \$ V* q#include <uf_disp.h>
; j% I4 `7 Y, n* v#include <uf_obj.h>
0 v6 s" s$ n' U#include <uf_cam.h>
/ {  f: S: t' l- m# B* W# U0 y#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20" r1 j" X) j8 B: d7 f+ L. s
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
6 b; w+ F/ ?7 jstatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何( F/ J. ]8 z9 M+ t" c. g
static char menu3[][38] = { "1) Part Geometry",
; N0 x/ z/ Y5 K"2) Blank Geometry",1 `& N7 L: r& v
"3) Drive Geometry",
9 o- b% Y$ C8 }& {% ]"4) Cut Area Geometry",
7 A6 S9 n2 G0 |. O4 j"5) Trim Geometry",
$ B8 v; b$ D. n# m' O8 X$ M- Q"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 )

{
3 ~7 y0 o* \. B6 ?/ J! Y9 @UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];# p# y$ t5 `; a! F0 w+ a( W
tag_t *objects, entity_list[MAX_CAMGEOM];# q! j+ h* a) @8 ]; ~
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";8 E( S( o1 d- y3 ~: X; |
char *cue = "Identify Geometry - Wait for the Filter!";
/ q2 d* F( i% g! [+ B- J& Kchar errorstrg[133];
( R) J. R! H+ q8 g9 s* {1 kint response, irc;' m3 _; ~! b7 u% X4 X+ \* ?% ^
tag_t eid, view;
9 L. N7 h! K* _9 @8 Ydouble cursor[3];

#ifdef DEBUG
+ A4 w- a) f. y4 R1 g$ C  V+ ?printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );* N7 `+ i) o* I- m$ @
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????+ ?! Y: e( z" p: V3 M$ w5 O
{1 C% y7 Y6 P, D% W
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
( W) ]0 J; W. S% ]- T7 l4 U{
5 s/ D; D* s( D- A0 obreak;
+ b1 C, W. F( F$ Q# V}
8 ?; g" n8 g" |3 Z1 r#ifdef DEBUG
6 E8 E+ u2 i1 gprintf("\n Geometry option returns %d\n", geoption);! z7 x7 [2 h3 D0 ^5 r! l4 |( e
#endif
- J& p* f: a1 `9 W% K9 v$ v6 V0 v' c/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 ), W! T$ a7 y+ j+ K! a1 R
{
& v+ @* P2 B8 s- pentity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
/ Z2 B' ?; V! VUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,4 h9 h7 k  M: z5 r' U3 U' T
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义/ T4 c/ t0 ^2 P2 i& \1 H3 [
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
- C& I, g/ }$ L& a# v( G{1 C5 ?. E% t8 Q- v$ k% t
entity_list[entity_count] = eid;0 G/ n! @; o, X8 s
#ifdef DEBUG; }8 N: X1 Q' h, P8 F
printf(" EID number returns %d\n", eid );
6 J- Y6 V. N7 q- k8 s& u% M#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),9 a5 k6 B: W" d! }; i5 `
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;' _+ i* e. W2 R! b  x9 A
}0 o% u5 ^0 T( ~7 B5 a8 ^8 I
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL ). K. `4 |* Y. F) T& E
{
3 [* i- V8 n- f8 z5 q/* Geometry selection is finished.几何体选取完成 */4 A1 H# e; X3 u( `3 }
break;
( b. T( X  o7 F8 D/ ~; @2 \# i}0 }) t5 w  N8 C5 p! ^8 m
}
/ d/ x. [9 ~4 e#ifdef DEBUG
# B( T/ r0 `. }7 h0 b3 e" ^- w  [printf(" Entity count this selection is %d\n",entity_count);
  }( }" g' H1 F7 Q#endif

if (entity_count > 0)
# D  {6 X. @( q/ |) V1 H{
8 w1 ?' u8 J+ r' L: F& |/* UF_CAMGEOM_item_t *items;4 r% j8 N8 a( u& y) @
int item_count;*/

for( i = 0; i < obj_count; i++ )9 c' U1 g1 I, ^
{1 b: |4 e) O) W
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||9 T/ r5 {) P' L! s
type == UF_machining_geometry_grp_type)

#ifdef DEBUG
+ }' o5 }- ~9 c+ T  i" Rprintf("\n Current entity count is %d", entity_count);0 L9 }$ u+ N6 M
printf("\n Current object count is %d", obj_count);' n1 c# E" [) x
printf("\n Geometry option is %d \n", geoption );
/ }& N" {5 b+ I& n8 E2 u#endif

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

{0 ]+ z/ H  w- r( Y- H% [
swiTCh (geoption); ^8 n5 F. C; O/ Q
{  g2 s) d' |1 N( @6 k- o  H
case 1:
$ e- a$ f2 S3 x: w; lcase 2:
* f1 d5 V; Y& I9 p* Acase 3:5 h6 K: k) I, U8 v: b3 z8 v; c% Z. X
case 4:
+ K* }  v2 M6 [* n  O+ Wcase 5: /* Part Geometry 部件几何体*/
; L4 F4 A' i1 L( R{
4 p1 |6 n8 |& f# ]5 ]#ifdef DEBUG7 a& |9 T+ e) g( D6 x. E; e
printf("\n Type returned is %d", type);) c6 f. ]  Q2 x( G
printf("\n Subtype returned is %d", subtype);
0 ~) z. D( r3 R  q#endif
6 Z0 N+ \$ h4 v+ s9 R{$ n! p1 D. x4 ]2 }9 W
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,, T' ^1 p5 k5 J% K7 N
entity_list, app_data_list );
2 u" n- |9 U' l7 K0 M# p" m//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。+ I" v/ l" j- j' }( x+ Z# b- m+ ?
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。* w8 d" C8 h( W3 u8 V- M, S. z5 Q
}' A9 U" g% D( x  F: S/ |
if ( irc != 0 )
8 o5 X3 H4 K' p3 S5 c6 T" A{
  {, K* i. ^) HUF_get_fail_message( irc, errorstrg );+ M; t5 I) j6 x) A% o' K. N8 q. n
printf("\n The return code is %d\n", irc);
# K! _7 F; N- c9 r5 y' H' @8 g& fprintf("\n Error code translates to %s\n", errorstrg);
5 a2 c) a9 i* c/ T2 F* xreturn objTag;
, T- G8 Y; q$ R}
$ _% w) @. t; p' I2 _break;4 y" m9 E3 k: g8 P
}

case 6: /* Blank Geometry 空白几何体*/
9 a9 {+ n8 t; x( ~+ ^. R0 H{
% Z, t4 W, E$ A" z! U- @% C#ifdef DEBUG
5 ?- P8 F% H9 |- r0 T' fprintf("\n Type returned is %d", type);4 G1 a* {0 a2 N
printf("\n Subtype returned is %d", subtype);
1 d4 `2 `( L) K5 W; r3 ~4 P" b( c#endif
; W$ R; `/ _2 T/ z/ j. u0 ]{, ~1 f3 Z0 B" L: x; C; v
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,) k* W. m, U  ~
entity_list, app_data_list );9 P, N- \0 ?( r
}
4 L% W) p' q7 Q0 g5 ^' iif ( irc != 0 )
# g: P7 u& o0 b2 e$ Z. z" G{  [5 v1 V/ T$ o% l
UF_get_fail_message( irc, errorstrg );- \7 P3 J$ V: X6 u3 G3 y0 L, J: N
printf("\n The return code is %d\n", irc);
7 e; z4 U; u& V8 ?- e+ L7 \printf("\n Error code translates to %s\n", errorstrg);0 S( V& y6 U0 q4 F4 P! ^
return objTag;7 M- S6 S4 I3 K4 k
}
- L1 U: \3 G: R1 d7 S$ bbreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/$ L$ ~7 X% o$ N" O! G
{: J! J$ W3 L* V+ d6 |
#ifdef DEBUG7 P4 j1 u/ i7 A( P+ A
printf("\n Type returned is %d", type);
, y) r* T. }, j9 Bprintf("\n Subtype returned is %d", subtype);
  N, L& e. W) O) }% C#endif
0 R2 R& K3 `+ d0 U1 o7 F{  p# U) [( A1 }) o' q, Z
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
) B$ h- t8 m* ~# [! d' pentity_list,app_data_list);6 S4 R8 g" u- \/ Z4 g. ]2 ^
}( X# c8 x6 H8 V$ {6 X
if ( irc != 0 ): r; }7 I. a: v8 U* K
{$ F+ q" D* t4 p4 T; k: K% F
UF_get_fail_message( irc, errorstrg );. A5 G$ H1 p! W+ S) r2 I
printf("\n The return code is %d\n", irc);
9 S2 k' t' s5 A6 U; |& O+ xprintf("\n Error code translates to %s\n", errorstrg);  R5 w; }; ~6 a: Q- B
return objTag;
" H+ K' R# @7 d+ B. q7 {}7 F& @" N7 Z4 l; n2 G) i( B
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
' v9 G1 o/ p  F# g. I{
3 _6 o- J' o3 Y  X# X  B#ifdef DEBUG
: H2 t6 z8 i+ {& p8 G: Iprintf("\n Type returned is %d", type);
7 Q, |% |2 V8 X  v. |4 h2 m" J5 |printf("\n Subtype returned is %d", subtype);! [- }2 _: h3 t8 P1 Y8 D
#endif3 c3 N% A, U2 @9 d( X7 \
{
4 b5 P$ R; K- O& S1 g) hirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,$ ~3 M: x& D' t8 G2 h& V# C3 f8 n
entity_list, app_data_list );" U8 R0 a" {* d5 T+ g$ V% q8 w
}. G5 _: h5 K# H& V8 k
if ( irc != 0 )- B; C8 g3 Q5 C! v& c
{$ b5 h% m) _1 H8 M, r
UF_get_fail_message( irc, errorstrg );0 D" w. C  }2 N$ Z* u
printf("\n The return code is %d\n", irc);  z" Q$ G( r3 O/ J/ ^. r: _
printf("\n Error code translates to %s\n", errorstrg);& g6 I; z  z0 N) L) z2 l; N. D
return objTag;! z& @: _( L: ?$ m9 D
}
" d8 l, _& b& K, d5 ?break;# v/ f) z4 x# Y0 G8 x: ^, t
}6 }7 ?: q1 k3 G! v3 e% w8 `
case 9: /* Trim Geometry 修剪几何体 */# f$ {& ^- E: J8 ~6 Z' X, |* I5 Q/ s
{  t- i" ~1 z: d% q3 f2 L
printf("This case not implemented.\n");
$ n# V. j: `/ F$ Mbreak;$ @4 ?% i  x6 Y1 U+ m
}
. M) X/ o& J, `$ n, Q. A+ e/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/( \/ G5 T$ O, p7 _/ x( ?  P
{9 f; _8 d& \, V3 ?' X
break;( U& G0 K9 l  [% q3 |
}! ?$ |5 e% D" E5 Q( Y% S$ f
}$ Q& k' O, ]1 f: L1 z* w" ]
}% o5 i) b* V+ y7 Q+ @7 t
}
  h4 _5 E1 h8 X* t6 C6 D  a1 O! S- b}, Z/ u1 h6 ?! `+ ~
}0 w- s) \' ]2 Z9 f& l
}7 v' L( A: F+ W' c5 E+ }
/* Free the Allocated Memory. 释放内存*/
+ Z0 L" Q0 ?& I; ~  m& V$ _! S) bfor (i=0; i<entity_count; i++)0 _* ~! w$ D% t0 t5 W
{
. d/ I; ]% M4 JUF_free (app_data_list);, F/ g9 N0 C) y  |: X
}

/* UF_free (objects);*/

return(0);
  l4 D' D& R. }}
& c; ~. J6 C6 v/* Selection initialization procedure 选择初始化程序*/
. m* N; L. J+ l  m# W! Pstatic int init_proc
& r% ]) N+ X3 k(
. t4 x8 l* M  r% s  vUF_UI_selection_p_t select,//指针 pointer
" V4 _. z* ?" uvoid* user_data& U2 D8 q$ h0 I! M' \2 c
)
, ]" Y: }: `9 x  K. a{# K8 y  {5 p# Q# ]: i& s1 d
int num_triples = 3;
$ `( d* B, _& s* G) P" B" D//最终指定的特征类型( l% t2 z6 `2 a
UF_UI_mask_t mask_triples[] = {, G* x0 @2 d: Q1 s# ?1 o% I: t. B
UF_line_type, 0, 0,
  N9 E" f" k4 y* O3 e% B# g( YUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
% s" R$ w- m. b, \$ lUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,, S) U6 @; N4 M1 N' ~
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,4 @' r- j. a% E4 w* O( G$ d  M( v
num_triples, mask_triples)) == 0)//3倍 3*3=9

{1 S9 Y% j) G2 p' u8 V1 l* a
return (UF_UI_SEL_SUCCESS);% P2 \, O. N2 M) w" a; T( z8 R2 f* z
}$ E$ i5 V- d- S# i3 g3 x
else
( @3 `/ H7 o$ i; v{9 ^) e5 B  {9 h/ p6 I# @4 ?! J
return (UF_UI_SEL_FAILURE);
: {' B  y) ~( Z/ U, U- Q}
& {/ z, ?2 d; Q  b}( A7 _3 }, c1 ~9 G9 ]
static void init_camgeom_app_data
/ U7 a0 h& s: t8 U2 v; i) l(
( z8 |# ?' j, e" @UF_CAMGEOM_app_data_p_t app_data4 z" ~9 J& w% R8 V- P0 @, N
)4 e; X5 z( w  c4 `
{
& X0 F& c* i" S  s, h8 Dif (app_data)8 n7 C, x( {0 T
{
& \  N8 @, d% F8 R% T/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */& Z4 t# m3 m  u3 A: Q& l) {
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
3 F9 ]/ }- \$ ]; z2 vapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */6 p# F2 e7 D1 |, x9 B8 K( n- w/ z
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */- R: p/ x+ I# t7 O/ w
app_data->has_offset = 0; /* Used 1 - Else 0 *// h2 m8 z; ]/ U' h. t5 G
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
% H2 Z! {3 I9 K* a: o8 Wapp_data->stock = 0.033 ;# J$ Z9 Y+ {( T- v! y4 Y. |
app_data->cut_stock[0] = 0.2 ;
. I& z# J$ W/ |app_data->cut_stock[1] = 0.1 ;) f' y* M* V% A6 R5 `3 D- X
app_data->cut_stock[2] = 0.5 ;7 `$ Y) D7 o5 V" `
app_data->tolerances[0] = 0.003 ;, o/ D" {. M% |) U7 _' g! N
app_data->tolerances[1] = 0.003 ;
* ]& m! [7 S. k2 {  b4 M0 ^: T' Happ_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
/ z/ a- r' v& r" ^9 mapp_data->feedrate_value = 33.0 ;
/ v: P( |$ G5 Rapp_data->offset = 0.055 ;
1 I; A9 H6 y' |7 p' Lapp_data->avoidance_type = UF_CAM_avoidance_type_warning;
4 Z; P5 r$ C. C9 F}
, Y- y  H0 ], F5 T& U" l}


4 C) t/ L9 g: Q7 j7 K/ m
上海点团信息科技有限公司,承接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’错误。. A- Q* j8 w- d0 ~! A2 `
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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 | 显示全部楼层

( ~6 r. X- O+ }. b不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了