PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

3 R: e" G' w( `: D; x* x+ E( ?2 ]
6 j7 Y6 @8 X" {: d
9 Y1 H/ ]6 Z" ^

#include <stdlib.h>
8 Y# j: Y6 V- x' r4 h+ ]! R% k#include <stdio.h>

#include <uf.h>
! i" N, G% [' k+ g; y% h1 b#include <uf_object_types.h>$ k. F- d$ R& l  Y- X
#include <uf_ui.h>
$ S8 w, `, ?+ K# _#include <uf_disp.h>& G7 m2 r* B4 W; M/ m
#include <uf_obj.h>
: p/ I; |. {# A$ k2 Y0 R#include <uf_cam.h>
. |* x$ f+ l* V" A9 o1 z#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
7 C1 Q/ Y& Z; f/ P/ G#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
* C8 E4 v' k  i; |8 Y$ astatic char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
5 ^0 D  F, R  f1 q. ?! Fstatic char menu3[][38] = { "1) Part Geometry",
2 M! n$ s- Z( ^' s' Z2 D" I"2) Blank Geometry",/ a# x: D6 }" G! R4 f
"3) Drive Geometry",, C% S6 O$ d. K
"4) Cut Area Geometry",2 K3 F( c2 Z: S/ E/ O9 M
"5) Trim Geometry",
8 x+ V# g! a  E"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 |2 s1 }7 {# Y
UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];8 e# z: Z" C( @% p1 u9 H
tag_t *objects, entity_list[MAX_CAMGEOM];
+ G5 k: |7 L+ f: ~; xint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
8 e1 P1 f, N/ b- y9 F; ^char *cue = "Identify Geometry - Wait for the Filter!";! m- b5 Q8 v6 x  s1 W
char errorstrg[133];+ i/ ]- _& V; E, h8 w# l
int response, irc;
$ C" h7 D" J* Z5 I$ _tag_t eid, view;
6 I6 h* `+ V* S# @4 l! e4 gdouble cursor[3];

