PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

6 H( O3 w' G0 F* J6 ~9 p& D/ F1 e4 }# W& a1 k9 h, k
5 B* n" Z0 v' a9 T4 L

; f# N# f4 U% ~+ W; r0 \1 T) ?

#include <stdlib.h>
) H( ^7 H3 s2 b4 M1 ], V#include <stdio.h>

#include <uf.h>6 X. l* o- F( a3 n
#include <uf_object_types.h>! s- e4 m0 T3 W& T
#include <uf_ui.h>
1 @8 l7 P) i& m: e8 c/ b#include <uf_disp.h>
; `7 s5 k8 b) e& n; G#include <uf_obj.h>& G" C' ^; P4 M# W" D5 X8 E
#include <uf_cam.h>
) Q) d. M+ @/ v4 }#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 208 q- E( ?$ ~( e9 e/ u9 F5 ]: K9 c/ c& W
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;0 d. Q' c; I, F
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何6 d: a( Y- P: p1 l
static char menu3[][38] = { "1) Part Geometry",
8 K+ h' g! h5 e/ x, Q3 L"2) Blank Geometry",7 `3 r( {% k7 d3 L1 r1 L
"3) Drive Geometry",4 H1 S/ h* F4 Q% S+ Y. o8 o; w
"4) Cut Area Geometry",
4 q/ ?/ }( V1 z& o& G& l"5) Trim Geometry",
8 S) }/ r8 H# {" Z"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 )

