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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

1 o0 }  B4 N7 L4 c2 M
+ q+ H% t4 R9 b% o+ R. Y$ L6 B; R" I
- W3 C0 N: E0 }# Q  k7 ^' Z  g

#include <stdlib.h>$ }* }7 ^& `, C" V# h2 p
#include <stdio.h>

#include <uf.h>
6 k$ h- o( {. Q8 @#include <uf_object_types.h>5 Q# f2 j9 k" S* Z
#include <uf_ui.h>+ A# L* W# f; p, F. C- g
#include <uf_disp.h>
) G8 K/ _) v! H#include <uf_obj.h>
5 H0 `* l3 T. z) c, m5 }#include <uf_cam.h>  Z, }6 ?0 \2 q0 k- M8 _
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
- @& X: V! H4 A#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
, Q/ E7 U. x9 d7 Ostatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
3 J" L2 q* v( \: ^static char menu3[][38] = { "1) Part Geometry",
6 q. ^( l7 r0 c# Z2 u* L"2) Blank Geometry",
9 Z9 ]2 Y, ~+ c"3) Drive Geometry",
  y7 ^8 Y; t( p6 u% ~- J; m$ u9 P"4) Cut Area Geometry",
( Z; A7 h; h/ C8 O) h) u"5) Trim Geometry",
. ]# E9 c5 H; F( A# T"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 E4 T  a) G+ o6 p  ?( BUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];; m) g) ~* h' {1 C. I; g7 ~
tag_t *objects, entity_list[MAX_CAMGEOM];) {$ M) k1 V7 w9 E0 w
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
3 M7 C+ v: s. vchar *cue = "Identify Geometry - Wait for the Filter!";* p* s1 H6 A8 z
char errorstrg[133];- {9 k6 L9 m  d- F6 B  L; \" `
int response, irc;
) }) i1 t' T1 R4 K. I: R( Stag_t eid, view;+ K% D4 D- R0 s( n
double cursor[3];

