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

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

admin 楼主

2014-6-7 10:50:25

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

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

x

0 i/ p; e' j" `$ I, ^) [& v: F2 L+ K: [5 K5 U
9 o- ?# s2 D9 j! R( A4 ^

( H9 z" l/ D, R( r

#include <stdlib.h>1 Q' r! v0 @- ?" p
#include <stdio.h>

#include <uf.h>- C- r1 S  q4 k  P& H4 u
#include <uf_object_types.h>
* J' I- L/ e: r& d' k: x#include <uf_ui.h>( \( E! K! i$ I4 v
#include <uf_disp.h>$ @' ?5 t  S6 a8 u+ H: o8 A
#include <uf_obj.h>
, q' ]. V2 l' X; [#include <uf_cam.h>
9 t( K! c) Y& E; x% h3 G8 J#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
' w2 u# ]3 Z7 H; r  a$ g#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;$ v0 u! x3 V+ t: P
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何) H' t- W" I8 T2 t1 _
static char menu3[][38] = { "1) Part Geometry",
; [' g7 U8 j  u( f' h. C"2) Blank Geometry",
  t1 _7 v& B- |) t  ?# r; {"3) Drive Geometry",
5 U. U0 M# G2 x: V9 I1 ?4 K"4) Cut Area Geometry",
! g) ~' E3 W' j% j/ C0 F3 d"5) Trim Geometry",
. t/ K1 C8 ]' E5 ~% h' {0 G1 X"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 )

{) y) a) A6 L) A  @$ S/ L% d
UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
# s3 k) {0 h& E" |' s( L7 Otag_t *objects, entity_list[MAX_CAMGEOM];
( f) x# }& a( `* ]' I3 \int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";. u+ Q- r3 H, E4 `1 T, e* G  A& k$ k' y% j
char *cue = "Identify Geometry - Wait for the Filter!";$ v4 {0 D* S: J
char errorstrg[133];4 T- W% C, b$ O& L+ Z
int response, irc;9 `2 c- i) z8 I9 D) d. v
tag_t eid, view;
+ w9 t5 r7 |6 n  l$ y8 T( S  Q; Udouble cursor[3];

#ifdef DEBUG$ _/ c( ^7 Y0 n( }9 ~* p' Z% Z
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
! K7 f# B  A& _9 b- d$ S. H#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????. D- K% ]3 [1 L4 v- W8 x
{% M, u# @* F* @
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
$ g* a, L( b* A2 s7 u/ H( u{0 L6 S. o8 F1 j9 R- L
break;2 V- W$ w0 S( _# ]
}" i% q% r0 D. w& `
#ifdef DEBUG
% r1 E: t) L: k  g' A+ yprintf("\n Geometry option returns %d\n", geoption);
" {+ ?! M: [, z% L#endif
# F" c3 i0 i9 X  i& E& l8 F/ O/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )2 r: t% S% `2 V" H, S0 @( Y! D
{
% j2 _" A, ^( W! centity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
4 h( H* P) q. T3 d) w/ m- hUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
3 p. }* R) x: F0 S; C  B. J* i' t&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
* C9 e; i* g2 v8 P/ J( G& @0 N2 B1 ]//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
' T$ _2 j8 b$ Z0 N- e- p; `{
7 G4 E7 Z# |- h! O6 Uentity_list[entity_count] = eid;
/ x9 l5 w! t2 a/ u#ifdef DEBUG
& f: N& w- V1 T: y5 gprintf(" EID number returns %d\n", eid );
/ B6 L: M% Z) o- ~6 T& k#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),
. V2 U1 [- n5 |1 G&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;9 r8 v' W1 c: \7 S
}* Z* @& \; N% J: |( j7 W
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )' p8 I; V+ W/ Q) r0 x' D
{' b/ s* L1 J; I, u" |) `
/* Geometry selection is finished.几何体选取完成 */
' r0 U; q0 T- M( ~9 mbreak;) m4 A1 F0 f' S  _- h7 f* |8 }% X
}. K& I- n) g- V/ W8 \* G+ ~
}
% n; p' Y! U8 B) B- g4 o! p" s9 F#ifdef DEBUG
/ d1 q" o6 P/ F# Eprintf(" Entity count this selection is %d\n",entity_count);
' ]3 E* D( X% S" a0 S* K; z#endif