{
* K* o$ d5 K9 L6 }. r  dUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
. Y) Y' A/ c: k- f- J+ z% |tag_t *objects, entity_list[MAX_CAMGEOM];  t# `4 S2 o7 [9 d# U
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
3 g8 }  V9 H0 r$ k3 M1 ^% o8 vchar *cue = "Identify Geometry - Wait for the Filter!";6 R* e( Q$ z# W% t+ [
char errorstrg[133];& y' E6 ~2 V& }$ K8 V
int response, irc;! p; a& F- ?7 ^7 u+ k; b" Q
tag_t eid, view;
  L8 o! O/ o9 n4 L0 Y9 \double cursor[3];

#ifdef DEBUG
0 `  ?( o! w* Q1 z/ e4 |printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
/ [4 g2 w5 d' a7 H#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????
  D" W0 ]2 B- }6 t7 l{7 y! ?9 _% z* K
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )( B6 J& w# ?/ t
{$ I2 O8 A6 V9 ^: m7 W1 u$ k6 Z
break;7 k5 R2 G* R% @' n; K0 i& C
}" E+ y6 L; o6 [, b( f. D/ b" e
#ifdef DEBUG/ \9 D* W& A* j! Z; l, @+ U- T( B6 M
printf("\n Geometry option returns %d\n", geoption);
6 H7 D) ~8 R: O' _. }/ ~" D/ C#endif' U' y* @% e9 T9 S' c
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )' a6 O: h1 I! V, A( @& e
{
0 K+ N! ]. i3 \+ @4 ^( y+ S/ tentity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
/ o' o% e% B7 h4 B) A5 IUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
5 C/ X2 @( _- a* _; }# ]&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
' q. y- Y& }3 B//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
! w  B( q2 a: Z0 b2 P{& O; [+ k" E3 i: l& t. N' H3 {; X! |
entity_list[entity_count] = eid;
7 [1 q2 K- F; V  j#ifdef DEBUG
9 c7 l" J5 Y' z2 M6 z4 aprintf(" EID number returns %d\n", eid );+ i. y/ U1 S0 n. @
#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),- c0 Q3 v5 x8 u/ P
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
; w$ }& v( ^8 b5 `% O; c$ C4 M}" _! z2 M! k2 x( j" q0 N
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
/ \6 A, v0 G! V# I+ ~3 I& V{
) j9 b8 A! U/ `+ ]7 i/* Geometry selection is finished.几何体选取完成 */! T) ^( w1 h: m! p( ~
break;
% A1 t/ {" A5 s& Y! D  X2 f}
+ X( \8 f: i+ e% F/ f! g}
3 s2 U, `: Y1 T( V0 o& r9 l% d#ifdef DEBUG7 ^) x+ m/ s6 s! j$ q# Q
printf(" Entity count this selection is %d\n",entity_count);3 M5 L7 S% K- s9 A4 m
#endif

if (entity_count > 0)
% _9 M* x- C- i. u# v  ?{
$ N8 C9 ?! d% `$ S) s; Q/* UF_CAMGEOM_item_t *items;
1 O3 L8 o, G# Pint item_count;*/

for( i = 0; i < obj_count; i++ )2 F+ p: d$ ]1 y8 Q
{3 \6 e+ T/ S4 N- z- ^0 M. c
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||8 r7 U2 j8 F) ~- @! C2 J6 g9 w9 d
type == UF_machining_geometry_grp_type)

#ifdef DEBUG/ u: U: K  K+ e4 E4 G
printf("\n Current entity count is %d", entity_count);2 n! v, H$ O- }# T5 q1 Z9 Y& r: x$ j
printf("\n Current object count is %d", obj_count);- O& s9 J7 ^' H
printf("\n Geometry option is %d \n", geoption );& X! h8 [1 r. A# A; [! ?2 A. f
#endif

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

{
3 }. P5 a5 P" f5 a8 qswiTCh (geoption)
1 {. t) L, t+ G. H2 D$ u1 z6 l{5 v% P) C' P9 b, g$ e0 q
case 1:
; Q& X/ Q6 V$ c) b8 o' kcase 2:
' z5 L' P+ [# x6 X( }) U. Xcase 3:2 F+ ~; h( B; R! W. B% }
case 4:! s: `& ~8 q4 g1 e; A7 c9 S' y. R
case 5: /* Part Geometry 部件几何体*/. J5 m% A( G/ u
{
/ y  T: M; l2 y+ {- G7 ?. }/ [#ifdef DEBUG
7 {+ N5 c+ K# A5 G0 [; ]printf("\n Type returned is %d", type);
! ]% |6 v( }( P  G2 s: h. fprintf("\n Subtype returned is %d", subtype);
1 o+ L) B; W7 s, c' ~; i#endif, A2 r/ w) q* @! D5 I0 l
{
# R' {! C2 r; ~" `irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,; f- n2 g2 l; Y  v
entity_list, app_data_list );
6 f2 u/ x4 i- h; _//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。# }( x, M' x/ K% d
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
8 f; r$ t1 q4 i# _) ]}8 v8 i$ @9 S# \) J3 C- T, b: e
if ( irc != 0 )
2 s; V* W" E9 X1 Q{
- m: B  h4 p; K& L; m3 n# fUF_get_fail_message( irc, errorstrg );% P$ G8 \3 X- n
printf("\n The return code is %d\n", irc);
1 U" \* o# i1 I" h( z- X6 hprintf("\n Error code translates to %s\n", errorstrg);4 }- H: O& N# J* \3 C7 H/ Q# D
return objTag;
9 d% @! `! T+ }0 N" S}# ^/ s: S- H6 |; K9 C/ A; i8 L
break;" a. B2 U  ?- S, Z# e
}

case 6: /* Blank Geometry 空白几何体*/7 D- u# y# U. p$ c8 t
{8 Q. U5 z! `! s' t9 |1 Y" k  Y6 a
#ifdef DEBUG3 x& C2 }% k4 N* V, q8 A( L& s
printf("\n Type returned is %d", type);
4 r- i2 n4 M9 \# ~2 @printf("\n Subtype returned is %d", subtype);2 }% I. Z6 C# d: Y/ S$ B
#endif
7 ?1 f! K' F4 m) C1 e{
) ]. T5 X6 y: Y# D2 i+ }  A. [irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,3 h- v' o4 G. s( B4 h
entity_list, app_data_list );
4 D. W3 Z1 a. q, o}
, _: n' {: r+ h+ C8 Nif ( irc != 0 )
& [, I. H. R7 t+ N) L; F{  W/ k  q! Z0 n* h
UF_get_fail_message( irc, errorstrg );( x, o# r, Z( p" {  H& U1 l9 w$ M( h# V
printf("\n The return code is %d\n", irc);
( E9 k/ P+ g+ G+ [printf("\n Error code translates to %s\n", errorstrg);2 Z' P: c/ o0 ^/ s* _& M+ F1 m
return objTag;
0 |$ c% \8 W7 {; G}' ?) p* N) h3 E
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/: W. R6 V2 v; B  N; p
{
( c( e- Z3 h& u0 z#ifdef DEBUG
( g0 [. L  p( l% L; b* Y/ ]4 lprintf("\n Type returned is %d", type);
& P' z' |7 H0 K/ V# Tprintf("\n Subtype returned is %d", subtype);
% k1 I- N6 B; \2 \) M0 N#endif
  V" `$ s2 }5 e' u9 E$ f, Q- S+ Y{( F; r) X5 |/ I5 O
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
6 B9 G) I' s2 W) L) centity_list,app_data_list);
2 {8 v: J$ J6 j  C. \}/ l7 T6 y- W2 p9 w6 N2 A$ b, E* |
if ( irc != 0 )9 _; p5 ]- Z" K
{, z( X) R+ ^- \
UF_get_fail_message( irc, errorstrg );
7 S/ H# O3 D: {& X, Fprintf("\n The return code is %d\n", irc);
2 g/ U8 Q  x0 a3 M7 lprintf("\n Error code translates to %s\n", errorstrg);
- x* [0 u) r+ O8 ^: H' ]return objTag;
  c9 f4 x! D" g0 F" {1 _9 g: F- X}5 J8 v+ u( c/ a0 R) D1 h* f
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/6 E0 v, S2 R! v
{( s& P, I+ I# _
#ifdef DEBUG: k/ m5 G3 |4 }3 d& Y, D
printf("\n Type returned is %d", type);
/ p3 z8 }* h; p2 M. p5 B$ @printf("\n Subtype returned is %d", subtype);
+ Q4 _& S6 D- L5 N4 |  ^0 E#endif
  j  {' i  {8 n) S7 ]{- z1 y0 O$ f4 d9 [/ T( F
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
+ J# ~- W6 A: p% G: r' kentity_list, app_data_list );) X+ O$ T* n$ K& [% e) P
}
  f" ?& ~6 ^9 R* @. Rif ( irc != 0 )7 }7 I6 p8 t; y% p. O
{
  {( ]' Q( J" t# w( v* V+ ?+ S/ hUF_get_fail_message( irc, errorstrg );
- v/ b7 l  P& B/ z/ \. }( j% g# |, X0 Hprintf("\n The return code is %d\n", irc);
$ u, v1 ?5 n. V2 C6 H2 z0 {' Gprintf("\n Error code translates to %s\n", errorstrg);1 r9 M1 q5 G0 _9 {
return objTag;
" s" C; |: @3 S9 f: o" q0 c2 m}" S) s8 \" E3 C1 _" N8 g4 ~
break;- A; X+ W5 \4 o6 H
}8 ^4 H/ W( k  ]4 M+ H( l/ v
case 9: /* Trim Geometry 修剪几何体 */8 A( g+ N/ `# y  [* a  ~8 k" w0 u
{( G  H6 \! N4 v% j& I
printf("This case not implemented.\n");
6 O- H3 h( i7 Pbreak;6 \9 ^& _; B, z; |) a
}
6 z- Z( k, }' ]) R/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*// K4 B; J0 H% t" M! w
{
, ~- Q  |/ x' Y1 G( xbreak;# K' c" q) t- G9 t5 h* |/ A
}' {# ~" U- c3 g
}8 `6 G9 S0 Y; x9 N- m3 c
}1 d! [: ]  _, R+ H# T2 Q
}
) v9 e* v  \. L4 g- H}
# y6 }8 I  n: j/ z}0 e3 d6 N7 }8 N) m( p7 g
}) E  n# B8 ^7 K  V( c
/* Free the Allocated Memory. 释放内存*/
: ~# v/ w0 W" i2 lfor (i=0; i<entity_count; i++)8 G; G: H4 i2 b
{
, k, f0 L+ ]% ?+ Q" X) |% T0 zUF_free (app_data_list);) Q5 \& L# C& L: g
}

/* UF_free (objects);*/

return(0);
  Z3 {7 |* E! S) d) C) p8 v}8 F& l' J% S; |7 p' a) a