#ifdef DEBUG
: S8 A7 ]7 n* z- ?" Cprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );# l) j, t' D4 m, I; N' [4 ^6 Y( q+ {
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????& z# `# \' f* M7 K9 x
{6 `( X8 a8 L" e8 K
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )1 L2 Q, E; `4 {1 L! u
{
  ]: u- o  @8 ?0 F! ybreak;3 C) i* Z' t! y% A7 R
}
( [9 W  U6 e  E$ u#ifdef DEBUG4 q: _, ?1 M3 P( k7 ^
printf("\n Geometry option returns %d\n", geoption);
- W6 U! Z. m' J7 a" v) A6 r+ c5 Z#endif  ?' G2 f: {! A) e# o' U, V
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
+ M3 @0 m& h/ p) a. d0 t{. F6 X+ r7 I$ [+ g2 T+ Q7 c$ B6 L
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
! r# q8 `/ O+ U' M3 F# v% lUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,0 |0 @. B3 |. ^4 y( d
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
9 |/ o. S# j& X; Z//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
2 \4 J7 s. ^- e% S1 ^{& q1 @" W' x9 s; H2 C3 U' k+ C
entity_list[entity_count] = eid;' R$ E0 b( G$ t' ^0 c  n! {
#ifdef DEBUG
0 Y: {3 Q& |# ~/ m# F3 T/ E" lprintf(" EID number returns %d\n", eid );7 s% S) {6 B8 |
#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),2 U- g8 b) D. b9 n
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;3 T9 c- p4 D, u- E5 d6 ]
}8 P. z4 J1 ~; C9 D* m" L- u
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )8 C: T; C4 l. o  A' v% ^
{% _/ S' U  C) m) L
/* Geometry selection is finished.几何体选取完成 *// P" p! j# R$ ~& G3 g
break;/ `" m$ {: u6 f8 u8 M* _
}- `9 |' T% `+ W/ F1 l  r
}" L5 H( A' B+ V' ?7 E5 Z1 }) \# b
#ifdef DEBUG! k; Y$ L5 H3 L. a
printf(" Entity count this selection is %d\n",entity_count);5 v3 C6 {! `6 b" @5 t; C
#endif

if (entity_count > 0)
. a# @% _' _+ R' x0 _; r- {0 B{9 n2 B* \& ^0 _; E6 l
/* UF_CAMGEOM_item_t *items;
5 l: ^# o2 o, e- @6 P, @! hint item_count;*/

for( i = 0; i < obj_count; i++ )
+ L2 j4 d* O, p{5 s3 g0 d8 K7 m. n
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||. ]7 u9 C$ W* `: ]5 ?6 i
type == UF_machining_geometry_grp_type)

#ifdef DEBUG' G  v; j8 w3 O* U& G! q- c
printf("\n Current entity count is %d", entity_count);
7 ^* V" I$ v" H0 Yprintf("\n Current object count is %d", obj_count);9 U& n" G  y/ p1 l; j
printf("\n Geometry option is %d \n", geoption );3 n) M- d4 c5 o3 A( c
#endif

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

{% ~( \( R0 [4 A2 P: [% E$ S- r
swiTCh (geoption)
- t- i( m# y, A$ O3 w! V0 f* F7 O5 O% S{
. S) N8 f2 h$ }+ n! Fcase 1:
: T. Q6 z: P, r$ ncase 2:9 ^) K6 v- s4 ~
case 3:
& L- b/ W) \4 [3 M9 K$ B! Pcase 4:! n: Q) L/ r( V& k& q) \) F  J: c
case 5: /* Part Geometry 部件几何体*/' |( K9 `. j3 y9 m! J7 |
{0 ~' L9 L  T& D+ U
#ifdef DEBUG! W% O( A: h; I+ t* u5 Q8 b# C) l0 }
printf("\n Type returned is %d", type);
3 @# R" ~+ ?  ]) u3 M/ iprintf("\n Subtype returned is %d", subtype);% p+ z: H! Z5 L$ F6 E. b
#endif" t2 g' x! T0 w. z
{" ^" m  V) m! K# H" J% ?6 k
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
! K4 V- q( N" s6 s7 j) Bentity_list, app_data_list );9 E$ V0 O- }1 i* s6 A
//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。& M" s" r$ a9 I4 {# t! O7 _- H1 S
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
5 q9 v& T% a& F) \/ ~}3 G3 D! P: V5 ]6 Q" ]0 Y
if ( irc != 0 )
! H+ p; d# `, e{2 k1 R/ _' U2 x& P' p; I* X+ F
UF_get_fail_message( irc, errorstrg );
5 _& N& Y5 L1 O0 n* M) ]0 Oprintf("\n The return code is %d\n", irc);$ t& A$ i" b, a7 V
printf("\n Error code translates to %s\n", errorstrg);+ |% h2 C$ C" Z2 B: ?' |' j
return objTag;
* D* R, ^+ u4 Y% M}
, o, g. I5 E$ s: M* t; i9 O7 h' {( x  t1 Xbreak;
) ?5 q6 r4 b) M1 Y8 i( a5 O}

