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

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

admin 楼主

2014-6-7 10:50:25

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

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

x
9 [, o0 ]( z' i$ ?4 A) ~
8 s8 N8 u; N* a4 Y  z3 s& [
- R6 y$ T1 F" v4 S4 f. P7 F
0 M2 u9 }* ~$ J/ Y5 B6 S

#include <stdlib.h>
' }( R0 H/ w! u2 {2 V, }2 V/ t. t#include <stdio.h>

#include <uf.h>
3 W; @  v  ?' C' q6 ~#include <uf_object_types.h>" N; l$ h2 `! a3 X4 z5 y& u
#include <uf_ui.h>
0 s9 b: _- c5 M2 P) y#include <uf_disp.h>* M1 |  R0 N% v, Z6 i/ L
#include <uf_obj.h>
+ v3 R8 `/ m8 y  P#include <uf_cam.h>: e+ Y! A8 n! n# T2 z
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
( K- U# n% T1 ~* M5 Z$ Z#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;2 G5 w& Q2 ?/ O, H% ~  g: u
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何8 B4 I$ x+ Y3 A( a. e! `. R4 e( }
static char menu3[][38] = { "1) Part Geometry",
! k: @3 |. u- B% S# a2 X"2) Blank Geometry",
! m. N( P, U% g! Q5 W3 |"3) Drive Geometry",
8 N% G+ k$ p5 u1 \; Q7 E$ b"4) Cut Area Geometry",0 o' w' u$ G7 ]. V' d
"5) Trim Geometry",5 c/ N8 G/ A* Y; N9 ?
"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 )

{4 y7 D# g/ {- j" q
UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];* g6 [1 C- J5 c6 U/ L5 C
tag_t *objects, entity_list[MAX_CAMGEOM];. L" y6 t0 V& j% Q5 U; v
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";( ^9 C# e; t" m( z0 y2 P2 x6 a
char *cue = "Identify Geometry - Wait for the Filter!";
% h+ G; g8 K. }; j4 h# g  Zchar errorstrg[133];# }. S. C3 r0 T( L1 M' g$ U
int response, irc;5 ~( r; c. a! m5 g, ^
tag_t eid, view;; h, U! l/ g4 g$ C  Q
double cursor[3];

#ifdef DEBUG
0 k! k/ _) x- W1 f3 j; l7 Aprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
. G! C8 c4 Z* G7 v; S  }+ S7 A# s- W#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????% E6 v6 j3 W8 O) W0 c6 G; |
{
5 i" N) Z4 t  a8 f; y- P/ [2 V- v/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )
( Y( X, R8 G$ N{8 i. L. K( v; V$ q* M. w3 ?
break;
9 J. F" Z6 c* m}0 R! t& {: A5 @0 Y! s1 F
#ifdef DEBUG0 j' X" l  G! d8 w# z$ x1 T2 H
printf("\n Geometry option returns %d\n", geoption);5 s# p5 R1 D: D% Y9 b
#endif
! y! ?5 B+ n4 y; M. u, V+ F/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 ); N* ^! a5 B& H8 S) K8 [
{! z+ N3 |, k) s- H6 ^# P
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,
2 U4 z# I" {- _" A& V, SUF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
6 f. U+ h- r- M3 ^&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
# j% P8 h3 T; @3 u( \+ g//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)% g1 q9 V; d$ e7 u4 n) K
{9 O2 i" [. F! f! m9 v; p/ l7 U
entity_list[entity_count] = eid;
& a! o' |& v! S/ v#ifdef DEBUG
/ i7 l& v3 r3 ?+ Yprintf(" EID number returns %d\n", eid );% g0 [% w% [" c! V
#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),
) v& K3 i" Y+ ]" _&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;( _/ T. p) d) x: R1 `2 y$ q
}) Q' h+ G5 ?8 b  p" O4 F* ?
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )+ W% L5 u: W. k9 _0 ]6 [0 R
{. @+ C( n3 e& {1 x5 Q' V
/* Geometry selection is finished.几何体选取完成 */
9 @' |( C8 @8 p) n4 jbreak;/ Q9 {2 |9 O5 Z/ Y' ]: O3 X
}  X4 Y! }* f& K6 A8 R! V! R7 h( f
}, `$ o* p2 q4 l$ h, C
#ifdef DEBUG) ^$ [2 F. s7 U- @( a& u- s! a! ~
printf(" Entity count this selection is %d\n",entity_count);7 I9 S" I, g: k8 @, m
#endif

if (entity_count > 0)9 W9 s( k: m& m: X9 W
{
; K# ]7 Y! p& O* h$ @/* UF_CAMGEOM_item_t *items;7 J2 J7 I: c( C6 y1 e8 v
int item_count;*/

for( i = 0; i < obj_count; i++ )
0 ~3 N, M  a' ]  O5 Q5 ]{
1 a( X5 d+ C+ k7 v+ g) |irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
, {; `1 L% V  \7 Mtype == UF_machining_geometry_grp_type)

#ifdef DEBUG& v9 M/ P0 U3 H2 Q( i2 d
printf("\n Current entity count is %d", entity_count);' ]% D* K0 \, d+ _$ w1 l2 V
printf("\n Current object count is %d", obj_count);: p2 R: l! B; A8 Z4 @# G7 }
printf("\n Geometry option is %d \n", geoption );
0 x6 ^, B1 j+ n2 f. c  d#endif

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

{
: k7 @$ ]- F1 x/ b- c4 v" t+ TswiTCh (geoption)
+ ]- q  _/ q2 C/ W( ]3 w{
& Y" P/ @% ~, X; wcase 1:0 N8 J, j' F7 _
case 2:' E0 [: ]0 I. r5 V! D: |! a/ t
case 3:& }1 Z$ _' [- i- T+ `5 `9 T
case 4:
3 b0 i- O0 V  L' E3 K. acase 5: /* Part Geometry 部件几何体*/
: ?9 C. i7 c1 \: T9 n: ^1 K{% [, }& V! c4 W
#ifdef DEBUG
# C9 P( Z+ F% F2 C1 v9 o) aprintf("\n Type returned is %d", type);: ]6 m8 [# T' G4 N5 Z1 P
printf("\n Subtype returned is %d", subtype);
- X  L+ X- ^  ?9 x5 Y1 _- \* B#endif
1 p. x6 r, U6 P* S( f  x, w{+ ~) V  k- u' Z; c
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,% Z: r6 m+ v9 ?/ j
entity_list, app_data_list );
. B8 \6 ^# p2 C//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。2 t% _% f! e5 y: ~+ v- z
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
2 P  i( y% u1 {8 v& m}; \1 a% @0 H, n" c! z* b. D
if ( irc != 0 )
- V+ x7 d2 m7 g{* v, A: E; D  J
UF_get_fail_message( irc, errorstrg );
9 K- ^& g: `' nprintf("\n The return code is %d\n", irc);
9 i  ^3 e9 ~, Dprintf("\n Error code translates to %s\n", errorstrg);
0 Y9 f; i2 q0 L9 greturn objTag;
, C0 P0 q) q5 A" k+ [}3 }  ~8 s( p0 C- x* t9 K" n. B# U% R
break;
! U3 F! o1 c5 W}

case 6: /* Blank Geometry 空白几何体*/9 ]- Q* _/ b3 D" \: S1 Z: o
{) [' B) w) ]2 ?5 T1 @, B
#ifdef DEBUG9 _1 P$ g8 i6 o% u, t
printf("\n Type returned is %d", type);
+ ]! O7 F8 H3 h3 lprintf("\n Subtype returned is %d", subtype);0 p% l' \7 ^6 x2 m5 R9 }* Z1 p
#endif
! |, n' m! d9 G8 z# |9 B8 Y- g{
; p1 S$ W  [- N1 Girc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,. M6 n1 [1 z  n
entity_list, app_data_list );1 B) r" u# ?: y; P, a
}
" q8 x& u# [- Z0 ~$ O. u6 zif ( irc != 0 )
# Q: G: Z( G+ z) V" w{' M* F; m( T0 s5 |
UF_get_fail_message( irc, errorstrg );. f1 ]3 I+ ^" V; l! P  Q5 j
printf("\n The return code is %d\n", irc);6 y2 b1 j* t! ^# f  Q# T: Q
printf("\n Error code translates to %s\n", errorstrg);
2 R: ]- x- ^& R4 O/ qreturn objTag;
: d+ G4 t! r3 q3 y, Y) f}
# z  n' q. o1 D$ K$ T7 c5 \break;

}