/* Selection initialization procedure 选择初始化程序*/
6 k+ a2 M) t. [* p7 J& Z( b# ustatic int init_proc
) D: i6 Z* ?+ D( _! T9 X(
2 H! ]. i7 o3 c7 BUF_UI_selection_p_t select,//指针 pointer
5 A6 ~  B" q, @void* user_data6 o3 R% j" [6 J/ F
). k* i" A9 a# F4 U) O
{
. r6 i  R) Y% b8 t! I" |2 pint num_triples = 3;
% h3 V' H1 c/ C8 [3 e& E+ h7 l//最终指定的特征类型
7 l* l0 ^% q5 j# ~" G- C3 v; VUF_UI_mask_t mask_triples[] = {' s" @5 y- d. m1 M
UF_line_type, 0, 0,
: b& \; }" ^! w5 M0 oUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
6 r7 B- o. Z$ w; kUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
! E* z% u3 q+ t# |UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,& ~& d$ v1 K& \
num_triples, mask_triples)) == 0)//3倍 3*3=9

{( X/ Q( c/ q; f! v/ G* B6 f$ P9 a. y
return (UF_UI_SEL_SUCCESS);
6 f0 |7 R# }9 R" D1 P" l' U' E8 }* f}; X% G3 K3 \" u4 \  b
else
  T) ]. _0 H" t! `9 C{  R! _4 M+ l+ B+ E; I: t
return (UF_UI_SEL_FAILURE);
) a) f' `  ?3 f% O/ D1 A+ t, M8 k}
3 }5 |0 E: ?$ I8 b' H; d9 O, s5 s}8 T+ W1 Y! {- f
static void init_camgeom_app_data
$ o8 o5 c6 R" V* C/ F+ E& O(7 m3 m2 \2 O. G  Q5 H* {
UF_CAMGEOM_app_data_p_t app_data
& U1 M" }/ x$ ^! b/ M2 |- Q)
$ o; b9 e% ~# B{' k  f2 J7 |6 J: W& r1 M
if (app_data)
* h3 Q. H" `& A* ?- q{
; E6 E$ \0 S: g- x8 X- R/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */6 ?; p% ~' R6 C! H. U7 r& d2 Y) L
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */, n2 ?+ X$ q) t
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
  w/ E2 r# D, L1 u' Z% F9 [app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */% _% ^5 @; e& d2 |7 ~- A- L) Y" L