#ifdef DEBUG
. n+ I3 t0 @9 p. |" fprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );4 E7 D: ?, o4 n- J* _2 C
#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????" ~+ U. T9 m; i0 T
{# j2 c7 m+ Z4 x% D
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
/ J* h4 }& |( ^; a& {: g{9 T# O( `5 E" |9 {1 |# E9 |
break;5 _) }' k# w2 K$ L, G' e6 Z, C
}
! w, W9 O* \) M/ i* }#ifdef DEBUG
9 m8 I% m9 _4 @2 Z7 o7 ?+ Kprintf("\n Geometry option returns %d\n", geoption);
: G! a" Q$ l9 |3 U/ h7 B#endif% e  j2 T- b5 |7 N: C. G8 @
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )* |4 [7 h. a" \+ B
{
* c9 b: d5 g7 J7 `8 J) Q# l5 \) \9 Rentity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,& P) J. D+ ?! b/ s
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
! V6 _7 s, z% n. U( d: ?8 I&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义/ M! V; J, D2 |( B
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
( @" J! k9 ~* n6 n2 t{
, F* b% B0 v% n9 Hentity_list[entity_count] = eid;
# B: U8 z7 ~! I8 t" }) \#ifdef DEBUG
4 K/ r. E  O! R: {) `3 lprintf(" EID number returns %d\n", eid );
7 [% F, R6 P! x9 y% _#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),; `4 p2 Y1 m1 c! t: S6 p$ z9 [5 e; m
&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
. O2 c5 f# i- J& v}
7 X5 C. X1 ?# _$ Delse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )$ L+ q4 r0 T, Y0 F: X2 X5 e% W
{  @' B' w( L5 _5 z! }* s6 L' Z& [
/* Geometry selection is finished.几何体选取完成 */) p+ p: f5 a7 U, e) u/ O/ n1 D# `
break;( W2 }( Q; N+ k& U
}% g& X" a3 u- F$ R8 }. Q' R
}1 U% F5 z5 R( B- z' o1 {5 |; w
#ifdef DEBUG
! Y- U6 ^0 F/ ?8 V( jprintf(" Entity count this selection is %d\n",entity_count);1 s* N& B2 ?, C6 q7 @( \/ |- l1 S
#endif

if (entity_count > 0)* m% X* a3 A$ t0 [0 Z# S8 }; i7 \
{
: E4 U: l' O+ {$ c- B/* UF_CAMGEOM_item_t *items;
/ q0 O5 ]- w/ o- z( q2 e: nint item_count;*/

for( i = 0; i < obj_count; i++ )
! _6 W; y1 z/ s{7 h  ^; j8 [7 W. k* Y; e
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
2 P, N% c" ~/ D' [1 z  |3 atype == UF_machining_geometry_grp_type)

#ifdef DEBUG
' h8 v- c! H1 G( r& P7 O6 {/ j" W4 bprintf("\n Current entity count is %d", entity_count);( C8 A3 V& a% G1 Q6 T3 v/ r$ E
printf("\n Current object count is %d", obj_count);
; M, T& w5 f' A$ I8 M2 K: }printf("\n Geometry option is %d \n", geoption );3 m, [* F  G7 W$ l) U
#endif

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

{9 Z: ]. v: L* ?0 ]5 [( J+ m* p$ Z
swiTCh (geoption)4 u+ J2 k$ }( O) B
{
% B6 j0 D+ A; w- Vcase 1:
& a) C& I! v# Qcase 2:
4 G& s! U3 s7 O* I2 G/ V" R6 L4 Lcase 3:5 i+ \$ E* ]# X' D* w
case 4:4 U$ |2 J8 E4 z% G
case 5: /* Part Geometry 部件几何体*// V$ A- T9 A/ D! K
{- x- h, k( Y- [. I6 ~
#ifdef DEBUG
1 S& n4 j. |% M. T+ T- }; b/ a; \printf("\n Type returned is %d", type);
0 j6 ?- w; w- q7 P& \/ f) h4 }printf("\n Subtype returned is %d", subtype);3 W# l3 B1 d% l2 N! O# n- ^; @
#endif, Z' Z6 u. T! _
{; |& ]. W) L3 V4 H
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count," o7 W1 J8 Z: ?. v2 S
entity_list, app_data_list );
9 s( \- e2 C5 I0 m" P% U* p# n//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
5 s/ S5 q& w' ~% C1 e8 b- A3 C//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。. b2 {7 ?' o& F
}
0 d8 {/ k1 O$ i$ Q3 f( V4 M7 n! `; ~/ v# `if ( irc != 0 )
4 l8 K6 w  q2 R1 G9 m  H{
3 R3 }  P  x% C0 J5 |UF_get_fail_message( irc, errorstrg );
& Z. R% E6 e( ?& Sprintf("\n The return code is %d\n", irc);
9 d7 }, s; ?7 Uprintf("\n Error code translates to %s\n", errorstrg);
) Q: }; i& S# e! V- w/ treturn objTag;# L) e, V! Z! }
}4 u0 Y( i- o( x$ O0 l, W+ b% I
break;
& W6 l/ y* k1 w; E: j3 j) K- i7 V}

case 6: /* Blank Geometry 空白几何体*/, `% U0 G) k0 m2 f# I5 @
{
* L  i* i! z" @/ E#ifdef DEBUG
5 |# \2 t" Y: T+ [, @) W6 V& vprintf("\n Type returned is %d", type);
* i1 J* g5 k  U/ j  Z! Qprintf("\n Subtype returned is %d", subtype);. b  ^, `  f% X. I& b+ R! j  v" N: Y
#endif& ]2 g& s( E" l; ]+ R+ v+ ?
{& r7 F9 b+ w' q- b" ^1 X* Q* b
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
& u) c  j" Q: A* O5 z8 N  lentity_list, app_data_list );
& y: }/ B. ~0 `7 ]9 J. E}8 _) q4 |- F4 z9 R' A/ `3 s, m
if ( irc != 0 )
4 @7 g: T( Z1 o" ^7 ]{5 V8 S/ x$ V6 s9 X  j: n
UF_get_fail_message( irc, errorstrg );- Y& ~+ |& P# `
printf("\n The return code is %d\n", irc);4 Z9 P" r; y& s& u4 |& v7 w
printf("\n Error code translates to %s\n", errorstrg);6 `4 Z/ ^$ w- i1 m/ ^
return objTag;0 F- u5 W" U, m+ W1 I3 _, j
}
4 M& ^/ Y9 M% M5 L8 H7 I0 j9 |7 J* bbreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/
" ?5 M( r* Y* s6 _. T3 q! ?{
7 H, B) b- V0 d  d; ~) U5 B, k#ifdef DEBUG
, x4 G4 r% e" S+ e# S2 @# [5 Xprintf("\n Type returned is %d", type);5 q8 G$ T. ]0 ^$ d
printf("\n Subtype returned is %d", subtype);
2 w8 o. r: X0 ]+ l#endif: w* ~! B' K% [& f3 S8 H" r
{
) k. |9 V5 T4 s6 L  K/ K, lirc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,2 ]- o; V7 S; N
entity_list,app_data_list);2 z! U6 u9 M( ], S4 \  b
}2 z3 G/ Q/ {+ o0 ~2 I
if ( irc != 0 )
; {, S) V5 s! a/ {* j% ?{/ o2 d; u3 N7 ?: I+ u4 X2 [
UF_get_fail_message( irc, errorstrg );
7 {3 ]6 M6 N# y( j$ |5 t% C* uprintf("\n The return code is %d\n", irc);2 n. x$ q" S5 Z8 U
printf("\n Error code translates to %s\n", errorstrg);% p- E, i) ]( y; j) E1 d0 U
return objTag;' A% W, P" b" I7 y8 w/ b
}
7 U* u* X" I! cbreak;

}

case 8: /* Cut Area Geometry 切削区域几何体*/8 `0 Q$ g$ T- v% t% Z" S
{4 ~+ j* y& k( W
#ifdef DEBUG* Z' v" F8 @, e/ H' T: |
printf("\n Type returned is %d", type);/ i' l8 Q2 q: W8 ~9 I$ w) T
printf("\n Subtype returned is %d", subtype);; h+ ^  F1 e. Y
#endif8 T# m$ N' w1 X
{7 j9 k* ]) O, c% S) Y: ^+ `
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,' y& I2 u( D. `" ~7 i! w; ]3 F' R
entity_list, app_data_list );& a, I9 }% B) F8 _  o: p1 j# X8 Z, i
}
! m+ w' P& Y+ U" nif ( irc != 0 )
+ p( h4 p8 `. C- C1 j{# Y6 m9 X6 X% i' c+ @
UF_get_fail_message( irc, errorstrg );
8 ~. a! A% ?4 ?6 O% z2 g. Fprintf("\n The return code is %d\n", irc);
  F  v. \- ]' p: |$ gprintf("\n Error code translates to %s\n", errorstrg);
$ v1 V4 E2 N* ]% r4 {; ]return objTag;, u, D3 l& m0 L+ z: M; v
}
9 s! u3 t: U' g* s4 k: xbreak;
( \) P/ h/ D& ~- ^7 \$ r/ f}9 J; K  [% V5 o
case 9: /* Trim Geometry 修剪几何体 */
. G: K/ l5 K; [* v  j0 Y{, c1 g$ k! x& o7 F  _) D
printf("This case not implemented.\n");
+ C3 k9 D" O& k, k8 }$ |0 Hbreak;
+ y8 ]1 M; R7 j6 x5 C7 L}
+ p# S4 `5 O. A) O/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/
. f# J: E; K( V4 F{
: g2 M# r5 n6 c) q9 C$ ybreak;% v  C0 X* W+ j" }3 V( Q' h
}
$ U" g6 q! s" _& v6 s! k}
. ^" X3 f  `) H1 s  b8 i# z2 y+ |4 F}
2 j4 H. X. ?0 Z( A0 Y0 Q}& d9 H0 P' l3 j/ ^* Q5 f
}
  s  ~) x- C. i9 h: v}" c9 s1 @. ~1 `) d# D
}. G3 H7 H5 ?/ P# E+ J. U* A$ T
/* Free the Allocated Memory. 释放内存*/$ M1 X/ [8 q# @) m! P+ b
for (i=0; i<entity_count; i++)! D7 a1 [) z  l3 p6 g
{
* o2 q5 u& _* jUF_free (app_data_list);( Y" H' G0 z; [: S
}

/* UF_free (objects);*/

return(0);. l6 w+ q9 A; e: I" G5 C
}
; R, H2 ~6 P% T8 p; x) H/* Selection initialization procedure 选择初始化程序*/1 v0 C; B* |3 x% l' K& O0 s5 K
static int init_proc
) J( _# {2 w$ M$ V(
7 ~3 `* K, ~' g5 m; ~' x  P7 pUF_UI_selection_p_t select,//指针 pointer
: t1 I8 e7 H: y- N* I: ivoid* user_data
/ F8 g% m/ l" b)
, Z. I) C/ @+ s2 @9 E{
" [- d# J& z5 Z  s, T# _int num_triples = 3;; I. t; k7 ?% Y1 y: p# l
//最终指定的特征类型" h* o* I- a/ B  [, I
UF_UI_mask_t mask_triples[] = {
; G( ]1 ~4 o- XUF_line_type, 0, 0,
) v6 }- P9 |3 L& G, U+ F1 }UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,- S0 y, e3 e" H: @
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
  D, p) u' y- l$ Z) ?9 \UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,: S5 z- R# k0 w$ k& s3 R$ x5 Z
num_triples, mask_triples)) == 0)//3倍 3*3=9

{
! U$ d0 t! Y( @0 s# |) V7 Q* k! Ureturn (UF_UI_SEL_SUCCESS);
  l) j1 y2 w* k8 m6 ]' H8 T& a}& ]/ }5 D0 i) @! b
else
+ t8 w! ~4 b' U+ V6 y{
. v9 Y# a" F: G, m% R# C$ oreturn (UF_UI_SEL_FAILURE);
; A9 h3 R5 G& E/ H" Q5 y}
! K; S9 ]5 y' C/ Y}
6 c4 ~' |, e. Q& |. Qstatic void init_camgeom_app_data6 C9 Q* \" k. {! G
(3 a+ R" C/ k! d& [4 ^
UF_CAMGEOM_app_data_p_t app_data
* n' z* t, ^% x4 ?" m( i4 j)
% \! `. X; v" n0 d! I) D{
) Y) H4 y. B( K7 kif (app_data)
) u0 G, N/ {. j2 d{
: V6 E+ x4 u* o1 o: K0 w/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */7 ]/ S6 |( v! j
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */+ z( m& N& d% ]
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */- p# [6 y7 {" b+ d
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */- W! Q! H# q/ }6 D! N9 U! u
app_data->has_offset = 0; /* Used 1 - Else 0 */1 S) g( v3 L  w. V) r3 S
app_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
* {7 I' J* d. K/ {+ ]app_data->stock = 0.033 ;) j, Y: G7 ]  m# A. L
app_data->cut_stock[0] = 0.2 ;
7 ^( z- e+ W( @, T3 S0 U* v- D/ w2 \/ |app_data->cut_stock[1] = 0.1 ;4 Y3 c. ^5 J7 L* S5 r
app_data->cut_stock[2] = 0.5 ;, J  T  Y7 w* M- m
app_data->tolerances[0] = 0.003 ;
2 C5 ?) D% D; R% B/ |6 ~app_data->tolerances[1] = 0.003 ;7 S% w) A* @' M
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
- [9 D( u( j8 r- Kapp_data->feedrate_value = 33.0 ;/ B& o) z0 A; Y( m0 f2 x: n
app_data->offset = 0.055 ;
4 W) @- x* h1 E4 A  d6 |app_data->avoidance_type = UF_CAM_avoidance_type_warning;4 s5 m. b  y( o0 Z2 W/ @  k
}+ y  b' Q1 C0 o: u3 L; B
}

+ F) _. S1 f* ^: u; n0 Z0 b. q
上海点团信息科技有限公司,承接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’错误。
# m! [% ~- M! N4 t( 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

0 F# x1 B1 z# ~) j
不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了