if (entity_count > 0)
  c) a1 Y7 i, H) ~; f- N+ j2 e! A- l{, X% S* \: l/ v  y6 I# Q5 d5 X& X
/* UF_CAMGEOM_item_t *items;# s1 i1 w6 d  k/ w# I. M
int item_count;*/

for( i = 0; i < obj_count; i++ )
3 z/ v0 s0 S9 `: c3 `{7 d6 z: Q+ u" S. K) `
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
/ m0 J% t* c/ O! ], _type == UF_machining_geometry_grp_type)

#ifdef DEBUG
1 G  L, c+ V4 d' X# V, Pprintf("\n Current entity count is %d", entity_count);2 i1 ^5 t% ?: P! b, {" l" T
printf("\n Current object count is %d", obj_count);; ?: G( i0 s, d' O2 X
printf("\n Geometry option is %d \n", geoption );4 y/ m. e4 z# N8 [$ F% o
#endif

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

{- x$ y* y4 _6 ?! _9 P& e6 R
swiTCh (geoption)
9 U! b( u, Q0 |6 R3 u{# `8 d8 K8 T6 |
case 1:
7 R  h) z* @1 Jcase 2:5 L& s* t2 z0 Y9 q6 M* o  Y  p
case 3:$ }& O0 J2 o. v. ^9 [" G; ]8 B$ R
case 4:
. c3 T$ A6 B1 b, R7 r" vcase 5: /* Part Geometry 部件几何体*/' X) C$ E: A( e$ Y7 E- Z6 N( w
{
1 h5 M" e/ c/ H* s5 a+ a#ifdef DEBUG
0 d% \* I& {- J2 Fprintf("\n Type returned is %d", type);% ~( Z7 R  ~7 X5 e/ [- ], f
printf("\n Subtype returned is %d", subtype);( v; b$ R8 `, d0 {( w
#endif
8 |+ J9 T5 D; N/ k% j{8 D. K7 D- G" a0 x4 i
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,
+ a2 ~  k3 o5 X: }' u+ `entity_list, app_data_list );
0 L; J& J" [  @% n4 k3 p' b8 ^//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
! h3 i, \5 c. Z- G" X  T& R3 C//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
! n! Y  t) t+ b2 a}! ^7 }9 ~% ]( K8 C! Y# d
if ( irc != 0 ); Q: u2 N/ K2 o! B
{3 l! `% _' h  G, B+ g& w
UF_get_fail_message( irc, errorstrg );
; \6 W% y- K4 @- x& p: q% Rprintf("\n The return code is %d\n", irc);) y, h5 {6 S: g, [9 f9 K
printf("\n Error code translates to %s\n", errorstrg);
1 ~9 j1 t; l! O; }( [- Treturn objTag;. J* B$ C/ A! }* K$ r" U
}
5 U4 {" r% ?6 \+ K: M: ~3 ybreak;
2 j% }) J/ J1 [  ?$ C0 e}

case 6: /* Blank Geometry 空白几何体*/
2 g! ?+ c' }% J! @: p{
) j/ I- V' G2 R0 e  [#ifdef DEBUG: ?* Z3 j% I; R. x) U. e  f6 l
printf("\n Type returned is %d", type);/ ?' V( _8 x3 H$ N, w" A
printf("\n Subtype returned is %d", subtype);) f# F% b' x5 I0 {" j
#endif. g, K; R7 j& r8 e
{
9 d( @. _; H4 C$ K2 O( v2 x% D: Lirc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,/ P( _( e  r; b' n$ `
entity_list, app_data_list );% |8 m- v1 j  s9 y; u
}
' \" a- l' H  r' ~! P, x: a# F2 ~if ( irc != 0 )2 R# x  I" q7 {1 x6 S
{. @) |9 w2 K; j; E* c! y
UF_get_fail_message( irc, errorstrg );! p" p$ p3 t4 w; e
printf("\n The return code is %d\n", irc);& }! E0 |# t0 M" {/ W. B: l
printf("\n Error code translates to %s\n", errorstrg);
7 w6 ^' D& k: ^4 [7 K. A$ Xreturn objTag;$ _: ]2 `& Z# _& G5 o* r+ Q( j
}; \% u/ J( \+ s! `9 g" j
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/
) `3 c$ q- x4 s5 w" J{0 l$ ^, W5 l3 `) Q  s
#ifdef DEBUG
- ^) A* M+ y0 I' I  H; p8 S2 pprintf("\n Type returned is %d", type);1 g! j2 ~# @! W: }. ?
printf("\n Subtype returned is %d", subtype);4 l  B; P9 F* S. l8 v, s
#endif
6 Y( [& Y$ w, E- @: O{% e/ r2 _* ^- C+ t& Q
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,# P; Z  D3 l2 J' s
entity_list,app_data_list);8 h% d9 @: x# t) `  c* a
}
  W  i& ]8 L& w" h( V' z# [) Rif ( irc != 0 )' q! \, N0 U. F$ w! W
{
6 k4 }7 f/ ^. V4 pUF_get_fail_message( irc, errorstrg );
# m5 m* N& ]7 G* Q0 g7 xprintf("\n The return code is %d\n", irc);
; X0 l4 t- y% s+ I' r9 Aprintf("\n Error code translates to %s\n", errorstrg);, L4 z* C6 M# {
return objTag;
  u& U. a% |* T}
