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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

6 e* n/ ~/ g2 J  ]+ Z/ x9 X% f* f% |: ?8 h

- f" J) p: q! I4 }. B4 s9 a/ B. _# N. o* `3 n# m5 I' A0 \" ]

#include <stdlib.h># l% n  y/ m- b7 d2 y, L
#include <stdio.h>

#include <uf.h>
. g  e  e1 N+ |- a#include <uf_object_types.h>0 U1 x) m- ^- A
#include <uf_ui.h>
; T0 W, x1 G6 K; r; L#include <uf_disp.h>' J/ |: ~! i' [: M8 w, z% \1 F, T/ `$ m
#include <uf_obj.h>
* V, }6 x  m, |& M#include <uf_cam.h>
  J6 H3 H1 J6 Q8 D3 a  [* D#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 200 w' {, ?5 N+ ~$ U( Z$ [8 b
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
" w' N% E: u) d+ C9 Y8 V: lstatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何7 e3 X) q: b+ u7 b
static char menu3[][38] = { "1) Part Geometry",- k& |6 S: y2 \5 {  B
"2) Blank Geometry",
- r' [* {! u4 Q"3) Drive Geometry",/ u% L2 D4 U( M, W: ]5 \9 k
"4) Cut Area Geometry",6 x9 G. c* E2 ]! }4 K
"5) Trim Geometry",7 a' l: I- @7 r2 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 )

{
1 C, U- F# _2 O7 W! \UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
* o& i! |1 k! r+ _7 K* Itag_t *objects, entity_list[MAX_CAMGEOM];8 O* M2 c  a. `( V. h* ~
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";' a0 c6 f7 C* u( H* c
char *cue = "Identify Geometry - Wait for the Filter!";
1 N8 b9 h9 @) Y+ n* Schar errorstrg[133];* w5 b4 q) ~* a7 b# @# y
int response, irc;
4 v8 b# l2 F5 g' l2 E7 ntag_t eid, view;: }6 ?9 \3 V: O
double cursor[3];

#ifdef DEBUG) A; p' f6 R0 i5 ^2 S
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );; I- {/ |; t( U  i0 M8 O
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????- ~% Y' P: o6 m! ]9 q6 F2 y
{
$ p: }0 I8 v$ E" V/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )# q' h' i& U1 E/ I4 [! N  ^
{
1 u# z# k1 _& r5 E  J/ e) ^' tbreak;
- @) w* f/ z+ @5 P8 A}
+ u' R+ |* E9 ]4 m#ifdef DEBUG, M: s0 P4 F+ L% q
printf("\n Geometry option returns %d\n", geoption);
/ x- K9 z; K7 u6 \/ o#endif
6 A# M/ H4 J/ A* |( K9 j/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
9 o; |+ J. Y# Y) r3 N{$ K6 t/ ~9 S6 E2 T2 m& N9 ~+ p% c
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,! C# F9 j  L. s5 W
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,  \# C$ c8 Z3 c6 e/ C. B, X( a
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
3 o: ]  e- K6 a9 |. T! D7 d* y0 T) ^, t//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED): {5 Y0 q7 g* h7 P! @
{& p# `2 W' m0 M: c
entity_list[entity_count] = eid;
! p" O; o" ~; \# Y2 w$ a' y#ifdef DEBUG; ?2 E. f0 H; r- z- x+ [$ p9 u
printf(" EID number returns %d\n", eid );
5 X& E3 M) @5 ]$ L$ E#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 T9 X5 S/ {4 S0 u4 F/ I&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
, |. K* d, a: f* c. [. E}! J, [/ v7 g, \
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )5 W% l- ]7 j6 N% }7 n+ Z! s! o1 ^
{9 J: Y, v2 w; h; F
/* Geometry selection is finished.几何体选取完成 */
& y- l+ `8 E+ |' Pbreak;
/ _$ |0 {# D! K}" v/ l+ a$ a( _7 w6 g' x
}
9 w( A" R+ S' E; H' I! D4 g; G, {% S#ifdef DEBUG2 X) K. h  X7 O9 k8 o
printf(" Entity count this selection is %d\n",entity_count);, x( I* r' w' a% R
#endif

if (entity_count > 0); r! u% f) m( J3 ~3 H, K3 D
{+ I5 X9 h, n% i+ \; v4 G9 C
/* UF_CAMGEOM_item_t *items;- g7 z1 h( h7 |6 z0 ~
int item_count;*/

for( i = 0; i < obj_count; i++ )( w6 q9 K% ]& j/ H
{
8 Y% @! ~7 [( K, Q6 @, I. `irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||3 H9 C: Z( i5 Z2 b: E/ T
type == UF_machining_geometry_grp_type)

#ifdef DEBUG# E# w) p& u% f& G$ r
printf("\n Current entity count is %d", entity_count);* [, D% C3 T5 a: }1 S
printf("\n Current object count is %d", obj_count);
, r6 B4 Z; b0 O1 I. C& rprintf("\n Geometry option is %d \n", geoption );. @, H; y$ ^' x; K2 P  N9 O
#endif

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

{" D0 [# f& ^% S2 t3 X+ Y0 b% F
swiTCh (geoption)
- m7 J# m- i& M- s- [# C6 i{+ ]3 i# ?6 X2 t! D  Y3 t
case 1:
8 k' m+ H9 Y0 v3 ~. y( L: L* lcase 2:: h9 C1 j: s% c+ m9 y; q$ b3 a1 ]
case 3:, O  w* w0 Y6 W; z- f9 ]% g4 j
case 4:
* X2 a  |- W& mcase 5: /* Part Geometry 部件几何体*/7 F  B+ \# P. \) H- @3 I! \
{
3 _* a7 ?+ ^- P1 T$ i#ifdef DEBUG
- G4 v$ K0 C+ F5 S8 C' q" ~$ eprintf("\n Type returned is %d", type);
# F2 ?% F- m4 i7 x$ p# R& _printf("\n Subtype returned is %d", subtype);6 ~  n' Y9 p9 m0 t( e: `
#endif' N( H. ~/ w# X" C% h7 b% f
{- o1 Q- [; m  s
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,% J" G9 F, e7 M$ X0 U3 K' [6 |
entity_list, app_data_list );
/ g+ B' j2 Q! S/ O//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
& e( e$ X& v+ A4 V3 {  H//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。. {3 h3 Z, q- R6 v. h: M2 v3 q; j
}
0 o# `1 o$ \/ X" r- K. s3 Jif ( irc != 0 )) ^% T2 L' M( A2 f6 F
{
# b: U; w- ^- \0 {5 p5 m/ d9 |( yUF_get_fail_message( irc, errorstrg );# a- b5 E' x$ h0 Z- S7 [
printf("\n The return code is %d\n", irc);
, o$ h; u- x5 w  [printf("\n Error code translates to %s\n", errorstrg);
) _! X  X5 g+ Z* w' greturn objTag;: g, ?6 a" d/ j, G
}
8 D8 M, K, O0 a; B" U3 pbreak;5 u/ v/ {% _/ o, {, P/ w( J8 S. D
}

case 6: /* Blank Geometry 空白几何体*/
" m; V% I- s% l* h; I: [{
& j$ @* V0 F2 K#ifdef DEBUG* Z' d: X" R& x! Y' p. p0 P
printf("\n Type returned is %d", type);
% c* [+ y. f! w) h% t$ ]7 o, Qprintf("\n Subtype returned is %d", subtype);1 J: T# [$ Z* }# F2 A
#endif
+ g1 e5 M% J) R7 g{. e; F# J6 s# T6 A
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,$ _# `! M3 k- c) z2 w; g
entity_list, app_data_list );
5 R* W  w' o2 W! }; ^- S}/ \4 r) ?. s$ V: ~4 x* y
if ( irc != 0 ); J4 d9 d1 M/ u# T4 f
{
' U6 j4 k0 t/ ^, s8 |+ ]UF_get_fail_message( irc, errorstrg );
5 |6 a8 x3 p$ ^* ]6 \% tprintf("\n The return code is %d\n", irc);
$ M: o1 B4 ]  J) R5 i' B) wprintf("\n Error code translates to %s\n", errorstrg);, O8 o: W8 g8 `
return objTag;
+ _) t; a0 h6 B. y}
+ m, U3 q; @. q) v! m  O9 e! gbreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/
+ A# A% ~; u: K. Y( z) b: Q5 r{! n7 k% I5 W8 ^2 ?. d( ^
#ifdef DEBUG6 m5 L8 d/ i; B7 d* ~" S
printf("\n Type returned is %d", type);
. p3 Y& y7 n$ O; P% h1 P, s! @printf("\n Subtype returned is %d", subtype);
8 k/ f6 ~( k5 I5 y8 j#endif$ l* {& _( c# G2 d: h
{$ d, H' K" L9 `5 F* S& D
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,) G. ?( G  ~6 {6 f0 ~( X6 [
entity_list,app_data_list);
% {1 [2 f+ h& F" ]  y& {% p}  q; S+ J- G3 f  z* \( Q( i2 e
if ( irc != 0 )+ h) }* g( Q  ^0 W3 q, U
{
- D- l4 |( M# [& |7 l% B1 X& uUF_get_fail_message( irc, errorstrg );
& U8 R0 K, F; u8 mprintf("\n The return code is %d\n", irc);
7 r+ k+ ]' o6 q* y+ Q( o. Iprintf("\n Error code translates to %s\n", errorstrg);
) |: c' u& T; _3 _- e; L" hreturn objTag;
" P3 X+ x( f9 q}
; l" U- t' `. L# Jbreak;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
, Q/ u6 |, {' O+ Y" A0 S+ J{& m/ O! K" _+ `; K2 F; I. L& y4 t) u
#ifdef DEBUG8 c, C, _. K" I
printf("\n Type returned is %d", type);  w) C' U  E4 a, T6 H
printf("\n Subtype returned is %d", subtype);1 |. U# q/ B$ H& x5 J" v5 e6 I0 H' {
#endif
+ c; J& f- e, n# X! ^{" y6 Z1 S. S; _: p! @
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,# v2 e- F4 y) M
entity_list, app_data_list );
+ U% m% ]; u# l! |# m3 ?' v}* F% }& a: Y  x* C8 [: `
if ( irc != 0 )" J, y; Z% M0 H2 a  i
{4 K/ S1 }( f- t
UF_get_fail_message( irc, errorstrg );
2 d! T, R  T$ l/ S+ [printf("\n The return code is %d\n", irc);
; k! b5 h8 m8 ?3 p2 q. Eprintf("\n Error code translates to %s\n", errorstrg);5 {- Z: i$ p% O/ S1 B" a: I
return objTag;4 }. J, y+ ^9 i+ ?* v% b
}
( n" l# G  J- z2 O# G( ^break;
5 o0 B" h  {9 L$ W  k3 E3 J2 w}
. J- k4 O0 _0 @) R1 u8 v: Qcase 9: /* Trim Geometry 修剪几何体 */# A7 C6 M* p- V- f6 c, a# x: V
{2 U4 @2 C( g, X7 F- q5 V8 R# K
printf("This case not implemented.\n");
3 [0 u2 g2 k% Pbreak;. I) A, X" x% x: s  _
}
2 t! i: ]6 T0 l" N. w- s/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/  E9 U$ n9 b$ q# _0 B1 M6 J
{
8 p" J/ r1 F* O: c5 M: ybreak;( B7 ~  y0 v6 c: Q% I' R" c
}
6 r" P3 ^- ^/ o) L}, P! U1 }8 Q9 g( w9 u1 K3 N
}
* Y7 M6 C# o- I: w3 I  |- b}
( _, k0 b9 U* Q: Z}
6 p( J; c' @1 N9 W}
1 s5 A, V7 `9 h5 A/ w}
& m# i+ z6 {3 v3 T1 _$ p/* Free the Allocated Memory. 释放内存*/* `1 G3 N3 Q: I1 U6 p2 g2 |0 T9 T
for (i=0; i<entity_count; i++)- a4 g' E0 ?/ b- X2 }
{
, D# N, z: }0 J* B3 uUF_free (app_data_list);; a, Q% v* U6 @
}

/* UF_free (objects);*/

return(0);
) |+ j; k0 x4 q3 X* q0 A}
8 @- Q1 L/ v7 }5 v/* Selection initialization procedure 选择初始化程序*/# s& X3 Q+ T6 ~
static int init_proc
1 |5 d9 |; [$ C; R9 o% f( f(( i& ?1 B- F8 k8 Y) `3 I
UF_UI_selection_p_t select,//指针 pointer
) }5 L1 ?" K8 y) L; x. Uvoid* user_data. T) W  A0 N; u" ?1 c- [
)
/ Q7 T; n) H& y! {4 z{- C4 S4 @2 ~9 _' B2 c
int num_triples = 3;% m9 X# d4 I$ `! E
//最终指定的特征类型, Y. T4 u0 [& @8 E6 o$ x2 O
UF_UI_mask_t mask_triples[] = {
- P/ a# l+ j* _+ v  k5 u( T! Y! XUF_line_type, 0, 0,
+ r/ T2 K+ e2 c, W% `- s: kUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,. N2 }6 n! |  ?
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,# k6 m$ z- ]1 y/ e3 [# e' \$ {# c
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
6 v7 S% ]3 \$ F. K! k2 h# hnum_triples, mask_triples)) == 0)//3倍 3*3=9

{. A4 r. m# Z+ C/ }5 H9 v  _
return (UF_UI_SEL_SUCCESS);6 R5 i2 i5 {  E. }! K
}
" y! P, V, n+ S$ W8 R0 e# X) O! ]else
  i5 t( O4 c% y0 p, ~: b/ f+ x{
' ^1 @2 v* k* ~+ ]& Kreturn (UF_UI_SEL_FAILURE);  P; j% q# Z8 M; T' O/ y
}
3 w! c* B4 w2 R" `+ i8 W, I( m# h}4 {1 f6 u' Q8 r/ Y0 d: D; m8 I6 s
static void init_camgeom_app_data
" r. J& X. w& ?9 v' Z2 M# s(
  V% {# m' T( a8 v: x, M5 cUF_CAMGEOM_app_data_p_t app_data2 l- v1 P7 r3 L8 Z7 \6 P
)
/ p2 G8 F4 r: @{
- v, H  E' J3 }. ^& Uif (app_data)9 S/ s0 }/ j& s/ L, V) Q3 H
{% M5 z, O/ P1 E2 v8 _, V
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
/ ^/ E) T/ m/ H: G! B9 z- T( ^app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
/ x8 ~8 B6 y$ U) P2 }+ Bapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
5 B. {% R) Q: |# r! a  tapp_data->has_feedrate = 0 ; /* Used 1 - Else 0 */6 F% C! a6 N8 [1 h1 B% \7 R1 ^2 N
app_data->has_offset = 0; /* Used 1 - Else 0 */
2 Z8 O( a8 m; i. x4 I5 |app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
# \  \/ O% e! Fapp_data->stock = 0.033 ;
8 ^" y, c2 Y; x% C0 [3 kapp_data->cut_stock[0] = 0.2 ;
/ L7 Q4 b. H4 v( Zapp_data->cut_stock[1] = 0.1 ;
$ S% x2 Y. h; d# _. k) D. T" Sapp_data->cut_stock[2] = 0.5 ;
8 r0 o* E3 P( r' E& `* capp_data->tolerances[0] = 0.003 ;2 A7 ]5 \5 e0 F& T" x$ l# f0 L
app_data->tolerances[1] = 0.003 ;
1 E6 @. G5 B- Z8 G* L. p( Lapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
: @! v3 ]9 a2 k9 y; napp_data->feedrate_value = 33.0 ;
: M9 V3 h& N5 x$ |/ zapp_data->offset = 0.055 ;6 d0 F$ H+ w3 x5 d3 c: e
app_data->avoidance_type = UF_CAM_avoidance_type_warning;
; [' K( p* Y* u5 p, l}
( [# w' Q$ O8 I! Z( U. Q" [. D* n}


# }6 q0 J( V6 l" y3 {& O% y2 v0 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’错误。
5 r6 N) \5 H0 ]7 Y: J有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

' q, M" U+ z1 R- m8 z) Z3 h
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了