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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

' d- m4 {7 O" ]! k9 s* U  r
: S2 d$ ?6 N4 b1 \4 @- V* W+ }8 x0 @$ d* }6 _$ o% L
! S# q8 {' t) U! [7 i8 K

#include <stdlib.h>; M- {3 V! X. h% e$ h) E& q
#include <stdio.h>

#include <uf.h>
  j, V: @3 k) n% e# ]# x1 M0 n#include <uf_object_types.h>( [2 Q& |0 @* H% `+ R1 e
#include <uf_ui.h># {( p1 [/ ?; f, _% K. X6 \
#include <uf_disp.h>& q" a5 P5 }. w
#include <uf_obj.h>: V0 K8 }. Y/ ~4 g! j& I$ `
#include <uf_cam.h>1 E3 q: m5 H9 R' Y
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
$ g5 g+ H7 X/ I0 L6 P( ^; b$ `7 y#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;8 P4 f: d0 T8 w
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何# {( R/ \. X. Q2 i
static char menu3[][38] = { "1) Part Geometry",
& t# @9 X+ H; a" Z& Y2 `"2) Blank Geometry",
6 _" i! I) v& S/ u"3) Drive Geometry",
: `8 e3 p% z; e8 I' @0 v"4) Cut Area Geometry",7 B" ]/ y8 i# v& v9 S
"5) Trim Geometry",4 t6 ]3 b8 h& o3 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 )

{" _! J. L# r4 K
UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
# {6 d9 z3 Z- {- Rtag_t *objects, entity_list[MAX_CAMGEOM];+ }; {; m9 j4 n. D% K* I% v
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";5 s$ ?4 Q4 r( h9 m7 @
char *cue = "Identify Geometry - Wait for the Filter!";. s' S6 x/ U7 }, K
char errorstrg[133];& C, b7 p" e5 t/ Z
int response, irc;
; b% k" C$ Q% r4 Z9 U$ q. R, K" x( }! ^tag_t eid, view;
5 B9 z; k, i7 D+ @, Mdouble cursor[3];

#ifdef DEBUG
. I; y7 p" _0 k! xprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );+ F- q: N+ J9 O1 D
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????# S/ ^- v; @& L- V) z* B4 f9 F
{
* o* T/ R$ M9 j$ p: |) C, P1 Y$ x; _/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )5 ]: y8 y1 S# F. u1 A' r
{7 E' s1 e% M( M
break;
0 n" t! g4 Q6 x7 G+ P1 j}
/ `2 p) m% j1 ?: b0 ?#ifdef DEBUG7 |! Y# Y( _0 M" I( o+ k
printf("\n Geometry option returns %d\n", geoption);+ g" l) J( m( F% A3 H! F: P, a' G
#endif
1 a+ z5 |- n# ]% e# K- K/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
  ?* T7 {' _* d0 w1 e- ~{
& G2 H0 S/ m/ p: nentity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,# b2 d5 p1 |: P. `& @: k
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
& Z/ R% p4 q( B, \. ]4 N/ t! F&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
. U5 t/ K; g3 Y4 ^* d; O//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
# |( |% y0 j# i) i* Q8 [9 W/ w# d: \{/ s6 c6 U: \8 t* ^( E  m- {6 O
entity_list[entity_count] = eid;
* N. x; Q6 B; J1 h  X#ifdef DEBUG4 P. c; m! H" O. Y9 _
printf(" EID number returns %d\n", eid );
0 e# X0 q% @2 I. c/ \#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 B$ d; v9 R: s" ~8 l- h0 o&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;' {5 D( |; O2 f9 R" T
}8 D0 a! |5 i( S* ?1 Q7 n
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
7 [2 b2 f# C2 [1 [: W$ ?{  \/ @2 P+ U7 i- h1 x: p
/* Geometry selection is finished.几何体选取完成 */
; |% a8 Q5 \# G* wbreak;
% z. ?' D5 d! n( Y, K}# ]7 C* ~  Q9 m5 o3 t
}
. x: h1 \: ]5 k1 z* t+ s  l#ifdef DEBUG
( z# C  O: g6 K* f* b( t+ X# u) ?printf(" Entity count this selection is %d\n",entity_count);% L6 o' ]! i* Z5 z( t1 T
#endif

if (entity_count > 0)
1 b' m* q, \( X! x{* ~# J, R  @9 V/ X/ }
/* UF_CAMGEOM_item_t *items;
5 o7 \$ x$ S7 c# E+ M: L1 s8 @int item_count;*/

for( i = 0; i < obj_count; i++ ); w' j! @3 p# z6 j. Q0 Y
{
) y. Y- T- m; circ = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||( ~( U$ I" n" U- I# x( g* h
type == UF_machining_geometry_grp_type)

#ifdef DEBUG' [9 b6 I+ Z; g1 N1 X1 [
printf("\n Current entity count is %d", entity_count);" w. i+ [8 n" Z
printf("\n Current object count is %d", obj_count);: r, s) L" `1 d; A% N. H$ n
printf("\n Geometry option is %d \n", geoption );8 L9 v. Z9 \) F8 N. ?) z+ s
#endif

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

