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

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

  [复制链接]

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

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

admin 楼主

2014-6-7 10:50:25

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

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

x
  P  V2 m( i7 }  ~4 [9 c& J* E

, ^/ N6 i4 o+ M- U* [
7 K9 g! e$ u% C. A% m" Z4 q; v7 |) b( v; e. r

#include <stdlib.h>
6 |+ j4 m! O+ w% o" [# h8 `#include <stdio.h>

#include <uf.h># j6 `% w. M+ a& u7 Z
#include <uf_object_types.h>4 I8 ?& b; {+ c0 w3 e
#include <uf_ui.h>/ R) u& U/ q8 g/ i# g! x' t
#include <uf_disp.h>9 m; ^3 g/ }. w0 |4 X8 C) U- y# U
#include <uf_obj.h>
4 V5 y- ]% E3 d. L5 ?, v#include <uf_cam.h>+ c" x* v2 h; K5 \  K6 D3 \4 U
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20
: p; D6 P( ?! D1 E#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;
# q7 A3 n- H9 F# J2 o- \& ?static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何: @1 q! X  O+ N: U3 W. {6 F
static char menu3[][38] = { "1) Part Geometry",- u* }* A9 C3 U8 R: U" w
"2) Blank Geometry",
9 S) i- E  ~0 e. y+ j% c+ R, l"3) Drive Geometry",- X3 O, O# y# x* p* b5 e  V
"4) Cut Area Geometry",( Y, ^* e% n" I% n' W
"5) Trim Geometry",
" N* D0 w! n1 m& k' [9 [3 ?"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 )

{
5 p! L1 _. P5 h/ b- n8 ZUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];0 O0 I$ H: Z& I
tag_t *objects, entity_list[MAX_CAMGEOM];2 n: d6 U% W; b& @
int i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";
, R9 D* [9 Y" f9 jchar *cue = "Identify Geometry - Wait for the Filter!";
' P/ d- D: k2 p" k3 fchar errorstrg[133];2 n3 I( i5 Z- S/ S& M2 W
int response, irc;& y$ `" R, H% k  g' n1 s" [
tag_t eid, view;
8 `: r2 T% z: N6 r) Jdouble cursor[3];

#ifdef DEBUG0 R/ e7 k0 J! a' h
printf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
! b1 H8 M- D* j" C$ g#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????
4 m8 w2 K/ D" f6 z* L, A) m* {{0 K% T9 h, K; J/ M' I0 X" d6 m
/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )- N9 e* M. }/ [/ a% l/ J$ h! g# Z
{
( Z# \, U: J/ @0 i! U2 Fbreak;
$ T/ U: m3 [0 F5 Q6 b}
% P% [! i  J# p! r2 Z#ifdef DEBUG, N* {' s! e( v9 ?7 \8 U
printf("\n Geometry option returns %d\n", geoption);
  r0 ]5 m/ O* `( B8 J7 O, e( ]7 ]#endif
5 {* f! }- B4 J2 u/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )# o5 B2 s/ A/ J% Q6 ~0 M7 |' L) |4 o* P
{3 W8 l/ P; Z; {; X3 C  D. Q
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,5 x8 i# k* g2 L3 x$ c- i$ l
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,
" a8 H" i, J- w- x+ [7 V. G/ V&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义9 n. v, x9 \" N5 T+ q
//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)( {% F4 A& A& r
{
1 g' ]1 C  u- dentity_list[entity_count] = eid;
1 W8 p% G2 G4 n8 w( j#ifdef DEBUG
! f  B% ?7 B3 C' jprintf(" EID number returns %d\n", eid );3 H) c) [9 `# a- 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),
6 i+ o$ h! u4 Q* z, i) `&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;" v- K+ I# U. \  ]
}4 X4 I3 A' [3 O
else if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )
4 B6 X/ J; H& O* Q+ Z6 M{
# p1 D1 Z. S: R7 L/* Geometry selection is finished.几何体选取完成 */
: n/ K8 r! {) p$ Hbreak;! e3 _. X8 {2 E+ p5 F# F" y
}
; K8 M" ^& Q9 k6 ~6 L& m; V) I}
; f# k1 @, i) F2 c#ifdef DEBUG
  i  |, _: E+ V- }' Mprintf(" Entity count this selection is %d\n",entity_count);
# N, X. |0 a" e% t& F6 l#endif

if (entity_count > 0)$ a8 i' Z  O0 g0 a3 q& m
{
1 g2 o$ E+ I7 |/* UF_CAMGEOM_item_t *items;
% c. B* p) h6 J) x  Q2 tint item_count;*/

for( i = 0; i < obj_count; i++ )3 c$ x! k+ Y. S
{0 g; n' F& i3 p1 m% i
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
/ S4 Q% v! u5 Q6 Mtype == UF_machining_geometry_grp_type)

#ifdef DEBUG+ Z7 ?# N: a* s9 g! [9 T9 t
printf("\n Current entity count is %d", entity_count);
6 T8 x/ n& I" ?6 ^printf("\n Current object count is %d", obj_count);* |& l- I6 M: e% {8 s8 B& A" ~
printf("\n Geometry option is %d \n", geoption );
) G  E9 o  T$ `#endif

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

{
' J2 }- o6 B# c3 G- s8 g7 e8 ?swiTCh (geoption)
* R# v+ l- u# v' N2 j2 u{( i. f4 t) [# @& E5 b
case 1:
9 T6 c+ C1 X# L; q" |! }case 2:
2 {1 E% @0 t1 c: P$ m8 h+ \7 }case 3:
' `4 j; k4 S  y1 B4 W+ Acase 4:9 w5 o# S" K: f, _  I1 P% r
case 5: /* Part Geometry 部件几何体*/
- P. Q/ B( C$ l9 v/ o% W9 a{. |8 p3 j  b! ^: r
#ifdef DEBUG
' I7 k5 B) R" iprintf("\n Type returned is %d", type);4 @$ I" S; s7 Z* Y& H6 F* [! s
printf("\n Subtype returned is %d", subtype);1 i' J. Y4 G& ~; c: N& d
#endif2 z- r; F# J/ O& d
{
  e$ o; V5 J6 n$ T' J. birc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,1 L* f- {1 [/ R% @6 y! }
entity_list, app_data_list );2 d) o  [5 F4 ~' C7 @( t. d4 K
//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。
6 G2 W, u# P! a% l1 l5 L4 ~//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
7 m  T) h$ b0 J}
) `) H2 V. m4 Iif ( irc != 0 )
5 z; ?: P, ^2 M$ p$ D" Z{
. Y- r2 ^& L$ o) d; }$ m! c* ^UF_get_fail_message( irc, errorstrg );
1 d6 H2 c: P+ l8 x0 Dprintf("\n The return code is %d\n", irc);
1 e$ Z$ W. g9 A! u$ s7 @printf("\n Error code translates to %s\n", errorstrg);
1 V- U% [* V0 n" d* F! A$ qreturn objTag;; O1 v7 A6 p/ z7 L9 H
}* M: G  e( q/ \6 D8 s& N
break;
3 _4 Z+ ^& K$ a: R}

case 6: /* Blank Geometry 空白几何体*/
3 p2 b6 R: o4 F5 P3 p9 \{
0 _' s- D, `% b4 W7 Y6 N#ifdef DEBUG2 V4 X' r) u& B1 W" a  {/ `( G0 \
printf("\n Type returned is %d", type);
; E8 y/ A+ J/ `% E7 _; W1 sprintf("\n Subtype returned is %d", subtype);
1 `( T$ D4 B7 {$ t#endif1 O7 z& }: T; _5 c. ?$ q8 {
{$ g- S+ |/ m- i6 `/ V2 n
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,: I6 p( T3 y3 J7 X& W) B
entity_list, app_data_list );1 K5 [7 N$ [7 s8 C
}; k/ @2 V+ [3 T' ^
if ( irc != 0 )
8 g2 j  W" F7 C9 s' Q( ]. z% R7 Q7 `{
" v% I( n8 Q3 O+ @9 [UF_get_fail_message( irc, errorstrg );7 w. P5 U( e3 ^) d
printf("\n The return code is %d\n", irc);
8 ], H( u6 i7 R2 a  A4 k* \# dprintf("\n Error code translates to %s\n", errorstrg);6 p8 E* m/ [& N3 A
return objTag;. H+ m! p; P: A1 a
}
& a8 C5 y, z( V3 e: Ibreak;

}

case 7: /* Check Geometry 检查几何体 驱动*/" q: ^- i* ?3 w. A1 j1 J& |
{, M2 S: n" m: ~5 V7 W) X
#ifdef DEBUG
1 u( L5 U2 \% G) C# P3 \printf("\n Type returned is %d", type);
( _( N# v6 l' `4 ?" Sprintf("\n Subtype returned is %d", subtype);
! R8 z; E5 C: r#endif
2 K( W+ w: W- o{
9 V2 z8 S& x( _% Z+ Sirc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,3 L0 [9 q# e5 H) }" P
entity_list,app_data_list);; z7 }5 [* r! s: ]" B1 z" o
}% c# m# w- y" }* E- A
if ( irc != 0 ). C* I; Z6 ~9 v) y- e  P2 }% {
{
! f; A3 M, q4 N/ X* [& q9 JUF_get_fail_message( irc, errorstrg );
+ h( S  \+ U2 P0 Y' h$ Xprintf("\n The return code is %d\n", irc);
; P2 Y+ t% R& k6 I& y  vprintf("\n Error code translates to %s\n", errorstrg);
* D6 q  N$ X( E7 h- ~6 q8 |return objTag;2 O" ^: W  |# u# I1 I/ n
}
5 \. i9 w  B; a' A: G; tbreak;

}

case 8: /* Cut Area Geometry 切削区域几何体*/7 {. G) Y/ E8 F8 M) q5 ~
{9 l: ~: x: e: j1 e$ h+ g. R
#ifdef DEBUG
" Y% z: J* D- c" u* I) Mprintf("\n Type returned is %d", type);* h) U3 s0 z3 N5 `
printf("\n Subtype returned is %d", subtype);. ~! j3 ?7 A' k; x% L
#endif
. _8 b: I! [5 a6 v1 M( }{
& I9 V& Y% N1 L. Q+ B) f& Sirc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,5 F+ P3 ~1 R$ `7 l# g+ v% o
entity_list, app_data_list );  e; S- e5 }& f2 P
}
& S, |" a. [1 o9 ~8 r1 lif ( irc != 0 )9 @1 x& N# k& q. H! Z* m% I
{
6 c9 V# o7 Q3 ]/ uUF_get_fail_message( irc, errorstrg );
$ }+ N" y# V* a4 l; xprintf("\n The return code is %d\n", irc);
. ^& @# H* r/ W7 q" aprintf("\n Error code translates to %s\n", errorstrg);5 s5 H  s) [$ m
return objTag;  U9 P. [# x  e% d* g; Y! Q
}
& B+ B1 P8 W) ^break;- n8 L' G0 }; k& |" g; F
}" o, |% E3 Y. w
case 9: /* Trim Geometry 修剪几何体 */
: v. K  J. x9 W- _( F{5 f0 m$ o& N" Q/ ?( a; P; p1 Z
printf("This case not implemented.\n");
3 W$ A4 q, M1 _1 m6 ~break;
  n& c/ Z+ f% j}
' Q& W/ |& B- D! f/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/
. `  n; g" a' V{
5 A2 g1 {! j5 s% i) Q# I0 ~8 rbreak;+ ~8 H# b5 i! @! k- P, q% g$ o
}  e9 M& ^- u# k4 A6 w& t- j: D
}  E- ^  A9 o" o/ @' v
}$ [' E; W9 x3 e0 [
}
' G4 N& L& Q7 s/ J9 ~% |' p4 ^}- j! t0 d  Z; Z% |& i& n0 M% O
}
3 M2 o/ v! e/ B9 F7 D. K}
- E  c" W6 |- Q  }# s% d/* Free the Allocated Memory. 释放内存*/
; ~' K1 A- @) P! s3 u( n4 X6 ~# W1 Wfor (i=0; i<entity_count; i++)
. r: a* w& Q. T0 C% y{
- r) X' U. ]* P, m5 Y. PUF_free (app_data_list);+ t1 D- l0 T2 s& O
}

/* UF_free (objects);*/

return(0);
3 m8 E4 r& j! E}
; H! |4 z/ v2 {' ^$ {$ v/* Selection initialization procedure 选择初始化程序*/* {0 i  a. _7 d1 w. G2 k" H; o+ ?
static int init_proc
6 g% X. R& M2 {' T# E(8 Z3 L+ n8 s' X1 |
UF_UI_selection_p_t select,//指针 pointer1 P6 J9 K7 p) F) e- b& s* X
void* user_data
5 B: ]5 V4 L2 `8 })' p& @. k" Q0 d
{/ W' e- K7 o6 T. p( o/ d
int num_triples = 3;
5 @0 A& ]/ X% W( f* Q+ ~3 t//最终指定的特征类型
- c7 e$ d7 y$ YUF_UI_mask_t mask_triples[] = {
8 R  f* b/ W  U; G& B& vUF_line_type, 0, 0,9 d. V; Y. b+ p( A
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,. O+ q# J# i6 j. q- b" ^, H
UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,6 Z& O  N4 i" G2 d2 @% {
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
: J  [, S; X; |# _! e7 t( R: p- ~num_triples, mask_triples)) == 0)//3倍 3*3=9

{; J6 x6 r# {) M
return (UF_UI_SEL_SUCCESS);$ m. W2 f) x* ?
}
& e- l) \( r) x# ]. R; Z# _9 R) _else: j7 q% {9 }" E; v$ M
{
3 ?( i; _1 T2 H3 j0 Areturn (UF_UI_SEL_FAILURE);
- ~+ \) }/ _. y* ?}$ d  S8 {$ L) C/ S. f6 N! u
}4 q( g( o/ H( A6 W3 b& p& ^
static void init_camgeom_app_data
: |1 g8 N* J/ X7 @) _7 a! P; g1 L; y(6 z7 Z9 _/ u  |# }" [2 i8 Z& q
UF_CAMGEOM_app_data_p_t app_data
0 H! V" ], q. _)9 ~6 V2 w1 X1 S8 v( u8 q
{
0 p" Z  u" V$ j4 tif (app_data)% A* S$ e5 ]- A+ |- R' ^1 P
{
3 {1 F1 W4 P' ]/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */; o9 o+ Z: r2 I' N2 O+ u
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
& T. S, d/ V0 |0 [- q& iapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */  j# l. p- l0 t" \  ?" k
app_data->has_feedrate = 0 ; /* Used 1 - Else 0 */
( A2 [" Z! m) ?2 O* z" v4 m( J1 x# kapp_data->has_offset = 0; /* Used 1 - Else 0 */
' J, R+ P4 y% T- g2 z- C* f6 Japp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */+ m$ K. N& c2 w$ c5 d
app_data->stock = 0.033 ;
7 A- q$ A/ V9 Wapp_data->cut_stock[0] = 0.2 ;( T$ K: Z& a6 m1 U; \/ H  U  D
app_data->cut_stock[1] = 0.1 ;
& b% L: Y. i9 O4 N4 H% Xapp_data->cut_stock[2] = 0.5 ;
* Y0 ?" m( A$ ]! _2 aapp_data->tolerances[0] = 0.003 ;
+ U  q1 @! e* p/ C! sapp_data->tolerances[1] = 0.003 ;
) X5 _5 Y/ w* |9 ~/ i7 Dapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
# X, O- `) L; Zapp_data->feedrate_value = 33.0 ;
- H( S  m" b1 \$ c# mapp_data->offset = 0.055 ;! R- g; h$ g0 W& K% T7 W
app_data->avoidance_type = UF_CAM_avoidance_type_warning;' ~7 p4 t8 H+ ~$ I7 H! B9 F& T
}
0 H- h9 e, \' P. E/ |2 `9 q- ]- W}

6 S1 ]2 t) M/ ^: H! H5 }* h
上海点团信息科技有限公司,承接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’错误。% b. g: _% b" C5 j! i( |
有了解可能的原因的吗?
上海点团信息科技有限公司,承接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


6 e2 `" F: A5 o- m9 x$ S. m6 n' A不错不错,正需要的东西
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了