PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x
' s  M5 c# [3 \4 O( m+ J

3 m- J: j9 n0 ]4 ^& ?2 E1 d: W' Y; y6 X( F* U: W
! j; ^! @! q0 {$ I+ f+ X9 h# A

#include <stdlib.h>4 n, ^% S% i, j( ^2 Q- {9 u/ n4 D
#include <stdio.h>

#include <uf.h>
! |+ J8 L/ p6 Q#include <uf_object_types.h>
+ O& k4 z, K+ X4 W#include <uf_ui.h>
$ u5 p* h# E% I) Y6 k. L. q#include <uf_disp.h>4 {/ }; ]! ^6 f; [6 g+ f, [; b* O3 q
#include <uf_obj.h>
& f# w) b3 t  c#include <uf_cam.h>
% F' j9 V" Z' Y#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
/ D; K. a4 U) G! B+ @3 {! Z, _& s#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
. T8 q3 Y* ~4 r0 e+ }( f$ vstatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何/ L$ I1 w; r$ {2 c# ?! M' `
static char menu3[][38] = { "1) Part Geometry",
1 d) V! i5 T5 a5 Y* o"2) Blank Geometry",
" o/ o* v' N" l! Q' X"3) Drive Geometry",( l- ~4 ~* I- Z
"4) Cut Area Geometry",4 d0 D- o3 [5 L: w$ A2 S6 c
"5) Trim Geometry",
! ]6 l2 s/ Z/ w! x/ }# 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 )

{
+ T0 d- S) p4 v8 NUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];! I& c7 _% L* E2 {1 l! a
tag_t *objects, entity_list[MAX_CAMGEOM];
0 e& k. l8 g: @2 l! G3 F, eint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
& U0 n4 m% Y5 P7 R0 I5 S7 wchar *cue = "Identify Geometry - Wait for the Filter!";9 W: f8 p% N, X6 R
char errorstrg[133];
4 O" Q- Z; P5 W* rint response, irc;! g6 W5 t/ ]' {+ p6 K6 M2 F
tag_t eid, view;
" N" _, e# U1 X! Y, ~4 x3 d2 Sdouble cursor[3];

#ifdef DEBUG3 h2 o9 R4 q3 w+ a9 M: w
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );9 R6 r5 ~- w# ?1 x+ Y% R
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????. C2 ?9 C) _5 K* y1 r
{) j' q' q+ L' q! `3 l0 P
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
: T3 \( j) Z! {5 M/ l3 j) m{
6 y5 g/ C! n2 m; nbreak;
2 m7 _# N% d* l/ ?8 H3 y* g) Z}
! x$ }% ^2 o/ S! _: L6 }: L#ifdef DEBUG
) J% S/ E  `0 T* F& [printf("\n Geometry option returns %d\n", geoption);
  M3 P, h+ @# Z  N# I1 C#endif& ~  R9 _' J5 k& ^: A+ ?
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )9 Y$ e3 A1 g+ t4 A2 n& g
{. D! B& P% Y6 L4 V. u9 r$ `  R
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,' [2 c7 Q  w4 w! Q( v
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,2 G( q/ z4 G( a( |2 J
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义- V; H) A+ M( d% ~8 m
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
% q; h% c8 }& j7 U& X  l0 [. ~# C, [{0 o3 J1 F& N0 q, B
entity_list[entity_count] = eid;1 q& K+ Z$ o; ]# o
#ifdef DEBUG
5 X% E4 Z9 X2 n$ B) Gprintf(" EID number returns %d\n", eid );" ^$ q5 R' N* c: C; u8 p1 K4 U* p, 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),5 ~% w+ p$ l- L/ B0 r
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;1 h9 S. a5 g/ d/ o( w) k/ L
}
* }# P/ S0 w0 l" gelse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )9 q! L& ~) B! p& B
{9 C3 m) ~  W8 H+ L
/* Geometry selection is finished.几何体选取完成 */! `1 n' u! _6 ?! g+ `
break;
' M3 o' e% [' _% [}
7 Y9 O! X8 P" `: h# S1 Z% Y}; B8 ~" Z' d' U
#ifdef DEBUG  s5 x/ t; F$ Y
printf(" Entity count this selection is %d\n",entity_count);
: I# u0 ~5 l, m#endif

if (entity_count > 0)6 ~% x: X, q" Z; d0 `1 K8 u' c
{1 t4 }* L5 Y* Q% m- `8 ?) ?, B
/* UF_CAMGEOM_item_t *items;
6 F) N5 Q* I  r1 g7 j1 Q) h$ D! Kint item_count;*/

for( i = 0; i < obj_count; i++ )$ v, u0 u- ]/ c- f2 z
{+ s" q- D# C! ]1 y4 `
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
# R# g( X3 Q( m( C& m0 ~1 Ktype == UF_machining_geometry_grp_type)

#ifdef DEBUG
! q: C: r* ~$ E6 i  l" S: z& Vprintf("\n Current entity count is %d", entity_count);3 e, j0 t) A# t' M# c8 P# J, B( L" g1 f
printf("\n Current object count is %d", obj_count);& s$ v& x6 f# `) Y/ s  r& \8 l
printf("\n Geometry option is %d \n", geoption );
  `' X: X5 l2 P& c& O#endif

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

{9 H/ x1 k, P9 a  q# ?/ V8 g
swiTCh (geoption)6 C2 v' H/ k9 [) V3 q
{) _$ B! M. N9 D& e
case 1:
- D2 x8 F# W1 Icase 2:
# _4 V2 |& o* P/ l7 [5 Gcase 3:$ A- A+ b) X, h$ ?8 p4 P
case 4:
+ U/ H7 L9 g' L5 wcase 5: /* Part Geometry 部件几何体*/* h* b5 ?+ y  k5 l& A
{
- Z% c3 z7 V& [0 d, e#ifdef DEBUG
7 N& \8 \, s9 D% ?! e: T$ M% {4 x% Vprintf("\n Type returned is %d", type);( }3 t' I1 k- i% g
printf("\n Subtype returned is %d", subtype);
( V$ F# V4 B3 P5 L6 f/ F( i#endif0 L" Q! F8 T+ z: f; z
{
( Q4 D. n, Q7 K% c6 s; girc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,% s7 x- A  C. ^
entity_list, app_data_list );
- l+ W3 p+ }1 `: G  h+ L//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
( B+ u# ?! N. ?% i) H! v- g+ L( H//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
' I; G7 W0 c  b( L5 Z}$ U5 y8 k. P' P5 _" y& ~" s: j
if ( irc != 0 )
5 U% `3 Q  p1 y& Y  u# O{9 P' W% K4 n$ Y6 g
UF_get_fail_message( irc, errorstrg );
$ D$ y' B' I' Nprintf("\n The return code is %d\n", irc);
- `/ B# P0 x9 j4 O5 lprintf("\n Error code translates to %s\n", errorstrg);
! a4 {+ d) R1 E3 g* {& z7 Y% ?return objTag;
. r. i; A( i+ I$ a  [}3 b- U8 [& C9 x* [7 D2 \  H
break;) z8 _6 l3 V/ B. O% n
}

case 6: /* Blank Geometry 空白几何体*/6 K' Q7 m: |9 R& f9 m
{0 \/ k; f& b  d& |( h+ n1 d8 i, ^8 w
#ifdef DEBUG8 ~2 w, @0 {6 e$ R: W1 {/ k0 g
printf("\n Type returned is %d", type);9 D( E) w6 n0 a) U7 C& A  J( A0 }
printf("\n Subtype returned is %d", subtype);
+ l9 |7 R) R7 ]. e- y! f! V' T#endif+ }# [7 D3 }# [, b7 g
{
" U" i  {" r8 }- m1 w+ q( K: k1 Airc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,+ G3 t, Z( k5 c" @$ G+ j& z& e. W
entity_list, app_data_list );
# O6 I5 p* b2 ?7 w}' n- i( ]- Y: ]* b
if ( irc != 0 )
6 s; m  i3 ?0 U$ d" l! t  {{- N1 S! c: ^* j& c# k+ g$ ~4 k- `- B
UF_get_fail_message( irc, errorstrg );% a) J- U* x# C' V7 f1 Y$ |9 f
printf("\n The return code is %d\n", irc);0 h( r( |' {2 P  j
printf("\n Error code translates to %s\n", errorstrg);2 W& E/ x3 `" [
return objTag;
% M. r, T; R* k# k" D}7 N1 {, B% A/ X% ^# p% B
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/5 q- P  \, @' _, ^! L6 B! Z8 B- n
{
5 y9 `% V/ g, s% |( l& {#ifdef DEBUG, a9 J! b3 y4 y  a9 w- s
printf("\n Type returned is %d", type);
/ x8 ?( l; l& D( }/ j: tprintf("\n Subtype returned is %d", subtype);
! [9 W, E0 M3 J$ Z1 r#endif
' a6 i: ~5 o9 ^9 ~: O0 a7 H{/ s2 p% i, T- h3 u, k4 E+ ^
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,0 d0 z6 y' M) ?7 _. R( f( l4 C2 {
entity_list,app_data_list);5 X5 o' V( {) a- R, K3 t) v
}1 I( e4 l; V; w( i6 H
if ( irc != 0 )
: m- W5 V* n9 ^{, C3 ]8 f& p2 C3 f5 B
UF_get_fail_message( irc, errorstrg );* U6 U: H$ H0 ?- Z( \' c1 v
printf("\n The return code is %d\n", irc);( S. H' Y8 ~( @3 H4 E5 w
printf("\n Error code translates to %s\n", errorstrg);+ b4 Z3 j0 Y4 b/ h2 Q3 w6 B
return objTag;
9 c5 T- Y0 T0 ~. e9 G5 R3 l}: p9 M) C5 ]  R& }, d( r
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
+ b0 i- I. w. p! m{
2 C' Q; i! X8 S* X#ifdef DEBUG
' H3 H1 G1 _4 l! ~printf("\n Type returned is %d", type);
2 I8 G  j2 D8 Zprintf("\n Subtype returned is %d", subtype);2 ?. a2 v* H$ I: z8 F5 \, h
#endif$ _6 L, l* i; a8 f: Z
{( [5 f& Z8 K+ }2 H$ C: y0 h: J+ k$ a) s
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,! f. l2 Z, C# f0 n, h- {
entity_list, app_data_list );
- r* F- p- q% b}9 _5 m8 s, v- d9 b$ u
if ( irc != 0 )
# ?. j6 L: V& y0 C{& w5 f1 d8 Z9 v: h
UF_get_fail_message( irc, errorstrg );
' q5 Z9 n  X( D. I8 R1 B( Gprintf("\n The return code is %d\n", irc);
3 s! w9 k: Z, p) n4 E2 x. ]4 yprintf("\n Error code translates to %s\n", errorstrg);
  k0 Q, K" Q6 wreturn objTag;
* O' |/ @/ ^, v6 T( P! @. s}) k) m2 e. F% V5 n& ?
break;
( d: ]- j. r& X9 E& O( ^}
9 L0 ~' g0 X8 @( P: Qcase 9: /* Trim Geometry 修剪几何体 */
8 Y9 v/ S+ R; s8 }9 e& ]) G* e: Z+ R{
2 l& u5 {1 m5 ]. C& y2 mprintf("This case not implemented.\n");) H, [1 x# Z+ {
break;+ T; ^" {, {4 j5 [" v7 \% g
}4 P9 I' U6 l% D
/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/' G( s- C( o$ s& b8 _5 B; B
{
% b# g, f* |0 h1 Mbreak;9 m. j) f& Z% G0 Z
}
+ U5 K" E- @1 \}
/ ~! \  D5 C" V  l. ]7 H}
" i" Z" q' C- a, u}
* M* E) u7 i5 G, D/ V}3 H- V' U1 {3 k2 n7 j( s
}
( |! k9 s( s( ^}
" }3 K& o# v$ e" e/* Free the Allocated Memory. 释放内存*/
" S: N+ U# A3 h' @for (i=0; i<entity_count; i++)
. v3 p. {% m+ g5 `! t: r3 R{
! f) E5 u2 @# |6 T/ |" {UF_free (app_data_list);1 w- e/ w7 `% o
}

/* UF_free (objects);*/

return(0);: `* S% _2 G8 W1 s( }. f, z+ x8 H
}' T$ `/ @8 G4 c1 z& @
/* Selection initialization procedure 选择初始化程序*/
6 x! _0 v8 t' i5 f& astatic int init_proc$ l( v% k- d( P; Y- Q
($ |9 F! Z  E8 H( N
UF_UI_selection_p_t select,//指针 pointer' ?' y0 G. x3 C# H: b3 ?
void* user_data
% Q$ Y, Z  z6 h)5 N  P; M& n7 r; N0 [; H
{
% T. I- v3 v2 d* s3 Fint num_triples = 3;4 f0 H1 G5 ^' ^9 ?5 }
//最终指定的特征类型
; p: o! I6 c1 l! M- |. W5 X5 X" VUF_UI_mask_t mask_triples[] = {
4 ]$ _% b' f: w. CUF_line_type, 0, 0,/ w/ n3 J4 O9 w+ }# Q2 j
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,. g/ B: @$ K6 S% I' W
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
, V0 l: n) N1 _UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
* s' d5 ?8 u$ V) }8 gnum_triples, mask_triples)) == 0)//3倍 3*3=9

{' x9 k! v$ b* D
return (UF_UI_SEL_SUCCESS);1 H8 x/ O' a: p+ q/ H: F
}
7 C3 J: X4 B( l5 m% [4 ~% S9 a& [& pelse
% [! ~! ~/ U3 H: Q9 Z) A5 P{( D) E% J' K. o6 p1 g( z
return (UF_UI_SEL_FAILURE);# u5 u. x. R2 e% [! N( ^8 f
}
1 r- R7 m$ _* }0 i- u$ E; [3 T}
$ j) H& H$ x% P' rstatic void init_camgeom_app_data
+ c6 I& }3 h( S* |' t( _(* G: Q3 y" y8 n8 x: X& j7 l
UF_CAMGEOM_app_data_p_t app_data
% z' Z! U& z8 t* O: X7 r)* v% v4 p' e3 s4 s' m# `, o8 q
{! {8 h" u, L, A# t
if (app_data)- Q$ q* D; `; n; B4 W' T
{
3 g9 ~( K9 \" `$ A/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */9 m- B! n7 `2 w. N$ X: I; Z
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
4 y7 {3 n: L) W/ y$ dapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */+ [8 {5 a8 G& m0 |4 k; W4 w/ W! x
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */8 v6 n7 m- Y8 x  `
app_data->has_offset = 0; /* Used 1 - Else 0 */+ z% W; e' U9 J5 j
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
7 \3 h6 z1 z1 F* J3 B% Tapp_data->stock = 0.033 ;
3 {: r' c, [, j, I  }0 D- g) fapp_data->cut_stock[0] = 0.2 ;
3 q+ u' S! J% k* o; U" {app_data->cut_stock[1] = 0.1 ;
7 n0 b6 b- D1 m1 Kapp_data->cut_stock[2] = 0.5 ;
% s8 t2 k1 D3 d) w# L5 n9 Vapp_data->tolerances[0] = 0.003 ;7 j9 x4 |  e, J$ A
app_data->tolerances[1] = 0.003 ;% `! M6 `( U) O
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;! D/ r7 W9 ]8 l* h8 C& \' ?
app_data->feedrate_value = 33.0 ;: {) \& W* J: a% c; F
app_data->offset = 0.055 ;$ q9 g9 y6 e& G! n) y
app_data->avoidance_type = UF_CAM_avoidance_type_warning;
4 S8 T) _  K7 U8 L}9 ~6 E1 y$ d6 q) c/ d
}


; d+ v( a5 w. y; t% a9 n0 j
上海点团信息科技有限公司,承接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’错误。, ^& |) J% J: b, x: @* ^
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

" f9 ?% w# D: m7 `* X3 J, u
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了