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

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

admin 楼主

2014-6-7 10:50:25

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

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

x
: }% ~5 k1 f- @+ I7 i0 W; {  E

, r* B/ ]1 U) }& l9 F' w- k; D8 E; x& p+ n/ L" V

+ l; N+ K' A, z+ Q/ _* ^- V

#include <stdlib.h>
' {9 T' N! E- m0 G6 F/ t#include <stdio.h>

#include <uf.h>9 @/ z/ Y" c6 Y" |5 A1 P
#include <uf_object_types.h>% G: q0 ?& F; W: F$ A$ _
#include <uf_ui.h>% O  m) o% R8 A) _9 _9 c
#include <uf_disp.h>& j/ N% Z1 ]* b5 D
#include <uf_obj.h>
5 I; i% o3 }) c4 j" W#include <uf_cam.h>5 ?7 K) u* ?* j% p" a. {2 a
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
/ K( r; K: X" K2 k/ y#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;/ Z# t# V# U) z* P6 v4 j" C
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
+ K* O9 j7 U8 f& F2 astatic char menu3[][38] = { "1) Part Geometry",
6 b( s6 |3 e3 `( f$ @! Q$ {+ \"2) Blank Geometry",+ c" D7 L' _" o1 O' H' m9 p
"3) Drive Geometry",2 k- c9 @( y. E; k! m9 t
"4) Cut Area Geometry",
: S  @+ ~3 |6 M9 ^7 Z"5) Trim Geometry",# E' j0 i2 `1 ?/ L
"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 )

{
4 J+ \7 n& E# HUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];0 M+ @% w  A* s
tag_t *objects, entity_list[MAX_CAMGEOM];, q, r! T" \/ A, }) H5 Q+ U
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
& i: a+ b6 G; N, |+ vchar *cue = "Identify Geometry - Wait for the Filter!";! v# G5 o4 B/ T9 z* Y
char errorstrg[133];5 `7 w4 P4 \: Q0 g) Z
int response, irc;
9 r3 Q; O; D+ y5 Ttag_t eid, view;: Z: ^3 t$ f9 F6 N9 O: |' o/ N
double cursor[3];

#ifdef DEBUG
8 G8 E% S1 k8 u! f8 Kprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
+ ]( I2 U! g" M; p4 m+ t; F# h#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????
* z  G! G% @. A' @{7 K9 q! e/ @  s8 B' K9 q9 e3 r4 d
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )/ u- k6 T+ g3 K" _
{
" Z, c8 ]7 V6 {break;
6 _% t1 Q. n2 C  T5 Z" S. f}
# i% |$ t( H) O& u#ifdef DEBUG9 x- F2 o: z' C+ r& W
printf("\n Geometry option returns %d\n", geoption);
! p- d+ B6 y- O0 c) ?#endif8 ?. [! f5 D0 q# Z+ y. O( R+ U
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
( D% ?' }- i% O. @{) H6 g% z+ W4 u
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
; |+ [! [" U# g1 }8 ^1 M2 l& NUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
$ d; r8 ^) n- S. S( m. O' q&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义( }5 k  ^! G6 L; P# j; m, J
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
1 [6 B) Q0 A. u  u{# F2 a" r* [* A% s9 Q, o
entity_list[entity_count] = eid;( }: F( v9 y: U: R5 Z
#ifdef DEBUG" V& E) k8 d% K! G
printf(" EID number returns %d\n", eid );
/ o, ~6 h9 |2 R  l% D' ?1 S! n1 R#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),
( u; C6 L' ~1 K5 N&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
% \, X! K) ~# P9 S}* |6 J* b, g6 {0 L6 P$ _+ n- G" B  A, S
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
( }% s$ k* ~4 A/ ?2 D0 a1 b{, _$ d2 E6 D1 Q: z
/* Geometry selection is finished.几何体选取完成 */3 i% W# G. J6 }
break;
. N9 V2 L7 `( h" n; t3 @7 K2 o}
- l! s( y5 q: W2 n2 w! b* X}
6 _- S( `3 ]* P8 B0 u#ifdef DEBUG
5 g! ~( ^1 ?, n# _7 x% v* M* u# Pprintf(" Entity count this selection is %d\n",entity_count);/ Y9 d. Q: p  c$ r1 ~0 V
#endif

if (entity_count > 0)
2 H$ x, F' d, t{
4 J* k* ?/ i' k; e, C4 a8 D2 O/* UF_CAMGEOM_item_t *items;; @/ A4 M+ C; B% A( N) M2 w' Y
int item_count;*/

for( i = 0; i < obj_count; i++ )
0 X0 x! i" y, w{4 O, V6 y( _) l% M) \
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||7 m; z. Y9 {0 t* j5 f5 h
type == UF_machining_geometry_grp_type)

#ifdef DEBUG
  J4 j" @) P! f8 Mprintf("\n Current entity count is %d", entity_count);
* U% d& P# Z( j, i# kprintf("\n Current object count is %d", obj_count);: o# Y. C% g- s) F. k1 {- _8 Q
printf("\n Geometry option is %d \n", geoption );4 v5 L; ~9 }# c5 D$ A
#endif

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

{7 D! ]8 x8 R: C: D4 x2 n  I
swiTCh (geoption)
2 ^2 @7 z8 I  W1 U( W2 p& O1 b) x{5 K: l- z( _; l4 Q) |0 R
case 1:* B" D- p* H( m. E- [' t( I) v/ H
case 2:
$ A$ l( V; @5 Y0 l, v: ~/ o) Zcase 3:
6 d- K0 ~* W" S9 ]) }3 lcase 4:& A1 M5 C- v5 z: M
case 5: /* Part Geometry 部件几何体*/3 S) a% K( t$ _4 P
{5 m* G% F0 k; E
#ifdef DEBUG$ Q$ ^7 \* Q1 B6 F: P
printf("\n Type returned is %d", type);3 G: {- N; T6 p* F" W8 F! D
printf("\n Subtype returned is %d", subtype);# i/ H+ a; n; N, R! }( O
#endif+ Q6 q; Q' R% U5 j1 D6 X
{
, B  n' N7 F7 q' Iirc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,4 u4 X  b. f' h/ f& Q
entity_list, app_data_list );5 g( M' x: B+ w* p
//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
- [" j6 O* C) X) ]//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。1 e7 f2 {2 v0 C% w' c; Z3 U1 @5 z- Z
}& v0 [: O6 r, J1 N3 p" N8 }! S
if ( irc != 0 )
+ o2 I; N! n, s* Q( f7 D) y& E5 m{! N' A: }& [# Q. {4 Q
UF_get_fail_message( irc, errorstrg );# a. q6 @. z( Y7 x: X- K
printf("\n The return code is %d\n", irc);
: F1 r' o9 ?* Y1 c( _' Z! f) }2 @% W4 P# fprintf("\n Error code translates to %s\n", errorstrg);' S- H+ L* s* ^, j  I
return objTag;- [; t& t( d( X4 l6 d
}( r8 R* J% a7 s5 v
break;
3 P1 L$ H- g1 N* \& V( i6 D}

case 6: /* Blank Geometry 空白几何体*/
6 B2 Z* P$ n. x/ d- x: P& `; o6 ]{
' w) z3 J+ Q* G8 I#ifdef DEBUG
  d$ |. Z% p) A* }& M# x+ h. rprintf("\n Type returned is %d", type);) j7 J  O: t* k# G! `2 ]9 Z
printf("\n Subtype returned is %d", subtype);7 w0 X" d' |* Z4 j/ D
#endif
( ~* V. Q* d# Y' y& G{
2 W% ^  b( e$ X9 h: Q3 U9 r; Nirc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,! x' k: P- V/ y! v0 @; ^  k' G
entity_list, app_data_list );
/ m( v3 h" |( ]3 Y}
8 @2 h2 M' t+ c, y7 o/ S8 j+ [3 Qif ( irc != 0 )" ^, Z1 f0 q  d3 }3 Z
{( |! _" g# F* W% F  m$ V
UF_get_fail_message( irc, errorstrg );: k" n7 d0 H  q( P5 d
printf("\n The return code is %d\n", irc);8 J: W# L1 m$ H: j4 [4 g/ D5 L
printf("\n Error code translates to %s\n", errorstrg);
/ }$ ]8 \0 l3 H$ d0 W4 wreturn objTag;( x3 I- J  Z- C" x: N. D
}) `9 |+ C. t8 D1 G# [
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/7 `. I- F/ }8 O6 K
{6 w) N( s4 q! g2 a$ p! d
#ifdef DEBUG
3 o* P3 ^& }/ _# D6 i/ Bprintf("\n Type returned is %d", type);
; E0 F  v% H' s2 M* T! t! Rprintf("\n Subtype returned is %d", subtype);
: x2 X# `. F9 H7 S" ~#endif# F2 D% T3 h8 R" C
{$ W" M/ H8 {) v" ?
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count," E* G6 Y4 t* Q  O
entity_list,app_data_list);# t# ^: b. j* W
}
+ y$ B" @% i1 B* q% Gif ( irc != 0 )
) O8 v, m; n* _1 K/ P{
; {& I9 ~* L4 I6 J/ OUF_get_fail_message( irc, errorstrg );
& B( I9 r  ]! `/ R0 B6 _0 i4 m! Lprintf("\n The return code is %d\n", irc);
/ G9 b. P1 x, c6 sprintf("\n Error code translates to %s\n", errorstrg);7 L9 g+ x+ K* Q, g" _
return objTag;; y6 z+ y) q4 r( f' \2 |4 c$ b
}9 A- A  K9 l* Z5 k* a5 V; z4 y6 r
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/8 w; |% }2 X& G$ U; ^! u" _
{5 @/ c3 ?& S  C) q/ m
#ifdef DEBUG
& `( g" z" c- I, ?7 h1 ~* Yprintf("\n Type returned is %d", type);
( {7 K: G2 _- E7 g& I  Rprintf("\n Subtype returned is %d", subtype);9 u7 m# {+ q8 _2 w: w" z* b. q$ U3 c
#endif  ~3 z" z# r( e4 A
{
% Y$ \) K' F* L/ [irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,/ H" @8 U! g( h9 r$ J
entity_list, app_data_list );
( {* n; V8 p  y3 v}
5 p* m3 G* J7 z3 dif ( irc != 0 )
3 A& |& h* n. S& P9 m: _- W{1 H* y. t' U$ \+ W. q. d+ Q$ U! U
UF_get_fail_message( irc, errorstrg );, \$ d# Q+ r2 ]0 I, t
printf("\n The return code is %d\n", irc);
6 e! Q  ^+ m- P0 L' y* \printf("\n Error code translates to %s\n", errorstrg);
( t* S. X5 R6 greturn objTag;, }: H2 U- k# j, [. [
}9 O+ A+ ~+ S1 C) J- }* s0 C
break;* c5 T' r5 H. W1 @
}# i! Q- i' O6 e2 N% `+ [
case 9: /* Trim Geometry 修剪几何体 *// `: f  }- y9 h+ ]! w: R
{. y' c6 }& o, u: Z! ~: ?
printf("This case not implemented.\n");2 J  \' t8 P& l  A8 h" W3 M1 S" P
break;
5 v  Z1 }4 U8 T) N' Z7 X) _}, V3 T  }1 I4 @) D' `* ?: O
/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/: R0 \, }4 {( j5 I5 @
{# B/ N8 L8 U4 Y  W
break;% G2 A+ k/ s4 a
}
4 i3 @% \) F: B% l* W) N}
& t- c7 x  Y/ O- @0 Q$ v  D6 |- g}
7 M+ W2 F' ~+ b}) Q% p: X4 l& e6 i$ M4 H
}; {& i. E4 M" H- C& b/ T  v  m3 U. t
}
$ w. B! g9 O7 j7 j; p& t( @: k}4 g* F' v: Z% B
/* Free the Allocated Memory. 释放内存*/: d8 }3 p5 C$ }8 a
for (i=0; i<entity_count; i++)
' N/ }9 }& H4 D{& j- o# D- x0 Q; s6 ]) B5 i# s1 J
UF_free (app_data_list);
- y# @7 E' r1 H+ H3 R  h+ i}

