PLM之家-上海点团信息科技有限公司(doteam.tech)工业4.0数字化软件官方知识管理平台

查看: 5130|回复: 5

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

  [复制链接]

2098

主题

3300

帖子

6万

积分

管理员

PLM之家mildcat

Rank: 9Rank: 9Rank: 9

积分
61652
发表于 2014-6-7 10:50:25 | 显示全部楼层 |阅读模式

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

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

x

" N6 [; m5 z5 T" ^% G9 n- J. h( L
3 v+ `' @% ?! V& s5 p7 g4 A' z
& r/ m' T' p% n) ?% w
% s  x% P4 }% V5 Q5 m' U* {

#include <stdlib.h>  J  c% u$ [: H
#include <stdio.h>

#include <uf.h>( ~. M# g2 C+ D, y
#include <uf_object_types.h>
& p, L3 \' q( n4 d8 I, @#include <uf_ui.h>6 ^, d! N6 [+ ]. V7 Z- u; i- ]
#include <uf_disp.h>
( g7 S% i5 l& p4 n* T4 @7 F- H#include <uf_obj.h>
! l2 U, r- t: p6 A4 @# c#include <uf_cam.h>/ U: c: a% F4 s, U+ ^9 e
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20+ Z; z2 e+ P2 ?+ [
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
; b& D5 E5 \+ v* o5 Y# `0 rstatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
8 R7 m5 P% b' Y* n" E% jstatic char menu3[][38] = { "1) Part Geometry",' ^5 j& M( x& L, R: c1 q
"2) Blank Geometry",) H' ^/ ^4 e' S& k" @
"3) Drive Geometry",
7 G5 k; g% ~- ~4 N7 y"4) Cut Area Geometry",0 H+ W+ |7 S7 h
"5) Trim Geometry",8 G) ]; n, s/ k+ K2 i
"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 )

{
+ Q5 M0 I' ^4 Q/ V$ y' ]7 iUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];- W5 g7 d. P* N  W' Y* Z: g$ w) L
tag_t *objects, entity_list[MAX_CAMGEOM];; E- b2 G: X$ t" D
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
$ X* H, Y' G& c: M# G- D( {char *cue = "Identify Geometry - Wait for the Filter!";
" m9 [2 f" D; W1 U# Bchar errorstrg[133];
* @1 M% N5 G3 e  vint response, irc;. u: n$ q0 L8 j* z" A5 @+ S. X
tag_t eid, view;+ T9 V/ H) t% F/ K* C7 Z
double cursor[3];

