PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

5 c8 G0 B* E; h$ @2 A% ^8 d$ W7 P. r2 v
* ^' A/ F9 s# `. z$ b) j# a0 v4 o3 D0 u! S1 x5 y8 ^% |+ G* O' Y
6 Q1 q) Y0 u( p4 A# D

#include <stdlib.h>9 V$ _" p* [5 L" Z# T1 b9 x7 K
#include <stdio.h>

#include <uf.h>
- }9 E' F4 y$ v3 j; u5 F  i2 C3 j! w#include <uf_object_types.h>  b9 G0 z, H$ P" z* _
#include <uf_ui.h>
& q, x+ ^# L) _, G4 a4 W& t#include <uf_disp.h>
8 }8 p; @) t3 v. m+ E$ p#include <uf_obj.h>/ Y9 o7 t; n1 Z) o8 b, T
#include <uf_cam.h>
) N$ L" b" d- l3 x8 G# Z#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20: w; ^1 v! }9 s
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;9 l0 V1 ]* h6 l  z( J
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
4 s: v2 ?' Y3 N: Kstatic char menu3[][38] = { "1) Part Geometry",7 C1 |4 G1 ~# ]1 L8 t
"2) Blank Geometry",
& i+ Q% G/ p* a2 r6 f5 i7 ^3 }"3) Drive Geometry",
" v, }/ O4 y, D4 t3 ]"4) Cut Area Geometry",* M" t0 O* |4 K+ O; n; F# _! V
"5) Trim Geometry",
5 S/ A# F: v+ }( @, H! y"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 )

