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 7828 5

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

admin 楼主

2014-6-7 10:50:25

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

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

x

# t4 [- ?! m9 c; ~( K8 V& R) v$ W3 i

- J: x9 Y# k* w: N2 b9 d1 ~% L0 t2 i& V, ^8 P5 k9 S" |  t5 N

#include <stdlib.h># H$ u6 Y! I4 ?' u: W# e; B$ l
#include <stdio.h>

#include <uf.h>
, w) B+ P1 F+ L$ F: Q3 ]#include <uf_object_types.h>
5 y/ l2 m/ X) l; @. t/ s#include <uf_ui.h>
: W0 H3 K( s1 m8 F* S#include <uf_disp.h>
2 N* g/ ~' X" t4 w+ j7 T#include <uf_obj.h>
8 |4 h; I- ?( C  P#include <uf_cam.h>% E: I) q: r& ?/ e4 N* {2 n7 U# n/ e
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
! q" A& A( |7 w! L3 D9 b#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;; {( z" H% n( ]
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
7 L, w  k+ J+ b  Lstatic char menu3[][38] = { "1) Part Geometry",  l6 T7 r. ?* p) q! c% {' C+ E
"2) Blank Geometry",
; _9 ^9 G) K- r: r* n, Z2 D"3) Drive Geometry",
9 m: o0 t' J2 e9 w5 I* T  F( ^"4) Cut Area Geometry",' F# c( I5 A, @( \) b9 D% ^$ l
"5) Trim Geometry",
$ s" o6 H: l" H"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 )

{
- e9 r  N' U% s; l+ N) D8 v: `" NUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
  J  s9 p; r2 j5 E& xtag_t *objects, entity_list[MAX_CAMGEOM];
  j( \( A4 p' a% zint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";3 {9 H' c& k% u& D, f7 X$ U+ ~0 F
char *cue = "Identify Geometry - Wait for the Filter!";) I& L8 ^+ \4 j% E. Y
char errorstrg[133];8 F5 x% n8 `& d  V/ u
int response, irc;
' x* V( Z( B+ otag_t eid, view;
) o9 [/ S8 q3 W# z; v! S2 U0 Odouble cursor[3];

#ifdef DEBUG$ u. j# V7 D; \8 `! A1 E% H
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
6 F. n: \; ^! A" u/ Y# \#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????1 j& R) l2 o* u
{
# h5 B& B1 l) p/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )1 p9 r; Q, Q  Q0 X2 W
{
" f, c% i. p( O. a5 xbreak;* z2 L& @6 F2 n  V4 E+ Z! ?: i
}
8 _$ P) o! ^: q& T4 J, J! |#ifdef DEBUG
) z2 N8 ~3 u5 {1 s+ A; Oprintf("\n Geometry option returns %d\n", geoption);. j, _$ z5 [4 m+ t- [9 A5 J
#endif4 u" {7 J  R) A2 O$ D2 t& |
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
% c8 G2 e( v4 ^: Y+ k, r/ B{
+ c1 h" v+ R* w" _0 v: q/ Pentity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,  r; k: J' N4 x% S0 ]
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,# [- {9 Q( ?, o( P9 d
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
& n/ _, {2 v  n+ U% u2 ^//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
; Z& h6 h3 B' ~* @{
* R/ w3 _2 f, s8 rentity_list[entity_count] = eid;
# y( M* f5 m  o) g! x) M#ifdef DEBUG9 a  p; h" B1 g# p% X
printf(" EID number returns %d\n", eid );) M( N3 s/ s$ X8 k, h4 _- s# @; [
#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),
# D4 d" l, M( a1 W&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
6 E7 j  l5 T& C: j: t}3 Q, ^9 ], [$ A2 |% d) J( ]
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
0 Q6 Y; @  H( \, [- f* I{) l( D2 B2 G  w  }. E
/* Geometry selection is finished.几何体选取完成 */
+ Y  W' n  d6 cbreak;0 @7 p- M8 V8 K) c9 p. S' E
}  I1 \8 O, ?6 g/ l1 R
}
) I  I2 e' {% ^) R4 y3 u  ]#ifdef DEBUG& {3 s4 ^5 {5 i4 m, z% c
printf(" Entity count this selection is %d\n",entity_count);
$ r2 \% F* ^6 d: A9 _4 e/ K; W#endif

if (entity_count > 0)
$ m; k: H: c3 ?- B' ]3 R- o{
/ O  p/ F, w, L3 n8 L; R* W+ z/* UF_CAMGEOM_item_t *items;
2 }, }4 I( J( P( kint item_count;*/

for( i = 0; i < obj_count; i++ )
8 F* e- F8 j6 I: I1 ?: A/ |4 s1 q{* S( R8 V% |, ?; H7 h
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||4 {6 w2 S6 z& `% X/ ]5 |
type == UF_machining_geometry_grp_type)

#ifdef DEBUG
& M9 H7 G+ D! o  l; Gprintf("\n Current entity count is %d", entity_count);( L! R! n4 H! G4 k
printf("\n Current object count is %d", obj_count);
" ~- @, `' M. C$ j  Zprintf("\n Geometry option is %d \n", geoption );0 ]/ C$ K# _: E+ o0 H1 G5 M* `* _
#endif

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

{
& a  W, e- ?- e! A2 x9 Z( R9 PswiTCh (geoption)
; t0 s! W  S2 X: d# e3 q1 z" _8 O{
! k4 z8 r9 b4 Y/ {% U- B% ccase 1:* o9 p8 l5 @( a) A5 c
case 2:9 x4 J# l0 N1 m& Q) Q  y% Q
case 3:( C5 l  ~8 @* A1 Z
case 4:
4 R! ]% F5 h4 [; N( j1 mcase 5: /* Part Geometry 部件几何体*/2 T8 i- Q3 i& d' l2 D
{7 u/ l3 B. c, J5 v4 ]/ y7 O7 x
#ifdef DEBUG2 V  w. M9 d, K+ b6 Z
printf("\n Type returned is %d", type);& t- i$ H- G- \" w' R  ?
printf("\n Subtype returned is %d", subtype);: r& ^+ [$ p3 |# g% q
#endif
* ~3 w0 O/ ?7 I3 E5 c& T3 q{1 j0 |; [6 m/ l( q- `+ J
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,) ^8 W9 o. F& [# K
entity_list, app_data_list );/ x" Z9 T6 |; w
//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
; D2 x8 f9 P8 C& e4 r& l//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。2 ~8 j8 k( i4 Q% @
}
' ~8 d# Y4 v$ P% Z, |# R" {if ( irc != 0 ). k3 j. s( [  M1 {9 i7 q
{
* E' z: v# _8 WUF_get_fail_message( irc, errorstrg );
" \# L3 |# j4 L6 K6 Nprintf("\n The return code is %d\n", irc);
& \: r; w  N- u- P4 z& J9 ]' Z+ d2 b+ nprintf("\n Error code translates to %s\n", errorstrg);' m. A9 J: t$ }  ?5 Z, ^
return objTag;
' m6 B9 r5 @( M! `}
/ p4 w% V* ?4 a6 o2 p, Kbreak;4 @: T/ s/ x  m/ _' P; g
}

case 6: /* Blank Geometry 空白几何体*/# ^' l3 @: p! o# A+ `# u
{
( K1 q# U' c2 x# n7 a* p#ifdef DEBUG7 T8 C4 X" |& n; d
printf("\n Type returned is %d", type);
9 e3 h1 @5 c. t6 y- hprintf("\n Subtype returned is %d", subtype);
1 V) z9 I" q5 y( c0 {6 c" g#endif; X9 H1 _6 t/ E) j# b1 a7 S
{( B* r* p: d% W
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
: ^. s; n3 d! j& k( j; \entity_list, app_data_list );. b; y' C7 |4 j# k3 R
}
, F5 o: ]% R5 i4 Zif ( irc != 0 )5 ?# X# i& C6 g5 L' y
{
. x/ u$ q: M  b* ^( \) qUF_get_fail_message( irc, errorstrg );
, y: z4 }, `( W+ u; w7 a$ W3 Pprintf("\n The return code is %d\n", irc);& b  G; D, _( ^4 T4 s
printf("\n Error code translates to %s\n", errorstrg);3 T: j$ _* k( O. `! J
return objTag;
5 b) y- ?8 p/ X) V0 d}
* N7 ^% J8 x3 H& j( P% Q( Jbreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/) D$ O7 ~7 `/ h) q* u4 w1 Q
{5 N( s% ]; c! B: o# |8 N  K4 D1 l
#ifdef DEBUG, c* [! f% g  l/ @  W1 A! g
printf("\n Type returned is %d", type);! \% f1 s6 e# H% o( z' O. n
printf("\n Subtype returned is %d", subtype);: K3 s% H  K: K2 u$ l
#endif) }5 `& j. K; E' F8 `5 E  S
{
& C% e0 W' b, h  L- v( ]7 Hirc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
. y, }6 Y( A0 Y0 Ientity_list,app_data_list);
/ ^% S& t/ Y! G- ^0 q; }# P}* F4 R0 Z* s# u/ Y' B# i$ H% _, }) T: z
if ( irc != 0 )
3 \  F: W  L5 D  h, J0 |5 g( ]0 z{
3 _. b3 a$ U$ `6 l: t! L) {& TUF_get_fail_message( irc, errorstrg );
8 a& u0 l- A- G: `. a1 g! }printf("\n The return code is %d\n", irc);
8 V- Q1 {  a/ e3 r6 F# Mprintf("\n Error code translates to %s\n", errorstrg);+ f1 j8 ?& u8 \8 E$ D7 b
return objTag;: O9 a; s+ O7 o9 C9 {2 K
}
  g# ]7 Z+ {8 `1 y7 }- Ebreak;

}

case 8: /* Cut Area Geometry 切削区域几何体*/* [6 `3 f/ y$ m" I! s+ X" ?9 Q
{
$ h1 a  a, N5 m& @) Q3 o' b# u#ifdef DEBUG
, k+ [5 f$ b3 ?  n" z; {printf("\n Type returned is %d", type);
9 E3 @; [, j/ n/ B& @& iprintf("\n Subtype returned is %d", subtype);
3 [" E- B9 q& ]$ _5 Z9 ?! p#endif( ]8 p. i- p6 z* W3 ?- q+ r! l8 G. M
{
8 m  A% p* u: ^6 o* |  g0 y5 Rirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
' K; k' B& H% s, d9 v. Xentity_list, app_data_list );/ u- X; \0 s2 M& `2 K( y# l1 `
}
: w; _# Y* p' F, p# ^7 P9 ~if ( irc != 0 )
: S" w8 T- g' ~6 B8 e{$ j! e& B/ c5 o
UF_get_fail_message( irc, errorstrg );( p$ z7 Y+ K5 a* \9 t, q* ]
printf("\n The return code is %d\n", irc);
9 \& f* q% s& Lprintf("\n Error code translates to %s\n", errorstrg);2 ]$ q: ?$ s0 M9 m* y5 V
return objTag;
1 |. D) G* w1 H# O6 T# |) k+ }; b}# ^; |) w9 c9 v$ d  e  y5 I
break;
8 E% ]4 T# S) T}/ E. S9 j4 @( Q" _) d& C/ z
case 9: /* Trim Geometry 修剪几何体 */
; F+ V$ y8 j  G% K% C3 i' X{
; Q; ^  }4 n7 k7 Yprintf("This case not implemented.\n");
! U6 H; g2 _4 f1 Wbreak;
* A4 b# r8 S3 P4 g9 g: e}2 ^: ?: f! |1 O: T4 ]3 ^' u
/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/
0 I  c$ F: F! v* G( V{! w, g5 I7 c  }5 Y5 c
break;
7 k& t& N2 v. D}
; A* f1 D0 f) {2 n}
3 S3 y( J0 g- f. u' Q5 t  M* F}
& F' }* h! o7 y8 v# |  ^: a}
' j9 F9 @2 T/ G}
% D. @7 u& w" y8 m}
& [/ U8 o# [3 }! P6 E}
7 @. u5 Z. W3 U9 J  v- o/* Free the Allocated Memory. 释放内存*/$ {: x2 r. I3 @; G# ?" a3 V
for (i=0; i<entity_count; i++)0 L/ j$ r, m. d- k7 z3 m
{
3 Q+ y4 H2 S% Q" J0 H8 rUF_free (app_data_list);, h- H4 A  t" {' R1 S
}

/* UF_free (objects);*/

return(0);5 p6 X- P: k! [4 h" U& x
}8 `3 H: s$ }/ x
/* Selection initialization procedure 选择初始化程序*/; X/ o7 W  |( w6 E6 c. J/ }9 d
static int init_proc
7 X7 n# v: X9 y(6 S- B$ o2 C" Q& R! C# ~
UF_UI_selection_p_t select,//指针 pointer
/ K% G6 V6 x) W4 \void* user_data
1 N6 R# J: q5 K4 i& l)
9 `4 g9 P' v9 y) _8 G9 S* H" g# r  u{1 z, R4 E! v! q6 x3 U1 c) ~
int num_triples = 3;
, z% U9 C0 u) ^/ h6 Q: @% n. s//最终指定的特征类型
* t' p4 Z5 Z7 i# u6 A' H/ @UF_UI_mask_t mask_triples[] = {
0 w, ?: ]7 S# `$ zUF_line_type, 0, 0,9 ~  a4 S9 w; t) S: U% @4 p6 {* y
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,, J2 U1 O# C: G0 y! i! P, s) N
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,% w- s2 L( p$ V! }: Z
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,7 J* K; C' e+ y' M) N1 e0 V
num_triples, mask_triples)) == 0)//3倍 3*3=9

{
0 |/ a6 ?+ ?* r  G4 jreturn (UF_UI_SEL_SUCCESS);
; H% ?. g$ n; G4 F( G# u}
6 Y! n& W, j7 I2 n" C. Pelse0 A' ^% p- b" A* A, b2 s
{1 y  X6 j2 w& O; u' U" `- d/ o
return (UF_UI_SEL_FAILURE);) E9 K& d2 O+ P
}/ X' r. @  L% o
}+ w7 ^1 y& F% x. [* S% ]* ^5 W+ q
static void init_camgeom_app_data
4 z  J$ N/ |) x' K9 c(
3 ]5 }- k9 z, Y% _/ {2 o% CUF_CAMGEOM_app_data_p_t app_data8 O- D% H; R# i2 ^' U; A
)+ d2 o+ X  P+ {  Y
{9 H1 x! k9 W- w! v
if (app_data)7 X8 P- D0 j" W$ d5 C+ Q
{  o. }- A4 b9 s  B! ~; \' q
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
% V, H6 U0 z, ?4 K1 K. papp_data->has_cut_stock = 0; /* Used 1 - Else 0 */7 F6 C/ w+ L4 c( I8 D/ i; j
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
2 S+ k& j' g1 P9 \1 M' @# V2 capp_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
! J: O5 l0 @. }6 D; ?; ^2 Q7 bapp_data->has_offset = 0; /* Used 1 - Else 0 */4 P! K* q8 g4 `( Q/ W
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */0 O! s8 [" J- l! J; |# }6 C  `' j2 R
app_data->stock = 0.033 ;% A9 z4 q6 ], G# R' n/ D
app_data->cut_stock[0] = 0.2 ;
7 e9 {' G4 k7 e6 C2 oapp_data->cut_stock[1] = 0.1 ;5 Q8 D; ?( ?2 y) C: F7 Q+ ~
app_data->cut_stock[2] = 0.5 ;
* p  c  Z5 A' y. L. U4 yapp_data->tolerances[0] = 0.003 ;# M9 h2 N7 d1 v* X3 e1 r, H
app_data->tolerances[1] = 0.003 ;
8 o( I' L# d& w" l. O- N+ n1 uapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;; Q7 h2 E- K- e- ]; z4 L4 L/ R
app_data->feedrate_value = 33.0 ;
" ]3 o. x, o4 W% y) D) p0 K( n$ h1 Tapp_data->offset = 0.055 ;/ R! ~) B& m* \; }
app_data->avoidance_type = UF_CAM_avoidance_type_warning;
5 X/ e7 |9 f. q}! b4 [' }, a) \& N) G! ^) I
}

( _! A1 S1 A) W) m: n' w
上海点团信息科技有限公司,承接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’错误。
* N7 P* I+ i) L8 _  E有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

) k# @& m2 p( \- ^1 b7 ^
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了