#ifdef DEBUG2 C$ r3 @, j1 b  ]: q% h3 N3 I, w
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
8 a0 p1 f, o# b6 H( Q, s! k#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????4 Z3 E" x$ k7 ~( r9 p# ^. p
{( S/ p, z- O! q1 @! C
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )0 Z, p& [3 [* V8 x8 w0 o
{4 P5 i1 J. h7 l+ q6 u
break;. K  t: ~/ o0 H* P  m, Q
}' r; B$ W/ k4 E; Q( Y8 {
#ifdef DEBUG
6 q( C  A3 d5 M% G' Xprintf("\n Geometry option returns %d\n", geoption);; ]8 w/ ^. R# e8 I" f* \
#endif
: g2 l8 O  V( O$ y0 y) i/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )
# S8 b; l, M8 m1 v{
- u  {* x/ F% r& ~6 v% X9 Pentity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
, k& }4 \" @8 b+ Z) B! TUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,, b9 }: X+ S: P' {7 U3 P
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
1 W" m5 n7 a1 k8 B7 p. }1 _4 S- C//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
. `% V" V& P& F1 ~{( o# U- r- s$ G; G/ _% q6 v0 r
entity_list[entity_count] = eid;, a' P: [  e9 a6 e
#ifdef DEBUG
8 O% q0 V7 B% t/ Cprintf(" EID number returns %d\n", eid );" l+ `: T- V  u- `7 W
#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),$ f4 l, A2 b# `
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;* b+ M+ i, w# i- S0 i
}% M( o& i. D3 e* _
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL ). m; e  J; \9 o$ \: X. O
{5 a- t+ V/ g6 s: Z9 k
/* Geometry selection is finished.几何体选取完成 */3 E4 j4 \" I( c" E' ?8 L
break;
( h" c; Z! I) W/ R; Y8 a}4 N* |7 y0 {2 H4 I
}6 k- \: p7 H/ y5 F+ Y
#ifdef DEBUG
+ L2 l( Y- A; P/ J* H5 D2 lprintf(" Entity count this selection is %d\n",entity_count);, u2 N3 K/ s5 z# e% n2 q! d
#endif

if (entity_count > 0)
9 f2 Y/ R% I  f; L. W- V5 C{& w% O) t' Y% ~; n( R
/* UF_CAMGEOM_item_t *items;" |0 K# d- f" J! I" x
int item_count;*/

for( i = 0; i < obj_count; i++ )
$ M+ j' D0 L* s9 |{
. T' g4 J, P1 Jirc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
7 p9 j" c$ _% d( ~type == UF_machining_geometry_grp_type)

#ifdef DEBUG
! r( u2 T! S9 i  O# Q0 i- c8 Nprintf("\n Current entity count is %d", entity_count);, j. R0 C0 a4 M9 x9 `0 A
printf("\n Current object count is %d", obj_count);! R9 Y- ?" |* }# [0 ~
printf("\n Geometry option is %d \n", geoption );
3 A3 p! W7 t' u1 [' R#endif

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

{
" ?% B' \+ x6 l& W; ^swiTCh (geoption)# H% s. V& F4 K$ M) A( |
{- i; I4 I+ G% c% ?" B0 l
case 1:
. c9 W. h, P: G! A4 E! Scase 2:
2 U, Y0 x9 Q  v; S6 [5 Tcase 3:
6 Y4 Q! j* k# g# E) @4 bcase 4:4 J5 P/ H1 m7 U- w' A3 m
case 5: /* Part Geometry 部件几何体*/7 t; v/ V% G% E$ H' k0 ?$ _
{
5 R( }9 v; N2 w#ifdef DEBUG' L) A0 O  s& s9 T! S; M
printf("\n Type returned is %d", type);
7 e/ I  D5 y  s  z  Oprintf("\n Subtype returned is %d", subtype);6 C* D; l; z7 ^. H# y+ U
#endif
  I, F5 o1 n" k{; M; \6 \) E* d
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,8 M" M0 I. N2 M
entity_list, app_data_list );
& N# v. p8 T# L$ H6 W# M) b3 ~//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
! o0 v! \7 T- a6 W//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。. A" u& ~. |0 b+ B: p2 b* `
}
  r' C4 V2 k7 B& [4 S% q6 h! uif ( irc != 0 )5 I5 o" s  n* y/ Z0 S! F
{
- l* ?, A) ^% o& i1 kUF_get_fail_message( irc, errorstrg );
/ i) g8 Y9 h$ h4 S0 Dprintf("\n The return code is %d\n", irc);" j8 A1 F3 x3 A! M& Q: C, a" Q
printf("\n Error code translates to %s\n", errorstrg);' f3 P- f5 T2 i9 J
return objTag;/ T; H  e( `9 \1 G+ p% k
}1 W* W/ I; E" z- }2 y, O
break;( E. B+ x9 m( y2 M
}

case 6: /* Blank Geometry 空白几何体*/
! d4 C0 [- w6 f; `# m2 t# f! ~7 ?{9 U" }9 l$ R; T2 {# }
#ifdef DEBUG
5 b  P# e4 F  U4 Z: X; R; r% d# _printf("\n Type returned is %d", type);' O: ]# W& P' o. m! e( [& o
printf("\n Subtype returned is %d", subtype);
. M9 O* ?& a  H  d) u7 x! B# y" z#endif6 f7 E, P' d, T- W
{9 f) P' J- ]9 }7 U7 i9 |, Y
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
0 G. u9 ?! s- Y% M* mentity_list, app_data_list );
& p! o9 V& R2 r( V4 j( q, H' A* a8 e# o}
" b1 e9 j1 w# h; Bif ( irc != 0 )$ }/ U' o8 l4 q  H+ t) y+ b, ]
{
2 z  N$ \4 e, {! n9 v4 AUF_get_fail_message( irc, errorstrg );
' ~# c/ `1 B8 }' h% w2 Uprintf("\n The return code is %d\n", irc);
" ~% D& e, O+ w2 ]8 J( i: O4 Fprintf("\n Error code translates to %s\n", errorstrg);* a" @! u0 Y4 I
return objTag;8 L. _2 O9 l5 ]6 H- O
}
; o/ ?8 e% y( C0 Q$ ~4 Ebreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/
+ X1 u$ O+ d2 n) |5 L{* |5 v" G3 `/ |- O
#ifdef DEBUG8 D6 d* [2 o1 \5 M% h3 w; F( d
printf("\n Type returned is %d", type);
5 W7 I2 M1 B. J" T6 Kprintf("\n Subtype returned is %d", subtype);
1 j* `6 Q6 X, \3 K6 J0 N2 _#endif5 a) y0 Q  k4 U. u3 @
{% L1 g, X- t0 O* p6 M/ Z# k
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
4 A( N0 }- V! m* ventity_list,app_data_list);
% W4 c& {  k9 @- J}& y- c$ k6 \/ d
if ( irc != 0 )4 V6 Q- k. T! m. ~* Q
{6 I* v- f" Y/ i  s/ P/ W
UF_get_fail_message( irc, errorstrg );% j% r; p/ O; _( ~& q
printf("\n The return code is %d\n", irc);
6 l  G. ?3 p) e: l/ @  t% iprintf("\n Error code translates to %s\n", errorstrg);- m- }; l* g$ j& Y6 ^9 q% w, W, J4 f
return objTag;
' o9 ]% J8 O' T$ y/ K+ A}% z3 x% h- X, k  x% t. d& C8 h9 i9 L
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/' R! B$ \$ B& c4 J( J  ^5 E4 t
{, R" O% P+ v% G5 e6 @
#ifdef DEBUG1 r, \( ~3 y& Y0 I
printf("\n Type returned is %d", type);
9 m/ t; p5 a/ G+ \, N' }2 x1 }printf("\n Subtype returned is %d", subtype);( a' r9 K2 k. Y, M
#endif) f9 N5 K9 v2 O- T' X! {% A0 ^
{
4 @  l) X. K6 n0 }- iirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,3 L2 n, ~# u4 ~
entity_list, app_data_list );: I! f  U. }( Y' W4 {' w8 \" [
}) P# u; F, m+ u& ]; d1 F' T$ N
if ( irc != 0 )% H  o8 G2 v: P; s( y. G  T
{
9 C: e" l  |( AUF_get_fail_message( irc, errorstrg );
3 [8 T! \7 q/ c) w3 |$ Jprintf("\n The return code is %d\n", irc);
+ T. u4 n* |8 _: Pprintf("\n Error code translates to %s\n", errorstrg);
6 Q7 W+ H$ y! S& P" Z1 lreturn objTag;1 n3 _9 N0 X( L
}: G3 c, W; X2 I4 d! O* w5 v. f
break;
3 Y0 j7 [) O( k}
+ e0 a! v0 C$ |, C- R9 t1 `case 9: /* Trim Geometry 修剪几何体 */
7 |: l" S- O) A; i8 o{
: F/ Q7 i9 W+ o; l" W- uprintf("This case not implemented.\n");
; ?9 t% U1 {) U. s. P) M- H# Ibreak;3 ]4 X8 u1 b( |% z1 Z
}
) l1 D) _" C& E+ r1 y7 |) }/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/* {: \  b  U  }- P2 M. ?
{
% g! S4 @+ D. Qbreak;
- J. a% z. g! P}% @. S9 @: [5 k. G* I& G  z8 W2 c
}
" x. h9 y2 A$ E$ \3 [6 X" N}
' f; d$ A/ M4 v' b& i}( y) G; U2 r* Y% M( B
}3 X: F# x- y. u
}! J6 L$ g# z0 s/ U
}6 w1 G' [: g$ J5 v% u7 }& y
/* Free the Allocated Memory. 释放内存*/
' C& f9 d4 L4 g$ mfor (i=0; i<entity_count; i++)
+ H8 f% g( {4 H7 ^" z. E/ x{# N, {6 u1 I* E! K" |. r
UF_free (app_data_list);
$ P+ j, s) T! N  s1 k% P$ j}