case 7: /* Check Geometry 检查几何体 驱动*/
( `, I) I" N0 U; G% m{
1 b0 U% Z1 ^  K6 l. Q( X- M/ H* X#ifdef DEBUG
/ F$ }! B/ @( @0 n- v1 @, f3 Gprintf("\n Type returned is %d", type);/ _8 m) ^& N6 K# T0 \0 {
printf("\n Subtype returned is %d", subtype);! {$ |( f1 j% C! y( q& s, [# p; L
#endif. e, l0 O- u' {; y$ X" v( L
{# l* v6 K7 z& q
irc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
1 Z, o. ?6 H# j2 B* C% Q/ @2 kentity_list,app_data_list);% y3 \$ K5 G) {4 c7 n, _5 C* h7 u
}
, o& j: i: x" i+ T# a+ tif ( irc != 0 )' L- X% S) u) I8 b9 m/ b
{
# Q9 b5 r: F; P3 f7 ~; x9 TUF_get_fail_message( irc, errorstrg );
5 n  T' o3 H& A$ g* m( Qprintf("\n The return code is %d\n", irc);: [3 G% w' f  ~) Z1 h8 ~5 V
printf("\n Error code translates to %s\n", errorstrg);
+ v) @4 ]$ E. \% w  W! o. @* {return objTag;
9 u& I4 O; s7 y4 q  W! t2 p: @}! d  G2 r3 }6 T: U$ E& s
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
. F7 B6 ~# F, z! ?{( `7 A0 i% n4 ^% e, Y
#ifdef DEBUG; l# ^" ]7 R/ o& ]
printf("\n Type returned is %d", type);0 o8 b2 R* }! r6 n0 e7 _# n
printf("\n Subtype returned is %d", subtype);
! c  x" k# ?# l; `) {" E" s# h#endif
  m5 U* d' G  p% h0 S& J{