{! J9 H# J% d9 C' Q9 M
UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
. J  E. [% q. {  t( utag_t *objects, entity_list[MAX_CAMGEOM];
- [0 P# p8 o2 U( E4 lint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
. b: {) t5 H# kchar *cue = "Identify Geometry - Wait for the Filter!";
3 m4 |; O* T; @0 z4 bchar errorstrg[133];
! }' n4 @8 C/ O. @+ V, H# N: aint response, irc;
( t9 T& C* w- Q9 L, x+ htag_t eid, view;
6 ~; W$ L! q- y5 _double cursor[3];

#ifdef DEBUG
2 u+ R5 E1 C* t+ hprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
2 h' q; q1 }! G: {$ E$ X#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????
$ c& R9 m. s$ B* A4 o. W{' Q3 b! D$ s) v* N6 B4 P
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )! z* i6 w0 P# A
{
: V* ?0 s& b( y  h1 S: dbreak;/ S, Y, s6 U: O
}6 L- z8 L7 w$ I& d# v! z7 @
#ifdef DEBUG
9 l% Q5 ^! R& A# Q8 U+ ^printf("\n Geometry option returns %d\n", geoption);
" t% K% K3 F: v# ~3 i: r#endif
# o' m& |1 r8 ]4 @# z( I, E; Y1 i9 S4 ]/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
0 D) t& I9 W/ T) ^{# s# ~; Y; K' Q5 N* E
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
3 z/ l. G- ~# ]+ r1 [" l% I4 UUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
7 E3 a3 [9 e7 I9 `&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
, Q' e7 n+ v0 A3 `7 S2 N  A8 U) R//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
. `1 r6 S/ Q4 Y+ E7 q{5 Y8 K; ?- W; M8 T
entity_list[entity_count] = eid;
  x/ ?+ j! b. A% x( i3 B#ifdef DEBUG
/ i; _5 D) ^) E1 n: X- ?& D0 }. M( eprintf(" EID number returns %d\n", eid );6 ?- Z3 w: G8 x
#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),4 P3 f) ^' @* I& `$ e
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
" G% _4 l! d+ }: T' d5 l}. r$ g, X7 u8 \! f* Z
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )5 J0 J7 X1 a1 [# V
{
6 M! F5 F! b7 ~% f. k1 D/* Geometry selection is finished.几何体选取完成 */
$ D% s) g5 k+ d9 o; mbreak;) q! U  K8 u  ~2 C6 e; n
}0 J7 M& ]8 d/ e- H
}; g7 h  A  g9 q$ i9 q# |6 x7 M/ L
#ifdef DEBUG* o& X( n9 b: [, I
printf(" Entity count this selection is %d\n",entity_count);
* [, i$ k  J6 Z( @#endif

if (entity_count > 0)! P% |8 ^7 p7 G1 w( y0 i
{7 G+ q% u, P' v! H% e
/* UF_CAMGEOM_item_t *items;% K- y2 K+ K+ C! Y
int item_count;*/

for( i = 0; i < obj_count; i++ )
4 O5 E2 Y. x* q9 o3 Z{
3 |1 u- Y+ {) |: P7 {irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
9 p2 ]  R& e9 [$ y+ X+ g5 J7 @type == UF_machining_geometry_grp_type)

#ifdef DEBUG
( }  o: n) e& u$ Q5 Wprintf("\n Current entity count is %d", entity_count);% a4 z$ n. `: U. q2 s
printf("\n Current object count is %d", obj_count);
+ R9 H4 V# ~( A  p' R# `6 Lprintf("\n Geometry option is %d \n", geoption );
! w7 M; W% J5 \8 D/ \' H. ~. w& ?0 }9 S! f$ Z#endif

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

{, T- P3 Z! d( D4 _
swiTCh (geoption)# L+ N6 X! w  \4 l! N
{2 ]# s1 `7 ~6 O
case 1:% J. q# ~# S& p9 {9 m( g
case 2:
, W* S% j$ _- z8 |case 3:; I5 d6 d+ e# z% ]: ?# A. A/ S
case 4:* M$ Q+ ^- T/ Q, @
case 5: /* Part Geometry 部件几何体*/
7 p. V( T, f: e! r- O- g{5 c, h2 V- w# t, q$ ]* K
#ifdef DEBUG
+ M& t4 D8 p, lprintf("\n Type returned is %d", type);; G2 O7 P3 n8 e. y
printf("\n Subtype returned is %d", subtype);" c1 ^* u; |( _* A7 Q
#endif
  b1 W0 r) T" O) W! h, N/ M{: F& N2 {& b0 {! e0 B: T
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
9 t8 N1 X& x( C( ], `entity_list, app_data_list );
0 I5 i, N0 W' F8 ]# K2 t//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。4 m; B3 G& v6 r1 R
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。$ H+ B4 V3 K8 r& m' h$ j
}, @" A! a: D7 r5 ^' c, G5 x- R/ O
if ( irc != 0 )
) }6 Y3 w( I6 [  n0 E{
# i9 d! E; ]" o) YUF_get_fail_message( irc, errorstrg );# S( p2 e: s9 u$ |) s0 h
printf("\n The return code is %d\n", irc);
1 S2 x1 d. f/ B, o0 @7 dprintf("\n Error code translates to %s\n", errorstrg);0 C$ v. O$ O- @1 q& s# {& p
return objTag;
% `7 Q; L+ w% R( m0 r' A) T}
2 q: B, Z/ ]- Ubreak;
* f* m- |4 y4 n: B}

case 6: /* Blank Geometry 空白几何体*/
$ x. f0 c; ]& X0 h! I9 k{
: n! a- }& g1 a+ r#ifdef DEBUG
' _2 S$ ^  z3 [1 s$ pprintf("\n Type returned is %d", type);# l4 a% \1 q0 N% C' ]
printf("\n Subtype returned is %d", subtype);
( O" u3 W5 |* d$ K  C* f5 l1 w#endif
9 r+ w+ Y1 }( K1 Y7 D) d7 _7 L# w{( ^8 y7 y: B8 U' f( c+ E  S
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,5 s& Y  V% }: N7 s) t  B
entity_list, app_data_list );% j& m* R, v3 s
}; i4 M! V. }5 K/ _! `
if ( irc != 0 )# G  z! l; S9 ]# Q
{0 J! J; |$ z1 f6 a! \- [+ r
UF_get_fail_message( irc, errorstrg );! O$ G2 O9 b, R. n; H( e% V) J% j
printf("\n The return code is %d\n", irc);9 U0 P9 t! |$ |2 B
printf("\n Error code translates to %s\n", errorstrg);6 O& g$ c- f' d  G$ b
return objTag;
- I' f6 A5 p, W& q1 h}
  n! A" E$ X8 F1 Kbreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/- l0 ]( Q- E# i' }3 x
{
$ |' l, B" a& N$ {#ifdef DEBUG
9 X# e; e+ p4 Xprintf("\n Type returned is %d", type);3 W) K. B: w  a
printf("\n Subtype returned is %d", subtype);) v1 E8 A# d& ~' z+ ^: S
#endif
8 O8 \% y+ k7 v, t# E% \{; Y" E, r( g: x( z
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,2 n* h. O. m7 N1 F5 Y; Z
entity_list,app_data_list);1 b3 Q7 e; _5 t8 v0 J+ n
}; c7 p/ t, W! `0 G/ a
if ( irc != 0 )/ t; ^) i4 i; |& f4 y' G
{" n0 z7 n) k$ P; ?; \- a$ B  V4 K
UF_get_fail_message( irc, errorstrg );5 r+ j  l1 r! \4 [5 a! E/ x: n( H
printf("\n The return code is %d\n", irc);
) Y. L8 ~8 u/ D' u/ `0 |; V) t. Iprintf("\n Error code translates to %s\n", errorstrg);
3 {3 G2 t+ Y: Y+ l$ yreturn objTag;% D, U8 e1 Z, Y' j5 B1 {
}/ G# T+ l4 d% h) ^! C# i
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
3 }6 O7 g! O  ~% ~  k; p- i3 t{1 L6 O4 z  D2 H8 S
#ifdef DEBUG/ u! S/ b2 [" Y1 E2 i0 H2 S
printf("\n Type returned is %d", type);
# \4 n4 k8 s2 G' L1 P  |4 F9 J& Zprintf("\n Subtype returned is %d", subtype);6 G: l0 y- t3 F/ j
#endif, j+ f0 s( W/ a7 _
{
4 i' J  d' G- @, U" t& Dirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,8 W( A  J+ M4 c
entity_list, app_data_list );
6 z$ R: g* p, V3 v}
2 J' F  J1 H5 k! bif ( irc != 0 )
" Q6 g0 M  L# d) {3 a' I1 d{
9 P# q+ n! H/ f. W" N1 M; FUF_get_fail_message( irc, errorstrg );5 h6 g2 M7 N2 I# C  a' p
printf("\n The return code is %d\n", irc);
9 Q2 T* }2 y- y, R. D2 s, H8 Nprintf("\n Error code translates to %s\n", errorstrg);
! ]' U% p' t6 l) z: q& `& ]# creturn objTag;8 `3 I6 [; d  |5 e* R3 d
}
6 d0 b0 h: S. wbreak;% B  D3 s8 v  P2 ~' ^
}* U. Z/ s2 Q% \5 C" n/ e7 {& Q
case 9: /* Trim Geometry 修剪几何体 */
% q' B' _# K6 F4 C! h, l# n* E{
# M% |9 ~2 v" ~! Yprintf("This case not implemented.\n");# l' J7 F! h1 y
break;
, [) H  X1 M( Q2 {% \) b) V}
3 B% i( R7 g8 r6 ^  @/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/6 r* A: T+ C  a2 g7 Z7 L# M5 i
{) Z$ V2 e. m1 l! ~2 D
break;$ |8 X* |/ U9 T) [
}
, ^2 Q, l8 i: c8 j4 g6 _0 k: H}
7 f; P3 ]2 ?0 m}  n. c) q' E; A6 J6 H
}& ^  y! E& U6 P% a+ \
}0 T+ U" g! \' q7 T+ {- r9 S
}
$ a1 _- G# u4 G" Q}
& q. q! W) l" m! r$ l/* Free the Allocated Memory. 释放内存*/
6 ?0 J" ^* T  P/ X. |# \for (i=0; i<entity_count; i++): N0 V- @5 ?9 w( n+ I
{' M: q* d& L# W3 q9 r
UF_free (app_data_list);
! D! Z7 v0 K( E( u; @4 G, X8 @}

/* UF_free (objects);*/

return(0);8 u- B3 ]% c  s0 t$ k1 J
}; _1 y9 o+ i! f/ @9 \: `  @1 |
/* Selection initialization procedure 选择初始化程序*/0 y, V2 x5 R* ~, C2 _# O' \4 t0 g
static int init_proc1 P  l8 f" X: b2 C
(
+ d6 z7 O, x8 GUF_UI_selection_p_t select,//指针 pointer
* o$ V. o/ F# j2 h  N, bvoid* user_data9 R; F7 D2 ]6 T' U# ^
)
; @! D$ D' G$ P8 ~/ ^; v{2 a! }2 \0 I9 N0 G# G' H- G
int num_triples = 3;' U4 V9 U0 ~8 H
//最终指定的特征类型5 R- ?$ u+ z/ R. R
UF_UI_mask_t mask_triples[] = {% u/ V5 b5 e; q" |9 x7 K
UF_line_type, 0, 0,8 G! E) ^, J# @4 L
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
6 ~; [. A+ b8 f6 ~* FUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,. m. X+ b) A0 T( C- A' H( Q
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,; ~4 `7 v" V- R) ?% C6 @# S
num_triples, mask_triples)) == 0)//3倍 3*3=9