1 H6 j. Z. L. @3 I8 I6 Q, A6 f4 g4 {break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/' g0 S/ _& k6 J
{
2 Y2 a3 Z5 z1 V#ifdef DEBUG
9 j) B* l. T( P. g& oprintf("\n Type returned is %d", type);
3 ]* p. p8 Z0 X$ D* \, t; Fprintf("\n Subtype returned is %d", subtype);
0 E# |$ l1 {5 B; ~+ {* Z  z#endif; Z1 b0 X8 d$ L5 s/ s# ~6 B
{
# A$ l* a% s5 l' |; mirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
$ X! X% `1 w) yentity_list, app_data_list );
* T% ?. u4 F8 v+ v8 E4 G. i3 W}
" ]8 h6 X1 z; m% H, Yif ( irc != 0 )- n4 {& l$ ]' g4 n  {; ^: q
{) b+ T; @1 G- |3 G3 H; m
UF_get_fail_message( irc, errorstrg );5 K* h- c. ^0 z" [
printf("\n The return code is %d\n", irc);
3 p" u; m4 e' o7 w) Xprintf("\n Error code translates to %s\n", errorstrg);
) _5 P1 j6 @# Dreturn objTag;5 Q# G3 w" \* j' J4 K1 U/ v0 z( X
}
" f2 S) r% \( obreak;
1 N/ Z+ i- c4 x" i+ K}. f/ l" x. v; c" d
case 9: /* Trim Geometry 修剪几何体 */) i$ F2 K6 Z8 e8 y4 }
{5 t7 G3 M# h3 a- H: C& }7 Q4 q
printf("This case not implemented.\n");* R5 m' F; y3 x2 l) D+ l
break;
  F% X. y8 B" D% t/ ]) H; ~: k+ t}
9 I7 f. p$ w. w. U/ ~/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/1 t0 \, ~9 _7 r  ]: x5 k2 x0 e
{5 m+ d& N& N) |, v0 `) }* L
break;
5 a8 L% c& G- Y' o' J}
4 L: A& W3 x; g8 a3 g}; P4 {4 V# r# @2 p
}: H6 h7 v1 m( L# K# G
}+ C% ?: v* W3 Y7 v5 q% I/ S1 ]; I# {
}* U2 P& b7 k' c$ o' f) i- |+ L
}1 n/ L9 o" f; U8 p! j- D
}
; f  e) G& G! s- `$ I1 j/* Free the Allocated Memory. 释放内存*/, h, P/ q' v: P5 D! R5 U
for (i=0; i<entity_count; i++)
1 _+ n, C2 Z5 F* E3 L6 \4 y- Z{/ `! T2 N/ P, _9 _
UF_free (app_data_list);
) d4 \2 R0 p- n% ^}