: l6 g# f1 ?9 e/ Jirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
% j+ u' R( g- kentity_list, app_data_list );6 m# c$ c. m; M8 _
}' g. z; T: X$ X
if ( irc != 0 )- h, _7 ^' C' }1 B) ^
{- g0 P, N, Y4 I/ t
UF_get_fail_message( irc, errorstrg );
/ r+ E+ ]0 _7 b3 A2 [! C& Iprintf("\n The return code is %d\n", irc);
( J% S. Z) I2 K+ G1 h" a3 Uprintf("\n Error code translates to %s\n", errorstrg);( X) {" x5 z+ r4 F
return objTag;# p2 E. e. t4 C/ I* @  R
}5 _) O8 R) M# ^& n2 y" ]$ Y
break;& `: N5 h" V2 Q
}
4 `$ h0 c3 i3 w+ ~/ T1 K: j$ Fcase 9: /* Trim Geometry 修剪几何体 */* c' }( _* p# d) V! o8 M1 z
{
! r: T6 N: [3 o5 Kprintf("This case not implemented.\n");; E0 A3 z% r/ X
break;
4 c7 s$ h- a3 }}% D# [1 G* J& T- G- b; J8 |
/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/: ?# v7 [; B# R$ j$ j
{1 i  G) Q9 l, i$ g5 O! ?% M7 J
break;# T- M* E+ X. j
}+ ^6 U# k1 A! \. o5 @3 d/ }
}
  t( W& \$ R9 I}