app_data->has_offset = 0; /* Used 1 - Else 0 */4 g. ?; W4 q8 K
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */4 [/ S* x" V% M  K
app_data->stock = 0.033 ;
% ?1 w0 S3 k3 b! l" r, Q( J5 Rapp_data->cut_stock[0] = 0.2 ;
: y( R, [% t9 a# Uapp_data->cut_stock[1] = 0.1 ;$ ^- t! ^. l* F3 v
app_data->cut_stock[2] = 0.5 ;
* Y: R" f! y' ~. D# \9 i. A) iapp_data->tolerances[0] = 0.003 ;
& \6 R) ?5 ~5 u. ~+ t# @app_data->tolerances[1] = 0.003 ;: o9 D" I2 Z$ h2 |" O
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
- N1 [7 A6 u5 G% c2 t* D1 lapp_data->feedrate_value = 33.0 ;
/ K% P- Q# q% B5 j5 U; Papp_data->offset = 0.055 ;
/ g; j$ W5 V. qapp_data->avoidance_type = UF_CAM_avoidance_type_warning;) {3 S) ^. W& k9 w) _$ V( P" N$ I
}
6 Z; Y& E: C# }# [& T$ X3 N}


5 A& Z! Y: n2 ~0 {  {; x% l5 X
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 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’错误。
7 f: e% n1 h! |# z) l' i1 K( d3 Q有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

9 X, w' t" |2 |4 ^  R9 l0 `
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了