case 6: /* Blank Geometry 空白几何体*/+ m/ ^' \4 A9 d( n) y) O
{1 M0 T9 M% }$ D! Q, P: B
#ifdef DEBUG, u* W) c( _* T* |& i$ K
printf("\n Type returned is %d", type);4 r: ~/ U$ e; ]" _
printf("\n Subtype returned is %d", subtype);" h+ I8 f& Q6 p
#endif- W& A1 A1 C* V5 l* p9 }  Z$ P( N
{
) o8 i5 U$ t! W7 _: m' {8 n1 g$ Dirc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
4 \: A  b( q' ]" e& K* f3 W4 Ientity_list, app_data_list );5 D# ]) p* r+ N( W
}, q7 Q2 q1 q1 ~' M' A$ q
if ( irc != 0 )+ ^  W5 S& l# }; S( `
{
- y" p' n/ f, fUF_get_fail_message( irc, errorstrg );1 y% f; T: [, {( O. j5 K& Q
printf("\n The return code is %d\n", irc);
5 }7 |! W* d3 B6 P" C9 O* I# ], g; aprintf("\n Error code translates to %s\n", errorstrg);$ ~) e1 x# Z8 [; \! u
return objTag;8 R$ ?1 S) |* X. @
}9 c& l7 x2 t/ p% h+ j
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/
! U/ C7 H6 g- a{+ L; w2 o1 ~( }- n& C) m4 z( H& B
#ifdef DEBUG
  {" b+ m9 f, k. G% G+ n0 J0 Cprintf("\n Type returned is %d", type);9 g# ?5 r0 Q2 x& W7 b  i' J% c
printf("\n Subtype returned is %d", subtype);
3 \# b" {/ C% f#endif
# V) C6 W! [7 @* T{0 i9 _: Q# n) ?" @# g
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
2 o$ B6 N9 c/ J0 wentity_list,app_data_list);
7 J6 T" t; B6 v' K7 x}4 w1 c6 S9 O& P! m$ P6 V4 V' @- H
if ( irc != 0 ). l- u& Q7 M9 l  V) K% S/ r  Q
{3 q- E9 b! b1 m  H& u' a# S1 H
UF_get_fail_message( irc, errorstrg );  ^! K* G- j* d
printf("\n The return code is %d\n", irc);4 ?8 z# L- h! D0 y! M5 `
printf("\n Error code translates to %s\n", errorstrg);
: J# m) i5 \1 Q  T0 wreturn objTag;3 p" `$ {- k% h) O7 |- e* [
}
7 J4 N/ d7 @5 k# p# Ibreak;

}

case 8: /* Cut Area Geometry 切削区域几何体*/, o- i, ?5 g$ K. Z  ]
{
) W# }* W1 u: a) o( G#ifdef DEBUG
, G1 l+ @; F' u( ?printf("\n Type returned is %d", type);
- g" r3 Y" R$ i- e: J+ Pprintf("\n Subtype returned is %d", subtype);, t4 M! @0 [  ~! J
#endif
: ]2 ?1 c9 c. N6 @) N( o* p{, h% |/ j( I4 h4 d" Y% W+ {- y
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
' G% A# n( y5 q3 Z% z. @entity_list, app_data_list );0 r3 S7 w- |3 H, m) }
}
/ ]# x, A* ^/ A) T; y( Uif ( irc != 0 )
, k! M% Q& j' U% {& N{9 [: z: }1 n4 w( {) D2 o/ b
UF_get_fail_message( irc, errorstrg );; w# o- c" ^' p, F' B0 ?8 |$ f
printf("\n The return code is %d\n", irc);
2 {3 F6 U% s8 r' Wprintf("\n Error code translates to %s\n", errorstrg);6 u+ s( {  M% W
return objTag;
2 x' `; d) ^% p" I}1 |0 F+ j1 T8 q& s; ~+ m- V
break;
7 j7 j$ S% {0 Q4 J}
# Y* V: c$ ^0 d- [8 g, f: ?0 [0 Vcase 9: /* Trim Geometry 修剪几何体 */( C3 u5 k$ W" S4 S
{
) h- C+ j+ c& ]5 g7 t' uprintf("This case not implemented.\n");
$ l: ?3 L1 r0 M$ _break;7 ]: c7 o' e' l$ V; d1 c
}
* O) K: Q& P" h8 ~/ h4 ?2 \/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/
/ f# [, [3 M1 f% r9 e4 V{
! K# k, d7 [3 u0 pbreak;" U1 ?  x0 b3 t2 o% E" X
}
7 t7 `; ^: U9 L8 ?9 |5 S}
  {7 `$ R* o6 }8 q0 y4 Y- A}: T% Q; Q& ~. }) o7 S
}
* b+ O) l3 y& a% s5 ^}  B( s/ S- J* @# r/ A5 g
}" f  p, G0 C- w  v  P( b/ G+ o. X
}! r$ i( k& k( i; T/ T. E
/* Free the Allocated Memory. 释放内存*/
8 U) ]5 q+ v9 @: n7 @for (i=0; i<entity_count; i++)
! a! m* E/ @2 z$ y; n! n! B{
9 ^4 e7 M' k$ P9 zUF_free (app_data_list);! ?8 X" g* m/ P. ]
}