/* UF_free (objects);*/

return(0);$ X/ v+ G% v' s# O, U
}
  i' V, C* c4 e' Q1 t/* Selection initialization procedure 选择初始化程序*/( D8 F: U  T  O/ j4 r# ~
static int init_proc
0 ~; J# J% v0 V+ s1 O; F" T(1 n( `6 N7 C* p' K
UF_UI_selection_p_t select,//指针 pointer
  U  ~# {) W8 H* Qvoid* user_data
' {' W9 n! p2 a) L9 `7 C" |3 X) \)
3 V9 W/ J. {8 Q, l9 G{
; g( ~: T# o8 H  M3 d5 o3 K) Vint num_triples = 3;6 Z9 K; a. E1 ~/ q0 z
//最终指定的特征类型
: f, y5 x' W+ s) @0 iUF_UI_mask_t mask_triples[] = {
' y0 t9 {8 U6 G. C% x  a% c! OUF_line_type, 0, 0,3 M5 o) y. O/ U, @! Q
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
3 Y" _$ k7 P' U0 U+ A, g* hUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
* G% L- P/ @" u. X/ R" pUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,5 i1 Q* Q" `3 U" i& N6 |, M$ ^- |
num_triples, mask_triples)) == 0)//3倍 3*3=9

{
3 T! J# G' P9 c' C. Y1 g/ \5 |return (UF_UI_SEL_SUCCESS);
* A  M* ?4 F8 X# b6 E$ j}
, b0 D% }# L; Welse  ]* E. E2 B$ u, ?
{: E* r5 E0 G$ u( R: `1 w
return (UF_UI_SEL_FAILURE);* M. C9 B! }# C
}
, K6 L; X% o2 ?' W  Y% v, v7 S}
5 \" c9 @2 W; h+ d; m4 ^! `static void init_camgeom_app_data! P4 j, E6 M! Q0 k
(
2 g8 F, S) ^6 A4 s( m- x- `UF_CAMGEOM_app_data_p_t app_data
4 T3 F4 T" ]/ ]" c)- I9 m2 }0 |2 v! G' k, i
{
% {% w4 x7 w# G- Y* K2 eif (app_data)
* a! ^7 A, M/ C0 Y1 q{4 q6 X9 T& z6 u
/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */
! z' j) S- U0 c/ ?! vapp_data->has_cut_stock = 0; /* Used 1 - Else 0 */8 N" w2 k# M% M9 E/ F
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */) [5 ^9 f3 d6 d0 a/ k
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
* @& m3 y& j' Y' Japp_data->has_offset = 0; /* Used 1 - Else 0 */
6 }) E8 N5 `6 B- f9 f$ Gapp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
, w6 J! @6 H1 `app_data->stock = 0.033 ;: ], }( D( l2 `3 C
app_data->cut_stock[0] = 0.2 ;
& P4 S9 X+ U4 D3 n; _. R9 @app_data->cut_stock[1] = 0.1 ;0 l$ v7 p9 D5 d0 D
app_data->cut_stock[2] = 0.5 ;
5 [4 D7 {: O2 y# O7 o8 U& R; B# uapp_data->tolerances[0] = 0.003 ;
! H$ U1 b$ M! J) b# J: dapp_data->tolerances[1] = 0.003 ;
  W3 o- W& Y9 q, gapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;& R, a0 |8 o! @, A9 j
app_data->feedrate_value = 33.0 ;
# N( s' f8 i5 f1 N4 iapp_data->offset = 0.055 ;
/ P% W% |% {2 O9 @' papp_data->avoidance_type = UF_CAM_avoidance_type_warning;; T& v1 K/ R  K$ K. w3 [
}& D% V, ^+ d6 d4 f& \  `9 g
}


( e2 K$ G- T2 P! x2 w# u8 l$ X3 `
上海点团信息科技有限公司,承接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’错误。
6 q. U* c, i" P* a有了解可能的原因的吗?
上海点团信息科技有限公司,承接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


/ M. s* z* D* h; i! @: _4 s不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了