/* UF_free (objects);*/

return(0);4 c+ T  Q3 b5 g6 c
}/ ^3 z" Y/ i+ j8 T3 C  o' X
/* Selection initialization procedure 选择初始化程序*/& h& r" a% V+ }  M
static int init_proc! ]6 a. f; t: y! d+ v
(: M$ g* L* Z% u
UF_UI_selection_p_t select,//指针 pointer
. N* {; t, A( C0 V' x! w  ~void* user_data* c( e% G  M7 _: o3 W, Y
), S: ]! L. ~' g% o
{. A. u4 ~9 I5 }0 _9 L& K
int num_triples = 3;3 O5 ?$ }0 @5 r1 l
//最终指定的特征类型
6 V# X+ k& ]" W6 w6 |. eUF_UI_mask_t mask_triples[] = {/ A4 x- y; u7 K. N( d
UF_line_type, 0, 0,
# x1 ~( d0 }( U( U2 I8 }UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,* j( n2 l4 ]  H
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
) d* e4 n; d' _% `9 h8 B/ n) [% `9 oUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
3 ^0 K8 a3 h. E' V4 h( E/ P3 x1 ?num_triples, mask_triples)) == 0)//3倍 3*3=9

{* h5 F# u, m! w% J5 z2 q
return (UF_UI_SEL_SUCCESS);
( Z) _7 Y7 O# E2 ^}% Z/ N0 v0 ?/ Y$ S5 g  ~
else2 D6 s8 x$ t1 S: h- Q3 |
{
7 y( Q' t4 P  y9 S0 }return (UF_UI_SEL_FAILURE);7 D2 f( @3 U" F% O# L, H6 }
}
9 v' O& Z0 Q5 j$ m- m/ Y8 ]}4 c& `  T4 k  ~' t/ g9 w& v2 _3 K
static void init_camgeom_app_data
6 P' Z# \5 `) W2 z. w(
9 h, K, P" m. v$ v- [, WUF_CAMGEOM_app_data_p_t app_data
6 h% q, a) O, p)$ z( D6 [" o  J/ z3 k) a
{
; R, [) ?( k4 h! J. Hif (app_data)( E& h- Q" L8 J) }
{
1 H( P/ E9 V4 Z+ R, B/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */2 G: }. m( y, y: ^* q$ H, [
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */* L/ x0 W( V+ ^# D1 B
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */  C: P5 O3 K8 _
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */7 E& ?) ]3 J( W- r$ f# F6 @9 I
app_data->has_offset = 0; /* Used 1 - Else 0 */8 r3 R7 F7 U& F2 ~6 E
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
' u! b1 c* o" X0 l0 B$ I: r2 E; C. Bapp_data->stock = 0.033 ;: F, E9 m7 ^5 E1 X( X; y
app_data->cut_stock[0] = 0.2 ;9 f  f) k; r) J+ G+ J8 D( Y7 q
app_data->cut_stock[1] = 0.1 ;
, ?# l( ]" w3 W, `1 a) Bapp_data->cut_stock[2] = 0.5 ;; N0 @- y; O5 f" o: h6 M
app_data->tolerances[0] = 0.003 ;
) K9 p- Y# [* p" G' K, ~- C2 mapp_data->tolerances[1] = 0.003 ;
5 q7 K& Q% [$ r8 p8 x8 `2 A3 U/ zapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
2 k: m( ?6 @1 r1 K1 d& Q' Iapp_data->feedrate_value = 33.0 ;6 b4 Z4 ^' y5 ~, m- G0 e  f
app_data->offset = 0.055 ;2 ]; d: v% y2 ~! E5 l8 s- q- j- u
app_data->avoidance_type = UF_CAM_avoidance_type_warning;6 n( L# x1 a" j. V" c
}7 \  ?, I+ R; J
}


! X$ Z2 }; c* [5 u- Z! P
上海点团信息科技有限公司,承接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’错误。
! x, n( g2 L5 G. g% n5 Y1 p有了解可能的原因的吗?
上海点团信息科技有限公司,承接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


. s5 @4 W5 Z" t& [+ s) z: C不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了