{
, q8 f/ V* T( s" c1 M2 `* sreturn (UF_UI_SEL_SUCCESS);0 q7 {2 `  @! V4 Q& E- s( Y! \, a
}
3 d: ]+ N! X5 H6 o- Eelse% a+ Z; \/ B& R5 a+ @  c8 O
{/ q% y# \$ o6 ~; @2 J
return (UF_UI_SEL_FAILURE);6 u( H/ @2 X& A- x; i
}
. l3 c2 }6 }$ N& V}
; I: g" R. Z  {static void init_camgeom_app_data; K* Y; F4 q( ~% q2 `- s
(
. u* y* ~" @: L" PUF_CAMGEOM_app_data_p_t app_data6 t8 T1 P4 q* `! N: K& h; d$ Y
)
  t, H! l% f$ s+ P{
- ]7 I/ N- f+ Y  C1 Iif (app_data)+ Y7 Q+ h0 A7 m5 s# g% J# G- n
{
; Y. c  @8 B: Y" R/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
8 k' T: J) i0 `% eapp_data->has_cut_stock = 0; /* Used 1 - Else 0 *// {/ x0 \: L& B; k3 K
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */& `6 n5 x7 D: |& P3 y5 R
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
+ a' D* Z/ Q& @app_data->has_offset = 0; /* Used 1 - Else 0 */
* \6 T8 E6 P6 w1 H1 papp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
4 m3 _. s0 ]2 l/ A0 ~( V( qapp_data->stock = 0.033 ;0 b$ f1 u( ]' Q3 l2 z9 j/ L
app_data->cut_stock[0] = 0.2 ;
) i# n+ g: G1 e4 v- T" \- S+ A8 ?+ o1 oapp_data->cut_stock[1] = 0.1 ;
% v7 J$ U/ {$ L* Happ_data->cut_stock[2] = 0.5 ;* E5 X% Q9 h! x% V! `* c: t4 \
app_data->tolerances[0] = 0.003 ;+ E" ^$ T# u( t' C+ x' C+ I; g
app_data->tolerances[1] = 0.003 ;
  D* C1 I' x+ E2 N: [+ G8 Capp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
+ I$ k- K5 z, {6 C: q0 P5 I/ Napp_data->feedrate_value = 33.0 ;
$ S: S% Z, }# v/ ], qapp_data->offset = 0.055 ;
& k# v0 }9 S( D7 Q& _/ J' ^app_data->avoidance_type = UF_CAM_avoidance_type_warning;
" [5 ?. D  g5 J}
  O" \+ D) q" a/ e) e}

$ v/ [. p' s, Z  ^" P1 Q
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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 u: A. U( g3 s" t2 b8 U) B  t
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

9 N+ |. y! v) F# B9 @/ G
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了