/* UF_free (objects);*/

return(0);
1 E- [4 r. t4 W* s  `& q6 n$ Z}
# G3 }5 }# B- a% T3 H+ n) A/* Selection initialization procedure 选择初始化程序*/& z3 H, N/ O# L* D' y
static int init_proc/ C5 {' ~# ]3 m+ p; [6 p2 _
(  l, r& b$ w6 i8 K; K: E7 |' y5 S! i
UF_UI_selection_p_t select,//指针 pointer
: F( A( q: q7 E( m0 U' Tvoid* user_data+ `- n( u2 g, D) c5 V
)) `5 b$ O0 C+ {- s6 v7 w% N  x( K
{4 L! X7 Z7 C6 _  `/ f6 n
int num_triples = 3;# e7 T' T1 u+ C
//最终指定的特征类型# k- I; Q2 r( U# |
UF_UI_mask_t mask_triples[] = {2 {* \4 B) h( H6 N2 T# C1 G3 B
UF_line_type, 0, 0,
' \; D* ?7 \# E! n2 F0 L, yUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
; b: u$ J9 c7 r2 S, E8 v( GUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
# |" q6 k3 `1 ~: f7 x/ vUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,% j- S9 r7 u% \) f) g( V
num_triples, mask_triples)) == 0)//3倍 3*3=9

{5 I5 p  ?: x8 N. d, l- b! a' a
return (UF_UI_SEL_SUCCESS);
1 b9 T$ B7 y& N8 e" t6 c}- `/ o, N" D  e3 D5 e& G' l' W
else# E8 h+ s- [. _7 D- j- Z  c, f7 |2 z  x
{
6 d, H% H. {0 W- Q. Preturn (UF_UI_SEL_FAILURE);% r( T4 n1 I7 ]) {- L
}
( B4 `6 m% ]- z& z8 s* g}
3 m% ]: a. W+ O6 l, zstatic void init_camgeom_app_data
: U  I6 d1 M6 ]* _6 B4 o: L(- G9 Z( I0 z% \0 q
UF_CAMGEOM_app_data_p_t app_data( m7 g: z% [0 j' d% P& F* S
)
& J: T# i1 y$ i. |( {8 k! s{
$ u5 Q. x; J; y  p7 \if (app_data)3 w% ?" p8 @2 K0 P
{
8 j$ r+ Q& m8 w* o$ a/ k9 d1 M/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */4 l( I& o. T; X1 j  m1 U
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
$ K! A& c! i1 T$ J/ M( r4 japp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
" x6 a- Y6 V+ x; W2 s7 ]app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
* m4 `9 \' T! Y- papp_data->has_offset = 0; /* Used 1 - Else 0 */, Z7 t7 s( p4 k* U
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */. o- v8 Z8 r, S
app_data->stock = 0.033 ;) W: u0 q  C; f* z5 M$ Z
app_data->cut_stock[0] = 0.2 ;
" h. F2 v' {. Y1 gapp_data->cut_stock[1] = 0.1 ;
3 l: q' V1 G0 k5 M5 lapp_data->cut_stock[2] = 0.5 ;
# P) \4 y8 x0 w: l* ]0 k0 d) F! _( rapp_data->tolerances[0] = 0.003 ;: P2 l2 E  Z* B
app_data->tolerances[1] = 0.003 ;8 z6 J  U: P. M
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;+ p6 |5 E8 t' h& m6 Y* P6 i
app_data->feedrate_value = 33.0 ;
6 I3 f+ \* y; v9 J6 Yapp_data->offset = 0.055 ;
6 D* X2 {: w9 R* T- Uapp_data->avoidance_type = UF_CAM_avoidance_type_warning;9 v, a5 A2 B$ |& k
}  ]$ \& M/ h! [2 k: F' k
}

6 T. t$ h) A! v
上海点团信息科技有限公司,承接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’错误。- M" H! A9 r1 \, @4 g% 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


3 Q* E3 x5 t7 }8 K% ?- W8 v4 Y# x不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了