{4 m/ X  d( z. K2 v6 z- b4 x- G
swiTCh (geoption)
5 a% {0 F' D% C: l& z! P{
: ?$ Y/ L8 f) b5 R) g. H& Scase 1:
3 U! g/ C/ {' D2 |+ `2 |case 2:
8 F- w1 {, B/ ~case 3:
$ Y. e: B& |( Qcase 4:# f$ L; w6 V* a- j9 F
case 5: /* Part Geometry 部件几何体*/5 ^2 V( G. i1 e. b- \
{) [( F; z% o) }, ?$ j+ }' g
#ifdef DEBUG; D- g4 G0 y) L% Q# _5 V1 Z
printf("\n Type returned is %d", type);
* x" ~( C, K% P$ f4 qprintf("\n Subtype returned is %d", subtype);/ b8 J& k. ^+ Y7 }4 Z
#endif. z7 h; j8 z5 Y! C5 U
{
5 |: h, D4 T$ D0 Sirc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
. o# u4 K, W3 G+ n+ \5 G" l" Yentity_list, app_data_list );
2 [8 \' [8 x9 f; A- x- ?6 U+ |//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
! L1 B7 p  n  {" w, t0 S//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
( L# u9 o( v2 X5 q) P% h9 x}* s  F7 }4 v" Q2 e: F1 Z- M
if ( irc != 0 )
# @: V: ~) x# ]9 T3 R& I" `$ S- k{9 i' Z, O9 g* Y( h  }
UF_get_fail_message( irc, errorstrg );
" p) Y1 E& l/ r( ]* Iprintf("\n The return code is %d\n", irc);
8 ~$ k7 A/ Y" p2 Bprintf("\n Error code translates to %s\n", errorstrg);
1 D* R) W; f# _' s% i4 ^return objTag;# _! _- [4 s! E* \# D
}
) r1 E5 E7 E+ m8 Gbreak;* w: L4 G6 Z( t
}

case 6: /* Blank Geometry 空白几何体*// K, |6 f; J% R% ]
{" Z4 i4 }, I5 i; b
#ifdef DEBUG
; @( f6 f' c. G' kprintf("\n Type returned is %d", type);$ l1 f+ s  J, k4 I5 p
printf("\n Subtype returned is %d", subtype);) N# t$ u8 S- s2 J) r; E4 o
#endif7 `5 @4 E* Y4 E1 Z
{
5 V$ F3 `0 {' ~) \irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,7 g' K, r% M: m: e
entity_list, app_data_list );: r2 k4 @  N6 y& y
}
1 X1 ^7 X, S7 C2 ?' U0 \( a8 m+ T6 }if ( irc != 0 )
. V; e. ]' B* d5 \# }{8 W2 W* O  c$ p
UF_get_fail_message( irc, errorstrg );9 }- T5 k% O/ b% v. F
printf("\n The return code is %d\n", irc);
8 ^; S; d! @5 I0 @5 jprintf("\n Error code translates to %s\n", errorstrg);
: C9 m6 i! U/ M- j& ~4 k- ^return objTag;
# P& i6 q1 w. R5 n}
3 w* B# y% t* O5 Ebreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/
  p+ D3 a% k' q6 W: v{% {/ o7 H& Y: K  d+ Z$ e
#ifdef DEBUG, }8 p; v, }+ |0 P$ S. a
printf("\n Type returned is %d", type);0 N2 g9 O8 d' }+ B5 i- \
printf("\n Subtype returned is %d", subtype);
9 ]2 X7 H7 A9 R#endif" u  G) f4 Y* V1 Q
{. }% k+ i" p# P' e2 _! Y
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
2 \- K( }$ \: S* h9 B( q) @entity_list,app_data_list);
- ^4 J) o+ y, X6 n6 _}/ s* Y9 L1 j# i) s
if ( irc != 0 )7 N! U+ M& ~8 G- ~, H
{
+ o1 H/ i9 O2 D% z+ QUF_get_fail_message( irc, errorstrg );
5 N2 M+ u' h. d. W$ Qprintf("\n The return code is %d\n", irc);4 P% f3 J" O5 j" }2 O* y" V+ y
printf("\n Error code translates to %s\n", errorstrg);+ d  h( [+ O7 E' R; }
return objTag;0 ?6 W5 L, Y2 _# c3 G. g
}& b, j) t; D' x
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
7 f9 e5 F3 }* `  N% R$ l$ f" `2 G{# L, T* }5 i8 N; _4 e1 E
#ifdef DEBUG9 J. d1 S" @# I! g' M
printf("\n Type returned is %d", type);. i( [! [" W9 L5 o2 i# y' X
printf("\n Subtype returned is %d", subtype);: P; K  l% V( i4 k2 V' g: p+ h, M
#endif, F2 U( Y  X: {  E4 g6 n
{2 e$ _) `* f7 p9 q2 I
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
( N; U# L3 k  z; U7 v# r9 B' qentity_list, app_data_list );9 t- ~; d7 ^3 U4 |: E0 J/ m* `5 L
}
; q8 D; r' q1 {2 P2 Y! uif ( irc != 0 )$ J5 ^4 |0 m- d
{8 x" X& C/ l5 U# @4 d' ~8 K
UF_get_fail_message( irc, errorstrg );
. L& @3 _4 w$ J( q; aprintf("\n The return code is %d\n", irc);4 P0 F" w! v9 a- y) s$ \0 S% G
printf("\n Error code translates to %s\n", errorstrg);: _# \# @" k" u2 i: O6 R  C" C( l
return objTag;
7 e: X+ H/ W# h- f5 w+ n}
) O7 v6 t6 ^4 x6 Y5 p# qbreak;
. n) r, y0 z# M}( @/ @, h. O: }5 C2 Q+ c& }9 e- j) d
case 9: /* Trim Geometry 修剪几何体 */1 n) r+ U; U5 @! G# ]
{
* A& Z& L7 A: E( R7 Y4 tprintf("This case not implemented.\n");; _1 X3 ]* v6 S
break;+ L) I6 F- Z# [' P
}
# J6 \0 g( P. j+ ?( y/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/. K& k6 }$ r6 n% F* j
{$ {  k" x* B* S
break;
- |" e% C" A- p5 N$ I; s1 b' r}4 F5 E4 I, s! X3 O  |* K
}& Y7 g$ N3 d9 }4 F" X! A
}1 s0 i5 i  x+ ^3 d
}) e5 ^' w6 ]& r, n. \3 `( X
}
3 A+ _( {3 T0 R: C* U7 D% C6 j}3 |( g( K) `) t& j# o
}' r; W* n# P5 E
/* Free the Allocated Memory. 释放内存*// q7 E+ g& U( V; ?: d/ Y
for (i=0; i<entity_count; i++)
# Y* o. t. j3 D  Z& E{
5 L4 `3 {+ F9 t* f. L/ lUF_free (app_data_list);8 ?- m1 y' a  z0 f. R+ ?
}

/* UF_free (objects);*/

return(0);
1 W9 ?0 D" D  C  T! ~; |2 N9 I5 u}4 D* N' R  V6 I7 C
/* Selection initialization procedure 选择初始化程序*/
4 a4 E( ?+ |# \! ?static int init_proc
2 \1 B& |( v$ D/ u: t( e% R+ S/ Q(
0 [; O( l( |; G) {: H* U* sUF_UI_selection_p_t select,//指针 pointer, @7 ?6 z4 C5 k2 A2 o2 V
void* user_data
# c6 e8 |+ t, v0 ])/ J, K- o# _: @. ~4 u, ?! ]
{5 J) q# k$ T. n9 t8 W; ~" `
int num_triples = 3;( P; t% n, G/ E: }8 Q+ ]
//最终指定的特征类型
2 O/ A% d. g- K0 qUF_UI_mask_t mask_triples[] = {
6 q- U. g9 M5 B8 xUF_line_type, 0, 0,
, E, s' u7 N9 r5 TUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
& l- c/ S$ c: y8 B) R% ]' g6 R. r+ AUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
# \& H2 P# h3 t* ^2 j5 I, eUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
* ^1 C# r8 N, M3 U5 B7 q" }num_triples, mask_triples)) == 0)//3倍 3*3=9

{
( B) M0 P6 [' E! k6 Qreturn (UF_UI_SEL_SUCCESS);
; e+ ^5 `- S2 _}; S# J8 n( }  ^- ]5 A* n) x
else
5 X7 s$ t1 f( m{
# Z( {; X9 F5 d1 freturn (UF_UI_SEL_FAILURE);, l* p0 d- S) i: X# A9 r
}2 f. F! i3 a) f8 v
}+ |* t  D4 m$ Q
static void init_camgeom_app_data; g* g' A% B+ E3 I8 |+ P+ R# J) \! R$ s
(
. W/ W; |4 h1 ~: A" J! ?0 W' }1 @UF_CAMGEOM_app_data_p_t app_data4 ]: j' n2 c4 P# G# i! Q
)4 I" R1 f/ U0 w9 y) y8 v# w
{
5 N/ @# [0 g( kif (app_data)$ R# E  y0 u5 X1 a$ f
{7 \% D' s0 p9 d4 g1 s
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
8 T; @: K% s: |( Y% g; dapp_data->has_cut_stock = 0; /* Used 1 - Else 0 */6 s. n5 w7 A5 x& O- `7 ^2 x) J
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */6 j* [7 _5 z1 j( X2 N9 {! L
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */+ c+ p9 l6 H3 r
app_data->has_offset = 0; /* Used 1 - Else 0 */2 ]: [8 ?3 A+ C+ [
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
- u) R+ b( j( @" I, s4 P+ Xapp_data->stock = 0.033 ;& m7 T0 ^0 S7 A; k4 r
app_data->cut_stock[0] = 0.2 ;
, T: w. M6 ]  e& p) Rapp_data->cut_stock[1] = 0.1 ;' L- ~6 t/ J: ]: W% M
app_data->cut_stock[2] = 0.5 ;( \% W# P' o- A: J' |6 Q- r
app_data->tolerances[0] = 0.003 ;/ `/ c- T" n) Z7 O, v# ?1 D% Q
app_data->tolerances[1] = 0.003 ;4 p) `+ \' X. z# M+ q
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;3 m9 p  }% ]4 a: X
app_data->feedrate_value = 33.0 ;
# [1 L& N$ l! r" Happ_data->offset = 0.055 ;
1 M1 ~3 t2 F% R! i0 m/ I: U) g# Gapp_data->avoidance_type = UF_CAM_avoidance_type_warning;. X' o6 ^2 ]& V& W* [) ?6 y
}
+ T6 _# O5 Z, j+ H  d  l}

+ b" N$ W! u9 ~. D6 H4 k7 s
上海点团信息科技有限公司,承接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’错误。
5 H8 M4 M* N5 m) Z有了解可能的原因的吗?
上海点团信息科技有限公司,承接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 | 显示全部楼层

: l4 x# c  ]8 r4 V不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了