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

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

( d8 d( ?( t$ k! T9 l3 X% {
+ w% q8 M# U! M6 U9 |- B' q/ K% E- g) r: e- i. w( _7 {) ~# J4 Q& U

: F4 C  S) ^. @3 \6 u2 ?

#include <stdlib.h>
$ W. c7 L% ]6 I; W; [0 P#include <stdio.h>

#include <uf.h>6 q. L# V# F5 P% F- F7 R
#include <uf_object_types.h>
6 z- q. |, R3 z#include <uf_ui.h>+ N: L7 x' i, u8 m- N5 x" k5 n
#include <uf_disp.h>! ~4 u5 G$ L% m3 U8 z4 M* a
#include <uf_obj.h>
1 x( B/ e. K& ^/ l+ F#include <uf_cam.h>1 ]* q% Q# T" z. l( X
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20+ N, p/ N6 x" ^/ E+ D9 ~
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
7 z( r' Y# e4 m3 O+ H3 |7 k3 jstatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
. c) I0 F, A2 t# Zstatic char menu3[][38] = { "1) Part Geometry",
. V) U# |5 b% P7 w2 ^7 M' a"2) Blank Geometry",4 ^% V- q5 @. [! ?. W6 x  P
"3) Drive Geometry"," z! w! a, c8 X2 ]! T- }
"4) Cut Area Geometry",. d# @/ ]6 q7 ^9 E. J* x
"5) Trim Geometry",
1 M' B: B4 \3 e5 X; V9 P"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 )

{- I- G, m. j* z$ r& [
UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];( ^/ u0 b  ~, O) z! ~: y4 w3 g7 g! J9 J
tag_t *objects, entity_list[MAX_CAMGEOM];$ A2 G" O8 d4 y! i! ^5 ~; x) K$ w
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";, Y, a$ N% H& t/ [6 d
char *cue = "Identify Geometry - Wait for the Filter!";. j1 |& {  I7 R; Q2 g
char errorstrg[133];: }: J8 d* \3 F0 l' c1 u. c- h$ E- K
int response, irc;
8 L; ^! q4 j6 ]tag_t eid, view;4 f" W) u, l9 [2 X9 v- M5 M3 c- c
double cursor[3];

#ifdef DEBUG2 r7 U/ H; W( ~+ M4 A% S! W
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );' j; z2 a6 `( r& o! h
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????' f0 |& T7 T( T: o
{) I" q9 J0 K7 E& r
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )* B3 ^" P6 l; G2 H
{
! _) D% V5 X; qbreak;0 B) y& ?( Y, B* J
}% w/ Z6 g9 ~. b7 r+ ]4 u9 F$ W
#ifdef DEBUG
- @) L6 y$ }" G7 B+ i: v; b# Bprintf("\n Geometry option returns %d\n", geoption);" c1 X, W' }0 `* I) n& I3 Q% r
#endif
6 l' m' d( H/ ^  S1 k$ [/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
; k% R& p7 N* n{! Z; _7 L3 B! Y
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
( `' ~( V3 q3 A* a& h" h, OUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
6 [: c9 [2 S, I% ^$ @0 A( K&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
" W1 i( f' |& |% A  c+ }9 `//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
0 {( e/ S% Y4 o{
3 T  s& l9 l) }6 r+ y: Kentity_list[entity_count] = eid;
$ X. E: H) T1 o2 q( \. X: L: x#ifdef DEBUG
( x) d& v0 A8 q7 xprintf(" EID number returns %d\n", eid );; k9 l( {2 l2 ?
#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),
5 Y) l# e2 a/ v3 I) n( F2 z&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
# B* J( R: \& o}! f5 E0 O/ |0 @5 u3 w
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )( T6 A+ y! z" q  }0 W; X
{# d7 ?3 s3 s1 T3 {( @
/* Geometry selection is finished.几何体选取完成 */4 ?% P2 t1 Y0 U+ i8 x1 I: a
break;- s( c+ l2 X( h4 ]( T
}" u( j$ L0 y6 L' X4 G  Y, b! B2 ]
}
3 F% s, N7 J* s. C: L0 |( J+ }#ifdef DEBUG& g+ b2 X" M( O1 d7 h9 J* c
printf(" Entity count this selection is %d\n",entity_count);
% g" i/ I0 _  a9 b+ W#endif

if (entity_count > 0)% R! k8 L6 R% \! M/ \) x: \7 n
{, J- H& c* P$ e; z2 V: `' ?
/* UF_CAMGEOM_item_t *items;
6 y6 q8 n8 M3 G* u0 c5 g# Rint item_count;*/

for( i = 0; i < obj_count; i++ )( U' X0 i. z' g- @1 n" q# z0 [- ]( r
{" W4 J" q# s2 T8 H  h' N; @7 W
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
$ |* K! o+ H( h! z) z5 |% G% r. o4 @type == UF_machining_geometry_grp_type)

#ifdef DEBUG
9 R3 s  L1 z  w8 o& r6 g7 @printf("\n Current entity count is %d", entity_count);
! ~" {' J" P, r( o9 G8 r# J( xprintf("\n Current object count is %d", obj_count);
* N& B0 `5 K& z4 q0 L  wprintf("\n Geometry option is %d \n", geoption );
# E" X6 w; c7 X! r/ ?  u#endif

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

{
; J+ Q8 s7 t' CswiTCh (geoption)
: K2 X2 Y6 S! _1 x5 v) u9 c. b{& T" J5 ?& n: h# Q  ^$ L
case 1:
' ]0 _; {( A5 r. c+ bcase 2:
7 O. i+ _/ s  ]& T. }! \case 3:
6 D+ D2 a* Z' Kcase 4:
, q) }" l; @+ r7 Wcase 5: /* Part Geometry 部件几何体*/
8 c% I. S- W8 ?% m1 t8 O{
+ m+ G% R( c) ~( X#ifdef DEBUG! L. G$ U+ a) Y. A3 x
printf("\n Type returned is %d", type);' K1 C1 [. C5 [7 Y$ _
printf("\n Subtype returned is %d", subtype);
1 _3 a" j) k% q/ i) H% Q#endif
, G3 W# A: b0 K+ e2 t5 [{2 h. n6 X# T3 o2 @+ k3 ?& f
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,; J" M# T: K- v/ L
entity_list, app_data_list );
' N* l2 }. f; R2 v. o# J//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
9 r7 E; l$ e1 w+ A  _7 L* p4 I//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。  L+ b6 U/ |/ m/ r' o- }: _" w
}
9 R7 e7 _6 x9 `5 v6 y/ g( X9 ?if ( irc != 0 )8 i$ [/ z. i; c+ o6 m8 _" }
{. t- M, P& D* E: U9 ^0 o
UF_get_fail_message( irc, errorstrg );' e5 {& c: N+ f) v  J- }1 S
printf("\n The return code is %d\n", irc);
  Z4 k; ]0 v0 Q+ m8 l+ R2 lprintf("\n Error code translates to %s\n", errorstrg);
5 h) p& N$ J% z7 Jreturn objTag;
( e& d$ P  C  F% P' Z}4 {* w; j) y0 U' I4 U: i; t' g; t
break;
* [4 }6 B1 ~6 ~$ O}

case 6: /* Blank Geometry 空白几何体*/' _! C( K# b* s2 r$ c3 J8 E
{4 G3 }! _& O2 ]# ~
#ifdef DEBUG
% N5 p2 N* @2 w2 q& ~, J$ Sprintf("\n Type returned is %d", type);
5 \3 o# g9 B; q8 |$ Pprintf("\n Subtype returned is %d", subtype);
# r# F+ z  ]7 _5 I0 E- A) t#endif$ O2 v) Z4 e/ G; L9 H
{( M) K5 w- A! S. v/ m8 G
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
# h0 h4 U$ x9 Lentity_list, app_data_list );7 Y  y" F1 W- }) I2 d+ G4 t
}- ?7 H( x- ?  b& a$ @7 k
if ( irc != 0 )
) f+ Q0 H) ?9 l7 ^& B7 E{) v+ i) e7 a0 Y0 H- ]. N
UF_get_fail_message( irc, errorstrg );" i* S+ m/ a$ [! y. b
printf("\n The return code is %d\n", irc);
& }+ m4 T5 \/ y( r4 @# y1 d  G+ V+ P, dprintf("\n Error code translates to %s\n", errorstrg);
+ f% P- U1 k, O1 I/ q0 Q+ x/ ~return objTag;
5 F% T. ~1 y8 e}0 ~5 j$ L/ |5 D8 K
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/
( g8 p( v6 u3 y3 o" u( M, e: ^{' ?- R$ D( N+ C1 P1 h" O" U1 Q9 l* j
#ifdef DEBUG( u2 L5 k8 i: B. b9 d
printf("\n Type returned is %d", type);8 i; ?+ R+ a7 J; J  L1 t4 q
printf("\n Subtype returned is %d", subtype);
0 G+ S7 w: a+ f, p, D" F#endif
" K( M% F3 q* I7 n- G' S{
6 [; P0 t: u) V: T9 ^. j7 O; J/ Iirc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
6 E* Y2 x3 H* _- k( Qentity_list,app_data_list);; C" h2 F/ X+ g# x; e
}
, `& a8 Q2 Y# {! O' b% C; q# V7 eif ( irc != 0 )9 v9 e/ i2 i7 Q7 m4 A% |
{
5 G- m4 |) D7 l2 ]6 v% w2 y- dUF_get_fail_message( irc, errorstrg );6 |& B+ G8 V0 P/ @0 }
printf("\n The return code is %d\n", irc);
, E* i" D0 Z; D8 m8 tprintf("\n Error code translates to %s\n", errorstrg);% \6 \, l: g8 E" p
return objTag;
4 S/ U3 F  Y: D- ]3 s7 z6 _3 {: `}' K4 t: y  e4 P3 Y$ q  ?
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/4 H; ~9 K$ z9 P6 _
{% I! i" I6 g6 F. @, \0 W
#ifdef DEBUG5 [+ x4 E$ H& S, O
printf("\n Type returned is %d", type);2 u5 g! I& G4 X' X* n4 ~
printf("\n Subtype returned is %d", subtype);
9 w3 n8 N0 v  z+ [( a0 L) |2 M% X2 J#endif
/ D- E% b6 H3 p) }1 c7 f{
$ Q, X; @9 y0 z/ d2 k8 S: t5 Dirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
3 e7 {; F6 _+ I) X. Dentity_list, app_data_list );; r0 X/ @6 i/ W. J7 f$ l0 k
}
8 d5 O& f( A4 Z% j- ?" Jif ( irc != 0 )- L6 f0 W0 L6 f
{! I0 i' Y6 E5 }5 \9 |, J7 V% z
UF_get_fail_message( irc, errorstrg );$ G; g- w2 I% E. L- Y5 A, e; k
printf("\n The return code is %d\n", irc);- V4 J4 p6 L9 M% _2 C+ Q0 O6 O
printf("\n Error code translates to %s\n", errorstrg);
  q* N. L  r- C) q3 Lreturn objTag;
3 V, I: _, O; h  F+ W}
; X! M3 K" [' d  I# a# D7 Xbreak;5 S6 ^! X3 N0 c) Z& P' L. e  e/ _
}
, f  [: V+ y1 jcase 9: /* Trim Geometry 修剪几何体 */$ m1 k4 d5 [' y* q) G5 b  e
{* B" |8 K- l# B5 A" M2 f1 A
printf("This case not implemented.\n");/ \- ]# [! O2 [6 @/ u( m
break;
; f5 s' V. ?4 P/ R}
$ L5 @- F3 U. R  o; Q/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/1 \9 n. {8 M, p) A3 S7 g
{
2 v( k, p! r0 A0 P& {" L0 J3 E4 Fbreak;8 E$ j; m4 i, f7 L
}/ t5 y6 ]# D( n+ u0 d! L
}
! L/ s5 R( X0 i/ G# _* E}
: m' s8 \+ t. o, z, w}
, D/ u  Y# @: Q  K( u' r( e}$ S$ M- X( Z) S( c( y
}# r: d) p- M% r- n1 E* V' J7 r
}
! D( s$ y+ u3 t/* Free the Allocated Memory. 释放内存*/, y& Y# j) x. D. N; w( ~! L% E1 \
for (i=0; i<entity_count; i++)' Z! Y+ W# Q' P3 y1 V+ _% h
{+ m- `# C9 M4 f0 u- K
UF_free (app_data_list);% u  i8 V' }$ x/ O
}

/* UF_free (objects);*/

return(0);* ?& c, j/ E; \. U4 c" \
}  J7 }) Q+ l( `6 z' d9 a
/* Selection initialization procedure 选择初始化程序*/" v0 }- l( d: s. q2 n7 F
static int init_proc; `0 B# G+ z9 a! G# q$ w& A
(
0 o/ a' u( q" @& h; ~+ `UF_UI_selection_p_t select,//指针 pointer* v- u# \# y: Z- c1 J4 B
void* user_data
* u" j0 w* n8 g0 u" v# O), s- v/ c% C8 a6 Q5 M1 A
{$ [( L% S  N. k3 E  E2 x
int num_triples = 3;
, W2 x+ ?4 W. D; B8 t//最终指定的特征类型
" |$ r$ w4 s0 B$ V7 SUF_UI_mask_t mask_triples[] = {0 _0 s8 t6 x' T1 w3 y& V8 Q$ \- H; K
UF_line_type, 0, 0,$ n+ T5 x8 U2 h9 `# V
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
' C; I. a# n! kUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
2 ]. W5 R0 R5 U- [5 LUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
, S$ }0 C5 I* x% v: A# bnum_triples, mask_triples)) == 0)//3倍 3*3=9

{  O/ ?1 i4 `% C; f+ A0 s6 C
return (UF_UI_SEL_SUCCESS);
( m" `- \8 l  f7 i. \}1 |' x0 C; `$ P( w( Y- P% ^
else; N1 a8 }0 P4 H2 _4 G2 {! g
{
  D0 ^, {# R; freturn (UF_UI_SEL_FAILURE);2 ?9 `+ g% q6 L1 L0 N/ I" ~) r
}# G2 ?0 S# G/ d( e1 C  l
}. X( ]1 p3 i: r+ ]2 ~
static void init_camgeom_app_data) l; Y- Z" t3 k8 N7 p
(4 i3 f4 d! [  U
UF_CAMGEOM_app_data_p_t app_data
+ c0 q+ }8 G+ ~* ^) {4 k) g" s% B; O)
+ ]; o3 h' @: p* p0 i0 z0 v{
* ?! N  Q. d4 m( _if (app_data)
: o: @& t& M! G" D- I( U+ f{4 |7 `/ Z, @5 T5 Q0 t# Y# Q- h
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
7 G+ ~3 Y0 `8 U, e# }+ P1 w: Rapp_data->has_cut_stock = 0; /* Used 1 - Else 0 */2 ?4 f0 Y$ R0 u0 E$ |( Y& Q1 p5 J4 h( {
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */3 [6 {& `2 M" y- o1 z/ a
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 *// l; M* v- Q% Z0 o& H
app_data->has_offset = 0; /* Used 1 - Else 0 */* G3 Z" ~0 e2 E# f( V3 K
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */, q+ y1 G$ D! c5 G& B
app_data->stock = 0.033 ;  f( F+ _5 m* M, _
app_data->cut_stock[0] = 0.2 ;( k5 a" L- c# @1 @
app_data->cut_stock[1] = 0.1 ;" ~4 C# f" N8 }  F: i/ d
app_data->cut_stock[2] = 0.5 ;3 [2 A- U, r: m
app_data->tolerances[0] = 0.003 ;( p/ i0 m& U8 m
app_data->tolerances[1] = 0.003 ;
3 f* O  Y7 P& E& P3 c+ I/ m& j$ Z" yapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
2 \; P; A- s1 a! Gapp_data->feedrate_value = 33.0 ;
3 M! p& n2 X7 \app_data->offset = 0.055 ;# x) g/ J6 Z; D, x5 N
app_data->avoidance_type = UF_CAM_avoidance_type_warning;( g2 [# V4 @/ w4 w
}- X  a3 `  ]) \- o3 [, C. C
}

; K, W3 R" G" `! T- b% A% l
上海点团信息科技有限公司,承接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’错误。3 r, J6 e: D/ T# k/ f
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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


- v3 x5 l0 \: 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二次开发专题模块培训报名开始啦

    我知道了