/* UF_free (objects);*/

return(0);, y4 b! r# _0 U2 X8 d3 v/ y
}: X3 M0 O; t0 Q+ T( g
/* Selection initialization procedure 选择初始化程序*/
% z, L+ [$ W. o) [2 e. A. ]static int init_proc
' ?* x+ K( r) a$ r2 z1 @* @(
. |6 ~4 D( {! @# e+ x7 wUF_UI_selection_p_t select,//指针 pointer
( f$ O3 o- L( |! O6 J& D% x' Ivoid* user_data
. v' M2 ]2 R* A+ z6 `( `$ H) n)% e) U) X0 n9 |/ P
{. c# |* `- S8 g5 y# z- l- z* e9 E
int num_triples = 3;
; B6 I# M6 o% W//最终指定的特征类型
  u4 w& A/ P$ e& wUF_UI_mask_t mask_triples[] = {
# X$ S4 \& g+ A( i  iUF_line_type, 0, 0,  w' l/ B" S4 {( `/ K& F
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
% Q1 \! }& N: v: W5 E8 _UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select," @  l5 O" T2 e& K
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
( n9 U( r- H1 i  Onum_triples, mask_triples)) == 0)//3倍 3*3=9

{& b2 n) e% G( T
return (UF_UI_SEL_SUCCESS);
5 q. V% Z1 T; o  r4 W}
2 L) i4 u9 ~( Q# x* ?) Jelse5 o% j( l( F: ]1 _
{
9 j8 K1 z% r$ `( L( Xreturn (UF_UI_SEL_FAILURE);  F/ A  @- t+ u( L; P+ R- C
}
- Z9 p: _" H+ h}" J' D7 c! o) r8 V# O$ V( D
static void init_camgeom_app_data, X4 M: {& C0 B- t$ C$ L
(
% S8 F1 y8 c8 {9 r: fUF_CAMGEOM_app_data_p_t app_data7 m( Z1 s/ o4 C
)/ x3 C$ e: w# P
{
8 Z# Z* o, ]2 }: Q4 Jif (app_data)
' q) L! G6 t0 s0 R7 N8 P7 T{
! ^4 x; Q! h* `( s. J7 }/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
% l6 A* [1 b5 M' k4 j7 Vapp_data->has_cut_stock = 0; /* Used 1 - Else 0 */
% }. Y, }( ^: ?( Aapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
% I$ _: o" L% n! O# _app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */5 G7 C$ P' F9 m# J( M/ i, \& s
app_data->has_offset = 0; /* Used 1 - Else 0 */
" j/ U  \: [6 F1 [app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */5 N- m; E" g9 ?+ X( h' C
app_data->stock = 0.033 ;
1 g! |, u& \+ V/ z7 }& eapp_data->cut_stock[0] = 0.2 ;/ }2 e/ n0 K- }5 m4 s3 \! b
app_data->cut_stock[1] = 0.1 ;. b: ~- _& D' e/ a
app_data->cut_stock[2] = 0.5 ;
, |, n3 X. f1 ^/ wapp_data->tolerances[0] = 0.003 ;
3 s9 P4 u5 G# U/ `6 l: r( }app_data->tolerances[1] = 0.003 ;# u9 b  p7 E" y/ l5 ?
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;) G" U& r& V! W" U
app_data->feedrate_value = 33.0 ;
) Z6 d8 h0 Z" W0 J( H6 @. |- B& |app_data->offset = 0.055 ;
% X6 U6 w, f$ f3 {7 m7 Oapp_data->avoidance_type = UF_CAM_avoidance_type_warning;6 p8 l$ D6 a5 B: c
}
8 I3 ^6 }5 E; z; M}

* N' |% f6 u8 W  P
上海点团信息科技有限公司,承接NX,CATIA,CREO等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施开发培训,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com
回复

使用道具 举报

0

主题

7

帖子

45

积分

新手上路

Rank: 1

积分
45
发表于 2014-8-5 00:57:44 PLM之家手机频道 | 显示全部楼层
很好好好学习
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

0

主题

4

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 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
回复 支持 反对

使用道具 举报

0

主题

4

帖子

50

积分

注册会员

Rank: 2

积分
50
发表于 2017-7-18 21:44:34 | 显示全部楼层
UF_CAMGEOM_append_items我是用C#写的,用这个函数总是报‘Method not found’错误。
( X- f# H. H& n有了解可能的原因的吗?
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

0

主题

17

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 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
回复 支持 反对

使用道具 举报

0

主题

17

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2017-12-11 15:49:09 | 显示全部楼层
  @+ i  J- t, q# x3 m
不错不错,正需要的东西
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 发邮件注册

本版积分规则


<

QQ|小黑屋|手机版|PLM之家-工业软件数字化驱动之家-国产自主软件推进者 ( 沪ICP备13003373-3

GMT+8, 2018-9-20 19:54 , Processed in 0.151633 second(s), 32 queries .

快速回复 返回顶部 返回列表