$ a# ]5 J7 u# \7 @: K9 u}
! \) Z9 p& Z9 S. b}$ v8 O5 g$ T% @/ _, j; \
}( c# p. z  O) x( p8 \) P1 l9 T
}
* s6 {0 y; Q$ n9 S& p: U/* Free the Allocated Memory. 释放内存*/
9 |, Q4 G# d3 \2 Ufor (i=0; i<entity_count; i++)# I* K% s$ l& M( p
{0 L3 n! {. x; x: [2 t$ f% s
UF_free (app_data_list);3 G- X- x* [8 l5 o; g( E$ q
}

/* UF_free (objects);*/

return(0);- ]$ R9 f- u/ p6 {  G4 u1 q
}
+ I/ }( v" n9 b' i7 s# ?' w* n/* Selection initialization procedure 选择初始化程序*/
& Z3 g0 B: B1 ~static int init_proc  i; b  r/ T& n2 j3 J
(
- ?8 X% B4 S8 r+ tUF_UI_selection_p_t select,//指针 pointer
! p* q, v5 T' e3 {! e4 `3 @void* user_data
' Y* L; {& T3 z3 h1 t2 D5 s8 ~)4 _0 E( Z' ~* \* ?+ i
{  v9 C0 V( S7 q+ J. f7 S0 F1 Z
int num_triples = 3;2 H2 B" Y1 x3 n+ |
//最终指定的特征类型! q! Z' {& z( X' f/ D
UF_UI_mask_t mask_triples[] = {
& u& i3 s& [& t/ R) n8 ~UF_line_type, 0, 0,
- a' I0 _! u5 C$ r' S% bUF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
; n& S0 L9 A7 XUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,
; f' [/ Z8 r& C6 w1 N  {. |! FUF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
1 b/ ?( h0 x# inum_triples, mask_triples)) == 0)//3倍 3*3=9

{9 D1 s/ v* o) w$ r0 o
return (UF_UI_SEL_SUCCESS);
. G+ r9 S3 V7 c/ D* K4 w! W$ |5 P! l1 B}. m& a" X, F% z% ?# ?+ `  _
else
( ~/ A% @( ?. B( h7 d) f5 k! l{
! o0 A1 ?& A5 Ureturn (UF_UI_SEL_FAILURE);
3 [4 |. E) ]$ A+ h9 J% `( w0 S# V& u+ a}
! c' M& X* J( q; ^$ ~2 Y% B( |}- j! z) x7 \5 z, k" K' \
static void init_camgeom_app_data
9 F% _9 v8 f+ x5 Z6 N7 J! g(* F( ?+ K8 R4 I
UF_CAMGEOM_app_data_p_t app_data
# o2 R) w8 n7 T0 b( b)
  J  b: s) ?! n. D9 s{
& |% n# x6 g' t4 B1 k6 U5 mif (app_data)  G3 X/ i# B. g3 O
{
' h+ S" |1 v2 t2 l6 f$ u0 q) a4 O/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */, T1 y! E2 F8 H
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */! C  p" U  v" Q& L8 m* N) x* Y' g
app_data->has_tolerances = 0 ; /* Used 1 - Else 0 */0 y0 D7 Z% _0 x1 Y0 C
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */2 G5 i% C  w0 G0 D* H
app_data->has_offset = 0; /* Used 1 - Else 0 */
! s7 Z/ Y  O% lapp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
8 V# y* n, D  G% Bapp_data->stock = 0.033 ;* I) A: O9 a2 {& U$ }+ p1 H; f3 _. j
app_data->cut_stock[0] = 0.2 ;# @8 L5 J2 F* z! c0 f
app_data->cut_stock[1] = 0.1 ;3 U8 {6 G4 Z% o9 P- U
app_data->cut_stock[2] = 0.5 ;
& x" g' H8 r* R4 H, X, K- [app_data->tolerances[0] = 0.003 ;6 m' Z; ]  ~" h5 }
app_data->tolerances[1] = 0.003 ;
- f. P# e1 k: o$ |* }$ h3 P  wapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
& Y, k: I- w  \app_data->feedrate_value = 33.0 ;/ b, Y: B, ]# L6 T
app_data->offset = 0.055 ;
( s: S! D2 ^+ u6 sapp_data->avoidance_type = UF_CAM_avoidance_type_warning;
5 \# D8 ~7 V& M3 E& `9 f5 Z}
  e8 K  \( [9 P  f}

: e0 `, _+ l9 q; q$ G: }- I( ]: f
上海点团信息科技有限公司,承接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’错误。& }. H8 W  j+ v/ j: _1 O
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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


4 {, R/ R6 {1 Q3 E) |不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了