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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

1 U* S* H0 j' ?* w
. X( Y$ H. {  j9 h, z3 _" a( \
3 }* U+ _8 i2 r' S: L5 i# q9 [  o- M1 g9 S+ p  \! b

#include <stdlib.h>
1 ~( I% x  b0 f! A# @& G. M- N. ~#include <stdio.h>

#include <uf.h>: L1 \) U% _7 Q$ c& X* h1 ]  N
#include <uf_object_types.h>4 j  G" ]7 m  ^5 I3 \% V
#include <uf_ui.h>6 V& f1 Z6 [! o: j& o
#include <uf_disp.h>
# G* X" d8 Z! `6 J. f- x#include <uf_obj.h>4 w9 l8 N- ]; M) P
#include <uf_cam.h>
3 a' {* k3 M3 p) [) S( B#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
& G! W5 X+ T; Q#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;$ o) o; t5 |' p3 Y5 O3 o* h7 S
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
7 ^8 W% D+ `/ M1 Istatic char menu3[][38] = { "1) Part Geometry",, Q1 M4 G& r  H! R# f' M
"2) Blank Geometry",$ j1 q: e. Y5 j, o
"3) Drive Geometry",
6 g1 {: V% o) V"4) Cut Area Geometry",8 _+ w4 i* j( j" ]
"5) Trim Geometry",
3 N- m7 N% l6 T  V"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 )

{
- Z0 T# H% |/ w& ^( {2 ?* h4 }* fUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];, j) ^8 x/ [- r3 U2 l' M
tag_t *objects, entity_list[MAX_CAMGEOM];
, o; C, x5 b; Aint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
+ Z5 i0 Y5 M0 j) O4 x6 t9 tchar *cue = "Identify Geometry - Wait for the Filter!";
. u5 e  r$ }  c5 Gchar errorstrg[133];% I/ Z2 f9 N) \: F( M& z
int response, irc;6 \" V2 `$ B7 ?$ A: ]; ]
tag_t eid, view;$ Q$ x  H" e/ W% X7 t: x5 m
double cursor[3];

#ifdef DEBUG
' W! L7 j: V# K6 R- r3 h1 \printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
3 [  v3 W5 [$ l8 N#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????# {# [- _) `* m
{" Y4 L. C  K1 i& W& I( q
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
8 B4 }7 ^( t4 e6 ^$ Z/ a{/ l* ]4 t) l* i- T; \7 z1 L6 ^
break;
7 R; P% t3 G5 F- V4 A1 D}
& L5 h1 u" T  c; z& i0 N#ifdef DEBUG
( V/ r9 v! _7 Sprintf("\n Geometry option returns %d\n", geoption);
3 M- G+ U+ U# U1 J+ f% d/ X#endif" T3 C% |' _- N
/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 ). f) a3 C' p6 S, s) n8 D
{
- q5 u) e4 e% o' Kentity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
$ e4 K- ~4 k) X% S3 ~7 MUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
9 r, v0 i  x0 `) S$ ^  Z&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义8 K% \* |4 h# }5 _  i% O. O: f
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
  h1 Q) ?3 T8 G' H0 r2 o: q{7 d, S1 {5 b9 W
entity_list[entity_count] = eid;. ?0 K- a8 n  w0 q5 e3 A
#ifdef DEBUG& J& Z7 |' ?/ M5 _6 M5 v" k
printf(" EID number returns %d\n", eid );' E% E  v0 c- k5 o" h% Z
#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),
" U! _' H! q. m" r% ^&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
( K: o5 ~9 l* Z( I5 v% a# D}
4 M* {; V, Y/ `: R+ Melse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
# G9 Q9 w9 }3 Y. I{: k! m/ u/ d; B3 r+ {2 r$ y' s6 ]
/* Geometry selection is finished.几何体选取完成 */
6 k& L( u0 j9 q. o2 u& r/ Q: d2 X8 E: Sbreak;
4 t$ D% g, c2 |  U$ v}9 X+ i2 z5 M' N6 r  q, X
}. [/ B* f8 n9 Q- W, O5 a8 C  P( d
#ifdef DEBUG  D, R5 j' U* ?- @4 m
printf(" Entity count this selection is %d\n",entity_count);7 [- K$ W7 {0 M; R0 ]4 C2 U) j( h- v( g
#endif

if (entity_count > 0)
! T! M0 n+ X2 V& p* P! ^* d{
5 F7 V( m) d$ a/* UF_CAMGEOM_item_t *items;
9 Y- V7 A. g$ R# ?2 D# zint item_count;*/

for( i = 0; i < obj_count; i++ ), y" N1 m! ?5 z9 Q* `
{
$ v: ?3 ~& n% U- X: oirc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
$ E" U- V+ o* Q, qtype == UF_machining_geometry_grp_type)

#ifdef DEBUG
/ U3 g. x" n* b2 O% W9 pprintf("\n Current entity count is %d", entity_count);6 e! u$ g" S0 U7 R
printf("\n Current object count is %d", obj_count);
- L6 M$ i2 E( i$ K5 rprintf("\n Geometry option is %d \n", geoption );1 K: l0 y# {6 U2 [  R
#endif

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

{
0 y0 _) S( W4 X0 {9 X+ SswiTCh (geoption), c4 j0 S! R8 j! U6 c" T; L& o
{1 _+ U6 o6 k4 e% r
case 1:
7 h# S- x! h* @1 w7 Rcase 2:* J  D0 P/ s/ @+ E" z; v% I
case 3:
# M  l0 ?, a7 T# j) X' x) t7 \0 w: Mcase 4:
7 v$ Q/ T9 X; N* q8 jcase 5: /* Part Geometry 部件几何体*/7 ?6 I  k; r. m1 q/ f$ `
{
  l# ^! ]4 h; G) {. f# l- k#ifdef DEBUG, O0 F# u2 Y# h5 @1 y5 g# j
printf("\n Type returned is %d", type);- ]! [0 `: A$ t) z$ a$ I/ d/ x' i  Y" c
printf("\n Subtype returned is %d", subtype);! \7 |; t% Y6 q5 K9 K4 u
#endif+ n+ ^1 J0 U. E+ [6 h
{
( l( l+ Y+ A, i7 E( Hirc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
! ?+ l9 K4 C; {9 ~& yentity_list, app_data_list );) X0 ^5 ^( O! w8 _, d8 H
//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。# x2 b9 ^1 i. p  @4 c$ @
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。: R, k9 l4 B8 N! m( Q. e
}1 p- y0 ~9 }# e. a, `( M/ X
if ( irc != 0 )4 \4 D0 y4 ~0 V# l/ A. |' J  L
{
$ d, a( R5 a0 mUF_get_fail_message( irc, errorstrg );5 H- a( k: t0 C. y' z1 O
printf("\n The return code is %d\n", irc);
* i0 Q4 A! \/ h2 t/ f5 C, Z; Pprintf("\n Error code translates to %s\n", errorstrg);; r, S8 s1 y; q
return objTag;
& e# Z/ K/ e: D- w' P. y}- b* L. ^5 [0 u+ x
break;* ]! i) v+ B6 Q
}

case 6: /* Blank Geometry 空白几何体*/
9 b! G( _" D0 a3 v{% `# i8 D& S4 h8 C! |- X& V* N7 O
#ifdef DEBUG$ r& v) {7 K3 K# e% |
printf("\n Type returned is %d", type);2 |6 u; s3 g7 n- @& q& O& n( R7 K- f
printf("\n Subtype returned is %d", subtype);! N7 r( q5 ^. I
#endif: j5 i5 \5 \* o% y) ^7 R. _
{
9 o$ E  {" A( N' m) Iirc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
1 S9 x, [* c. R7 _entity_list, app_data_list );, R+ ]/ c; a3 T
}
& F% X6 M! V* o) \if ( irc != 0 )
4 n% l% ~5 c4 k% e9 r- R6 X{
9 P1 c8 j8 k! `% d. k' oUF_get_fail_message( irc, errorstrg );
" ~5 b6 B& _- A3 @, n: d& q% gprintf("\n The return code is %d\n", irc);
) c  [+ f, ]0 q) ]printf("\n Error code translates to %s\n", errorstrg);
, A, V& \% p1 @4 w4 ]return objTag;
* P# u4 q6 J7 ^8 c}  o* Y& c: G6 u* ?! R9 [0 Y
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/- V* g1 X2 l4 C3 A
{
/ F! S+ y9 d6 X: H9 B. I#ifdef DEBUG
/ v( o( T& i# x! F3 F. M# F" pprintf("\n Type returned is %d", type);
" H' F7 u/ p% b' \! G* ^printf("\n Subtype returned is %d", subtype);
/ W3 G5 b, z4 P- r#endif
, K6 T# r; X: Y{. [0 c: N- w; l  y! `/ l
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
5 w6 G2 ~# z" Q3 g& xentity_list,app_data_list);/ a; j% E& ~( l
}1 C; ?1 J% ], z
if ( irc != 0 )- _! Z& `5 e# T9 a5 {
{
9 P8 f* {* g- v$ HUF_get_fail_message( irc, errorstrg );
% ~) L; q* O  A! x' bprintf("\n The return code is %d\n", irc);, x0 H: x0 y' K6 Z1 P
printf("\n Error code translates to %s\n", errorstrg);, b9 O' a$ D* Q, j; Y3 ^- f
return objTag;6 S8 w' h5 Q' v) x$ v% {0 K2 ^
}; I+ B: P0 A& p7 V* K5 x
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
7 I' N" j( w& K8 u0 y{# [. k7 w: A. Y4 g  ]; s) V
#ifdef DEBUG1 E5 X+ q) {9 A# H* k) ^
printf("\n Type returned is %d", type);
  H" X! V" r5 j/ E) N& i) Kprintf("\n Subtype returned is %d", subtype);+ @9 m  d) d0 v7 H: g6 ~
#endif
# y" S( ^( @1 \: S& c' w0 R{
8 x% j  I2 M7 L' y, W, sirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,( e6 v3 H9 e& e2 D5 M; v" I" h9 y
entity_list, app_data_list );: L1 f% o. l$ o, [1 }" u0 y
}7 m. X# W) I  R& @+ h" J
if ( irc != 0 )1 K8 L0 ~/ f9 K& J; R' B
{
7 `1 e, b! a. E( G+ R4 @9 C8 wUF_get_fail_message( irc, errorstrg );
% R# {) I" m. f; C) v9 {" Mprintf("\n The return code is %d\n", irc);
* ^& t5 f- i/ o2 h# d" iprintf("\n Error code translates to %s\n", errorstrg);
- L* [4 i/ Q8 \; S/ ]9 Lreturn objTag;
# [, s5 F' `$ D}
; J2 A% f6 Q$ Z& T9 l3 C+ W1 Jbreak;, t; t" q3 ?( M. ~& f' e* E
}- ~) f% U, Z: @' H
case 9: /* Trim Geometry 修剪几何体 */: l; e) b' i1 |8 B1 Z
{( V. W9 p1 ?$ q5 X" k* e% i
printf("This case not implemented.\n");
$ P, x" H" h; @4 w) W7 P$ Y# Zbreak;  I$ v3 W7 f( |8 p4 r5 u
}
! X* e3 V- P4 o/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/% d* N: ^$ ?" f# Z0 M
{
3 Y( B1 W! ~- X6 G; Cbreak;. }! C, F4 T4 C! f, y7 I2 X
}) W; S6 l* ~+ m% ?
}% [  h' E0 a& o+ u
}
9 E9 y# _' h; d+ R7 m& y# `}7 H% t. Y+ s& U/ m; g0 q) J/ u
}
" U) |5 s3 T" _}
: G' X# L6 x1 c$ m, w/ M' n3 `}
0 V4 B+ P( Q* j- b/* Free the Allocated Memory. 释放内存*/
. H: m- I  J) G( m' L/ hfor (i=0; i<entity_count; i++)
/ F1 l% T" I) a: B' [8 a{2 d5 E8 v7 z& X
UF_free (app_data_list);
2 P- J' V* g* D5 g. y}

/* UF_free (objects);*/

return(0);
. v; m6 U" e( H( _7 N}
' d* f& O4 P0 p/* Selection initialization procedure 选择初始化程序*/
' y) J) A+ w9 Kstatic int init_proc
+ N5 m: k+ K4 e# K6 P& x6 N(
3 A/ D1 h+ W8 v( V& x" xUF_UI_selection_p_t select,//指针 pointer
- t/ ]" v6 y9 G1 R& Y' G& ?" }/ R( |void* user_data1 c0 H- Z) Y) w# ~; I  ]3 |
)
! ~& \6 f+ O, C5 g" p{
, U3 t/ q$ x- Q+ @+ cint num_triples = 3;
( c# w  ~: Y; D# ~% G# j" e; [. R//最终指定的特征类型
; y4 H5 A" P& T, s" KUF_UI_mask_t mask_triples[] = {' o8 G- Z. ?% ]* R0 B7 T/ F" Z6 H$ q
UF_line_type, 0, 0,1 L. b7 g: d5 o! d2 m- B
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
- q, z1 v, K% {1 H$ rUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
: T. J6 u% ?- P8 F$ }UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
3 i# R8 Q, l; W6 R) k7 o. ynum_triples, mask_triples)) == 0)//3倍 3*3=9

{
7 J( D0 O. Y  x9 h% Rreturn (UF_UI_SEL_SUCCESS);
* t- B5 A. @( ], d$ o8 ~) E}7 |0 ~1 g! n* T# F" d7 I0 T. t
else
! I* M" ~5 e0 c! u: \/ a6 r{+ w! w8 S, A/ c
return (UF_UI_SEL_FAILURE);( \7 I( b. ?' h1 ]' F
}
% E7 e6 o* x- y# o- I$ u}7 K( i1 I( D  o. O& i, S3 x
static void init_camgeom_app_data
; q5 E! ~3 w. v+ [8 p(
7 a. ~2 j+ l* l2 q% XUF_CAMGEOM_app_data_p_t app_data
$ g4 I2 i+ y9 Y7 t, A5 B2 [)) a3 y0 E! e3 k( X
{/ U- H. I+ D; b4 X6 b/ k, U: a
if (app_data)4 J# }$ h; A: w9 X
{, t% M) a. I+ o  Y, j% \0 c& f& p3 \# K
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
0 K, |3 L2 M$ Z. z+ Lapp_data->has_cut_stock = 0; /* Used 1 - Else 0 */+ Y& [# N# |( V  F4 X" Z
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
' {. l# z; w2 i6 f3 @$ Bapp_data->has_feedrate = 0 ; /* Used 1 - Else 0 *// c: Y' N3 D7 R
app_data->has_offset = 0; /* Used 1 - Else 0 */
* v9 a+ G5 W2 y6 H+ [8 {* B" gapp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
+ f0 o8 a9 f% W$ Y$ capp_data->stock = 0.033 ;% m% Z4 n; [# }% A1 v& w
app_data->cut_stock[0] = 0.2 ;
/ B; e5 y' H+ O4 O+ J/ t: v0 uapp_data->cut_stock[1] = 0.1 ;9 e) j4 b5 y- q
app_data->cut_stock[2] = 0.5 ;
* I* W$ U. D" z; t" i( xapp_data->tolerances[0] = 0.003 ;
: N1 b( A# n3 Y/ V  s4 Capp_data->tolerances[1] = 0.003 ;3 B# W  \, Y1 U: V
app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;) D4 X2 V" F! D' s; s4 k' z
app_data->feedrate_value = 33.0 ;. s) A8 F$ i2 [7 y0 S+ W
app_data->offset = 0.055 ;2 i' r" [& y$ r- L# W5 W/ h8 `( |
app_data->avoidance_type = UF_CAM_avoidance_type_warning;4 `; J4 r4 S6 `) R) b
}
: G% }) s  p& W1 b/ ~}


/ @6 u8 N# E+ j, W* b3 Q" E- L
上海点团信息科技有限公司,承接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’错误。7 `' a1 N: W# m' m2 V, ~
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

3 v8 L" D! d! j. 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二次开发专题模块培训报名开始啦

    我知道了