PLM之家PLMHome-工业软件践行者

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

  [复制链接]

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

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

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

x

/ }# i4 _; r, D
- g" r2 S& D; N& [/ r/ `% h( z& }+ h

+ j5 |7 _! H& f4 @( E/ K

#include <stdlib.h>
  D4 g; Q9 O$ C#include <stdio.h>

#include <uf.h>6 Y3 Q! e3 M2 S
#include <uf_object_types.h>' \$ o) B- y0 x1 }8 U' \4 }. f3 x
#include <uf_ui.h>7 V6 t9 A8 h, {, i9 M$ M5 g2 X
#include <uf_disp.h>
6 w  n2 [4 e' t#include <uf_obj.h>/ |: S0 J- U+ w: [/ I. m+ `
#include <uf_cam.h>
5 e) f1 X/ n( q+ X#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
/ Z  y0 n, n: N( n6 f2 H0 r3 e% ~#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;* N9 W2 Z% n* q1 i0 b# C
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
7 V$ }- D% A6 pstatic char menu3[][38] = { "1) Part Geometry",
+ f2 _+ a7 S. J) k( P; j"2) Blank Geometry",! L7 ^1 A; l3 H: B0 [
"3) Drive Geometry",6 v6 B) R* N1 Y% l% [1 d
"4) Cut Area Geometry",# q2 M/ i$ X* J5 c/ g7 Y" K% B: m
"5) Trim Geometry",
* \  B' m7 Z0 z& ]" u) d# n"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 )

{
2 d0 z7 w0 N6 y, B9 R( SUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];+ \0 C) Z9 K6 }1 m1 L; D9 P- P" z1 K
tag_t *objects, entity_list[MAX_CAMGEOM];# a5 z& E# S! Q! }1 }1 Y
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";2 d* Q% C7 {4 k' n$ s
char *cue = "Identify Geometry - Wait for the Filter!";
+ f' i) F4 b/ {+ Ochar errorstrg[133];- ~. |7 |  H3 ^% V% f' v
int response, irc;  y' K! X8 U; ~* J
tag_t eid, view;7 H1 V" g8 L  h# s. ^
double cursor[3];

#ifdef DEBUG" C# K1 d. ]0 X9 J  R0 T
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );; e: r( ]) ]0 W2 r
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????  n, K2 _0 W3 p
{
2 `8 h0 u# g) ?) i; H6 x/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
: D( z3 @- G; _2 {$ l, _{
1 k3 z; _4 r! Pbreak;
. R; T: X  m/ e4 ~" C}, f0 S3 c% M2 x0 ^4 B& `8 R
#ifdef DEBUG
9 s* ~1 ]& G1 I" G9 Iprintf("\n Geometry option returns %d\n", geoption);
! D, E& P0 {  y( G5 H2 @+ Z#endif" {! n+ F8 T; i: B( j7 h/ I" w: w) m
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )8 q# d$ `$ r; X% e8 t) f- d
{
+ c+ o+ c; ^  ]2 Z1 Centity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
1 {0 _( u. F& P! w# y0 V- fUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
& A$ I. D. f( o0 ?&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
+ B* \; K) E% H  m" P+ \: n( H//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
5 e5 L  _1 J9 A! d/ }8 C{: _1 ]: N, Z+ q2 O
entity_list[entity_count] = eid;/ R, Y) z, L$ w' o3 M
#ifdef DEBUG# n" c8 ^% F- Z" C- u% s. K
printf(" EID number returns %d\n", eid );
# Q1 S: d; O% \& A/ q+ J/ [#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),6 N- H  w3 h* L' l* S
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
) ], K8 s& \, f% _6 i0 u: W# l4 p2 e}/ Z; o( l5 Z( D- v6 C+ t: V1 y
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )- V& l, V; ?- }+ h
{
/ i8 B" T' e1 x) H/ L  p* E3 W/* Geometry selection is finished.几何体选取完成 */
: F3 {6 O2 d4 Y. Ibreak;2 T- {6 g/ w( N9 N% ]3 K3 o
}' D% z' b& h) ~2 o$ T  L
}9 |! [, V' Z: q
#ifdef DEBUG" c! f  W2 a# ~9 L& H- G
printf(" Entity count this selection is %d\n",entity_count);
5 l$ m# ^# @+ q* l- K#endif

if (entity_count > 0)
, k- |  n& j3 K{
( w6 z3 a4 j* s# B/* UF_CAMGEOM_item_t *items;
+ {% J, x+ O$ z1 @+ G  j' K" ?int item_count;*/

for( i = 0; i < obj_count; i++ )6 X2 m( Y; f+ f  o- K; S! @
{
. b0 X- b& |9 o4 }irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||0 X& h# q  ?: ~) {
type == UF_machining_geometry_grp_type)

#ifdef DEBUG4 `# k3 X% }3 m3 z
printf("\n Current entity count is %d", entity_count);5 _9 T' R3 n& W5 w. h. d% U2 i5 H3 L
printf("\n Current object count is %d", obj_count);" G( B( t* n$ m" u
printf("\n Geometry option is %d \n", geoption );; n' `+ A% L" q& s8 d$ I" K
#endif

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

{! f! w4 \4 e( p0 M) q
swiTCh (geoption)
8 E5 j4 x6 _+ ?, I- K  l7 K{2 ^; V* m6 C0 L- _' t2 k
case 1:
4 \2 |4 O5 e; D3 ?# l4 b$ r9 Ncase 2:7 a: m. f' F" U! s
case 3:& v/ A; f" `9 a& E5 l, j
case 4:; `1 ~/ h  n/ ~) w: i
case 5: /* Part Geometry 部件几何体*/; E& x. s. T( O: s( _6 b
{
( m% N- x2 c& y- U( @% t, f4 L#ifdef DEBUG
" F% {8 R6 @9 m5 nprintf("\n Type returned is %d", type);9 s( J8 ~& ^* e
printf("\n Subtype returned is %d", subtype);9 E2 P8 n' \* z3 z' ?% \1 J! m% |4 s/ C
#endif
/ J6 W' k1 u$ d0 G  j. I) m{3 _+ m$ k7 @9 P! X, i
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,% V% B" J( b! }- i9 F4 L. _
entity_list, app_data_list );
, E  H# H7 F2 T9 _/ U; J8 B" `//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
6 O9 @/ {; h' h' z( L6 S9 A//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。  K1 R) ?# C: r# p7 l
}
3 A( D& `5 r" `( Qif ( irc != 0 )5 i! D: F0 D" x$ e) N4 {
{4 P" v6 r/ k; Q; _; a9 z% ~  [
UF_get_fail_message( irc, errorstrg );
+ f* X& i  i6 t: C  y* gprintf("\n The return code is %d\n", irc);
- d# r) o, w( M5 Y" uprintf("\n Error code translates to %s\n", errorstrg);
& y" A/ N) G& [+ y, x3 _return objTag;
4 l  ?3 N0 o3 D9 s/ K* l}  _. O7 S# S% f9 Z7 }6 N
break;
2 `3 H; x6 _8 V1 ]! a+ v% N}

case 6: /* Blank Geometry 空白几何体*/
/ i, H  ]  A! Y" Z" c' P% d  b{% w4 w6 D% M' \# m- ?& Z9 G, T4 S
#ifdef DEBUG1 w+ d4 ]/ K) u% S* V$ I
printf("\n Type returned is %d", type);. R! l1 B$ p1 A* ^5 ]
printf("\n Subtype returned is %d", subtype);
8 D: E' }5 m- I' t* s#endif
. Z) N9 s/ J9 l9 S{% `$ H( J" U, C. v7 J* ^; m0 d
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,* y- L6 w! c9 T
entity_list, app_data_list );
% y( q9 ^& w. k+ O4 b}/ ?) Q/ ^: H' F: n! }, {+ z
if ( irc != 0 )) ]0 q+ I$ n) D
{
/ I2 V/ w1 V# ^# a" R. w2 k2 u& GUF_get_fail_message( irc, errorstrg );
, ~  z" O, `+ b! O% \/ s! q6 mprintf("\n The return code is %d\n", irc);
$ v/ V) r. p5 o6 }printf("\n Error code translates to %s\n", errorstrg);7 s. d" \3 f! ^  J% q. B) U
return objTag;
* S8 V' _+ L6 V4 O$ i1 H9 L}
( I# q* i6 b  }/ X1 A) \. Nbreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/
" @( u% |6 i+ Z, u4 \{+ S" H7 V5 V- G3 ^* q7 T2 S
#ifdef DEBUG
( k) Y+ Z& b' d) L( j( a  Sprintf("\n Type returned is %d", type);) n( L5 a( h+ X( z4 P; F
printf("\n Subtype returned is %d", subtype);
! C) M- \& L8 T1 J#endif& w9 X) ^6 o$ q, P3 X
{& \1 v( E* c5 t. Y  I
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,1 `3 q/ G7 F" F8 B* x1 P! g
entity_list,app_data_list);, V& U# n0 o# F5 ~: u; U5 Z- Z
}) A* B; c! Z$ k9 W
if ( irc != 0 )7 s$ L  x& N& _/ P* h: X; S* k6 e
{
1 @7 l. N) K8 o6 {2 vUF_get_fail_message( irc, errorstrg );9 k* x5 V' ^. _3 _& ]( L
printf("\n The return code is %d\n", irc);
! H" {' M, g3 z  o6 X! L  K" Lprintf("\n Error code translates to %s\n", errorstrg);
7 g* }* {0 p* Y0 F! ]2 Wreturn objTag;
! q' E; _- }  e9 _, R}
8 G2 c1 @1 i) {3 x8 ~" }break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
2 G* U0 p/ ^# p0 n. |! O6 A$ Y{
; W# N% j$ d: Z# J1 }#ifdef DEBUG
6 I" p' O; c3 H1 W7 {. m* ?$ vprintf("\n Type returned is %d", type);
% }2 e9 e  _) m! y- H$ ]( mprintf("\n Subtype returned is %d", subtype);/ N7 h; H6 M& D
#endif* P, M, E' E4 p2 H2 t
{5 y& Z# F# d. F2 Y9 a4 e1 p, \
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
+ s4 K3 i0 C$ N5 R* y  Y" O! bentity_list, app_data_list );  }* n% v5 A) m7 p/ W" K  W; G
}2 t. |0 s4 X" n
if ( irc != 0 )
6 a/ Z+ |  G9 g& w& F{
9 _6 _: W, V) H& R6 p% CUF_get_fail_message( irc, errorstrg );* W7 t8 H% Y) Y
printf("\n The return code is %d\n", irc);
5 Q; z' S) ~; c- l3 w8 Q' V: zprintf("\n Error code translates to %s\n", errorstrg);
5 m( w$ Y$ X" {, p9 L: m$ Greturn objTag;' s8 S3 f, r5 ~8 _& D* S4 v% V
}
8 L( U  u9 |+ z3 q: ]# ?break;
  F; _' g9 r, M7 l5 |' T4 F/ D/ M}
* F) E: G. g9 l4 v% q4 Hcase 9: /* Trim Geometry 修剪几何体 */: W  ~" T) Q9 r8 H
{3 C& O" F, h9 {5 Y; g
printf("This case not implemented.\n");8 d6 x, u( H* a1 z) S1 f' p7 @
break;
' d) e) |# H# Q2 q2 t* D3 L( p. M7 N}
5 N; U2 t: r7 l. `3 c3 ]' C! h/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/3 H, `* z# E9 a7 ?, w% N8 l( Q& u9 }
{  T5 A5 J/ m4 F  }  `
break;
; K+ B' y  E3 m}
/ B8 v$ j  f* u6 X! z5 B2 T}
: D! b" A9 b5 w}* A$ d- J! f6 Z/ G' V# M
}
. z, m' O2 y1 p7 @! U- M}
/ v+ j0 ^7 M' A, G}
' O$ e2 a; w5 d}
! F& V: y0 u9 v6 I8 u; X/* Free the Allocated Memory. 释放内存*/
6 l4 C2 X* O0 u5 H% e. {) y8 xfor (i=0; i<entity_count; i++)
. N% x4 k2 E4 u' G/ P* `{4 l6 U8 I) X" h
UF_free (app_data_list);
  L3 Q% |" Z7 r0 q; @+ w5 X$ P}

/* UF_free (objects);*/

return(0);  s/ L) D4 \1 c
}) ^; h, O3 D& E; F  Y
/* Selection initialization procedure 选择初始化程序*/
" U1 l3 Q, v, K' y4 w7 Astatic int init_proc
% r$ i5 ~1 @3 N! m- w(
- U& ]. ~* z( Y+ uUF_UI_selection_p_t select,//指针 pointer. `& b. F$ E9 T- N# W! L
void* user_data
; A. g! K' K3 |2 X)6 U8 d, z1 F2 M2 @( x1 `' P) G  |, g9 R
{- s( Q* ], [3 H, v
int num_triples = 3;) K3 K) m/ N' I* U# H$ d
//最终指定的特征类型
- H5 x( f' j- _( E  }% ~8 l/ {UF_UI_mask_t mask_triples[] = {4 k3 |/ P2 }- x) Z8 o' q* {
UF_line_type, 0, 0,% K$ x8 e; `3 U
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
. H6 C$ C. V& w* iUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
- [0 _; a; ~* d7 f& HUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
/ K: s0 k4 I2 f: ~num_triples, mask_triples)) == 0)//3倍 3*3=9

{7 W" p+ n: e$ j: d
return (UF_UI_SEL_SUCCESS);  ^+ P& j4 N7 v+ b. B
}9 a8 I! e* H# G
else' i( P$ \6 m! O1 y9 g
{
9 U+ Y: Q; Q0 E0 z& {return (UF_UI_SEL_FAILURE);8 ~& f! _4 ~2 u) A/ c' q! T
}
( n+ [0 S4 ~0 I+ J4 w0 L, p}
( y0 u8 |, T" n0 x) Vstatic void init_camgeom_app_data% k% A% @6 w' v
(
6 \6 x# e3 V9 r2 OUF_CAMGEOM_app_data_p_t app_data- L3 [" K- u6 {9 h% ?
)
; U# }" T: i- t+ Z) |0 Q' {9 g) Z% v{' a% g3 v$ D* G
if (app_data)3 b- f% U3 Y8 t+ k! E
{) e! m$ b* D  Z9 v5 r
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
% D: c! U* P4 w0 wapp_data->has_cut_stock = 0; /* Used 1 - Else 0 */
7 I' P: v/ ]4 p- s* v( F1 qapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */  S8 ?0 U2 ?8 [! a, e. ]5 l
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
7 x1 ]- t' P( Y- A  H& eapp_data->has_offset = 0; /* Used 1 - Else 0 */- r7 R" q9 M5 t0 t% X& Y
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
: O& f4 `, ^! v5 x' h: K3 Iapp_data->stock = 0.033 ;9 p, S0 _8 d+ b& L: ~. z6 C
app_data->cut_stock[0] = 0.2 ;
( k. |# O  n) p" T% N! E5 f9 ]$ I3 X6 i$ Sapp_data->cut_stock[1] = 0.1 ;
8 ^. X& k: r3 B1 l8 \# P8 oapp_data->cut_stock[2] = 0.5 ;) A+ D' d, K% \. @+ K' [& q% U
app_data->tolerances[0] = 0.003 ;
9 X/ Z) C, ^( J2 P  P9 kapp_data->tolerances[1] = 0.003 ;
0 e" y' c. P' Capp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;% v1 x) _/ H2 [
app_data->feedrate_value = 33.0 ;. @" r4 `3 \; j% p2 V2 p
app_data->offset = 0.055 ;
0 S* d2 g8 O. ~app_data->avoidance_type = UF_CAM_avoidance_type_warning;
6 Z% }9 Q% \- E& P5 S/ v) r2 q}( D- ~, h( W0 |& X6 W3 M" @
}

$ M. e4 l6 V: Q) U" Y5 L! Z; F  D7 E
上海点团信息科技有限公司,承接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 来自手机

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’错误。
. D8 h  g. e& k2 J) N% ?有了解可能的原因的吗?
上海点团信息科技有限公司,承接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


1 ?7 B/ r* Q/ N不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了