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

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

  [复制链接]
admin 发表于 2014-6-7 10:50:25 | 显示全部楼层 |阅读模式

admin 楼主

2014-6-7 10:50:25

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

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

x
- c/ ]! x5 {' `  |5 q4 \

: _$ u& o" b" E7 U
& I& g! h2 p! ^6 q2 N6 p, c/ W! ^: x0 n; c9 _! R: m

#include <stdlib.h>) i3 _7 m# }& k0 v
#include <stdio.h>

#include <uf.h>4 H4 ], b3 \! D; h# Q
#include <uf_object_types.h>* F) l# M( y+ v& P. _5 {% `
#include <uf_ui.h>
( W3 J& _) R" v* H$ j4 t#include <uf_disp.h>
, V' q8 d0 A/ W  @" J# I3 x#include <uf_obj.h>
# e; a4 d! o. {, ]8 D; {#include <uf_cam.h>2 n, u' z5 A/ n7 [! n% |7 Z3 \
#include <uf_camgeom.h>

#include <ufd_camgeom_UGroup.h>

#define MAX_CAMGEOM 20; B& h( A8 L5 F7 A& K
#define EXIT_SUCCESS 0

/*#define DEBUG*/

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

static int geoption;; Q% ^: m& V/ |. Y& a5 d! v5 r
static char *title3 = "Select Geometry Type(s) for operation then Selection Complete";//创建几何
: U5 L0 L* i* m3 t3 J: nstatic char menu3[][38] = { "1) Part Geometry",; g- N- T9 j# P. X
"2) Blank Geometry",- K0 |6 [0 C0 f" v  @% }
"3) Drive Geometry",
& J) m% W0 O5 v+ B$ Q" [& D"4) Cut Area Geometry",
! L4 I1 t5 ^+ F3 B0 D0 T"5) Trim Geometry",
+ z( ]9 X( m5 f/ {"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 E7 \2 A5 I- P" c  gUF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM];
4 y7 E' A" l0 v6 l/ W9 G* ftag_t *objects, entity_list[MAX_CAMGEOM];
2 J! ?& z) c5 V+ ~; Rint i, entity_count, object_count, err_code, type, subtype;

char atitle[] = "Geometry Selection.";$ U7 z. n; K$ t5 X
char *cue = "Identify Geometry - Wait for the Filter!";
: z" f$ D" p/ _  K$ f$ _char errorstrg[133];
. o. o( g5 D; oint response, irc;4 x9 d. ]& p. n/ {9 \# l- W
tag_t eid, view;0 p& P3 j9 H. F3 T; }8 ~: U
double cursor[3];

#ifdef DEBUG
: n( g. o1 j6 M5 v* ?$ Rprintf( "Object tag passed into camgeom_ugroup is %d \n", objTag );
. [; g& m0 @! E6 l" b#endif

geoption = 0;

while ( geoption < 10 )//为什么是10呢????
2 P8 I7 k+ x  F- r5 {& }{
( Q4 [) q2 e0 \- H2 `+ P+ Q3 u$ O/* Statements go here for each geometry selection type. 声明起作用 对于选择类型的每个几何体*/

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

if (geoption == 1 || geoption == 2 || geoption == 10 )* l0 D$ P4 `' a  z3 @& E
{
! ?1 @8 [! I6 x$ \9 Qbreak;
& G0 F( o# C6 P* M5 F' m}# \$ g* |' x" B8 U6 l1 l
#ifdef DEBUG; D* M  T+ C. F. Q- Z) W
printf("\n Geometry option returns %d\n", geoption);
7 z) Q/ f* V# m( |8 }  m! P; [#endif
* l* r4 j6 B% P" ]4 o% d' K: X/* Allow the user to select faces or bodies. 选取面和实体*/

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

if (obj_count > 0 )8 S; G9 Y5 a6 L7 I5 U- z1 I5 ]
{/ `4 ~3 Y$ J. X: R4 A9 n
entity_count = 0;

while (TRUE)

{

UF_UI_select_with_single_dialog(cue,atitle,8 l9 l; u- n, ^. d# v6 t
UF_UI_SEL_SCOPE_NO_CHANGE, init_proc, NULL,% N6 h2 |2 K1 d. e9 x4 J9 T
&response, &eid, cursor, &view);//选择单个对象,可输名也可打进去。选择范围在UF_UI中定义
5 ]& K- K9 @- c//cue 提示显示的信息,atitle 对话框头标题,UF选取范围,init初始化程序,NULL初始化程序,cursor光标位置坐标

if (response == UF_UI_OBJECT_SELECTED)
3 F6 h$ a7 p$ m1 x& g{  x5 Y4 k9 J  Q, t: L
entity_list[entity_count] = eid;5 J6 ^  N1 ?8 t" J9 c
#ifdef DEBUG0 T2 R4 B# p* ]; _3 p: Y1 u
printf(" EID number returns %d\n", eid );- Q# N8 C- X4 x7 A: T  R
#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),
* n! D5 z$ j7 I  O8 s2 p, X1 D&err_code);

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

init_camgeom_app_data(app_data_list[entity_count]);

entity_count++;
$ h  t( m' X4 R2 n8 O# ?! m* N}
) s$ B- @0 i) g4 \4 B6 B3 felse if (response == UF_UI_OK || UF_UI_BACK || UF_UI_CANCEL )( g6 R7 Q% n; h/ K  S
{
7 R4 Q% w* C9 b: X/* Geometry selection is finished.几何体选取完成 */, o! ?: i1 F9 x& w3 u5 X" k& ~
break;2 O& C( b& l1 I  h& b0 L
}
( j3 Q- ^& r( _6 I& O}
$ i' X& \2 n( S$ k#ifdef DEBUG4 D6 J& M8 Q  s! L
printf(" Entity count this selection is %d\n",entity_count);
4 Z8 s4 O! ~7 }#endif

if (entity_count > 0): H: o" _4 u6 [9 M# J* p! l* E; k
{) [, y; v& z  V1 \! J6 P2 n+ n
/* UF_CAMGEOM_item_t *items;
* P% W' ~8 k/ ~5 w6 {- Kint item_count;*/

for( i = 0; i < obj_count; i++ )
/ e# z  @0 l8 j4 Z{; z! P; @' D$ P
irc = UF_OBJ_ask_type_and_subtype( objTag, &type, &subtype );//返回对象类型与子类型TAG值

if( type == UF_machining_operation_type ||
& _2 K) k4 f) p4 }; Stype == UF_machining_geometry_grp_type)

#ifdef DEBUG. H# \; r0 V5 v- i: Y; A+ C
printf("\n Current entity count is %d", entity_count);
% U8 G8 u$ K' R" @/ ^printf("\n Current object count is %d", obj_count);
- M% j, X0 j5 s7 ]3 Cprintf("\n Geometry option is %d \n", geoption );* Y5 i9 w) a8 p) p
#endif

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

{
' s! l$ u& k: f% z. X& tswiTCh (geoption)
% ~# V7 c- S2 Y- n# ~/ B2 C/ o{
" k- p! g5 G& p- _5 |! M: `2 K$ Pcase 1:( @5 O4 O7 F7 {, N3 G/ U
case 2:
8 M6 B& k4 \; T8 e' Q/ J- j8 u( @' Zcase 3:1 j* v: Y6 v4 D2 W4 L( g! {9 F
case 4:
/ C# D$ `; h( a, E" m* I# ^4 K$ Zcase 5: /* Part Geometry 部件几何体*/3 W$ }7 Y" Z7 ^
{5 p/ c8 Q/ {/ P  _$ T( ~* o
#ifdef DEBUG
% }/ C% u/ a( L# e. m7 |2 v. rprintf("\n Type returned is %d", type);
. H: W+ ~; }' _7 Vprintf("\n Subtype returned is %d", subtype);
- U! N  l8 a) N2 N4 t4 T) Y( l#endif  n) ^4 G. o, u' d0 G+ M
{3 A1 U5 l' F1 s  P) j
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_part, entity_count,, ^- D) l6 u; R8 V
entity_list, app_data_list );0 I6 P8 X* V$ t5 ~3 R$ F
//附加一个几何实体链表给对象 几何体包括实体等 切削区域仅薄壁实体和面 修剪的几何体不允许。0 ]6 x6 G: L: z
//objtag几何体父级组,UF几何体类型,en_list链表指针,app_data_list链表数据。
  V) i, S4 x0 |; Z. q' Z) w/ X}
, H1 U% E' E* t6 C% Lif ( irc != 0 )% @8 l: y) U' S9 e! y
{* h! K8 @) D3 D+ c* f* \& M
UF_get_fail_message( irc, errorstrg );( W0 k! C% a3 O3 D7 p# n% M
printf("\n The return code is %d\n", irc);
2 p& v  z; w/ M) x* c2 kprintf("\n Error code translates to %s\n", errorstrg);
( W3 g2 {1 @9 S4 `  a* N7 ]( Ureturn objTag;
6 ^' C+ Z/ m, ]$ ^8 t! B}
" b/ L5 u3 e: P7 g, `break;" Z! A9 W. V% n* r
}

case 6: /* Blank Geometry 空白几何体*/
0 W% J3 |. J0 J  g) `{
. Y1 a0 d. u! w1 j' T/ V4 U/ u( ]#ifdef DEBUG
2 |. |; M2 `' C: l% k1 Tprintf("\n Type returned is %d", type);
( \" [( O5 F* A* m( J2 `* Gprintf("\n Subtype returned is %d", subtype);5 n, L2 T( e4 M6 v0 Z- m/ b
#endif1 I3 q( q5 Q' {( A) I8 G
{) i* H, l, K7 m# n7 U. s* S
irc = UF_CAMGEOM_append_items( objTag, UF_CAM_blank, entity_count,
; g% Z+ |# R: ^2 Rentity_list, app_data_list );0 P9 x) C, ?( B1 u
}
3 M( W% X8 a1 H$ t+ K# iif ( irc != 0 )' B# M; q9 E4 Q
{: b# K( n. Q2 E+ B# b
UF_get_fail_message( irc, errorstrg );
" l+ A0 r( d" {$ Z1 f+ e8 Rprintf("\n The return code is %d\n", irc);5 i# ~: a& c! V, U! ~' W
printf("\n Error code translates to %s\n", errorstrg);
. v, ]/ G* \0 l4 t4 v3 F, J+ Qreturn objTag;4 {% O& B) S( L% f  X, x! |5 O
}9 @! m3 D( L* R9 F$ D' D
break;

}

case 7: /* Check Geometry 检查几何体 驱动*/; h( P( k6 U% r1 [1 C& ^
{8 K5 y$ L; I4 b" o
#ifdef DEBUG. Z7 H7 r! L4 {3 w) l/ t  S
printf("\n Type returned is %d", type);
1 ^& D, G/ V7 E( _" l2 Nprintf("\n Subtype returned is %d", subtype);
$ B4 B4 c! v! u* m6 X#endif; A. Z5 a/ b  y8 B: x% |) a% l5 n
{
% ?, u$ ?# R0 J; A! K7 Tirc=UF_CAMGEOM_append_items(objTag,UF_CAM_drive,entity_count,
( `1 P: T0 D/ N( P+ a( r; uentity_list,app_data_list);
2 Y6 n; A# n+ V( C9 p* I4 D}, K5 G% M& ]. V" a7 D; f
if ( irc != 0 )" J2 x' Q/ m* m5 L1 I! {' i
{: C" K! E$ @7 w' z) d8 l6 h
UF_get_fail_message( irc, errorstrg );$ \) j2 m( a: P( k4 u4 W
printf("\n The return code is %d\n", irc);' U7 e8 K8 L; {7 t1 v
printf("\n Error code translates to %s\n", errorstrg);0 l, u( Z9 `5 s; M- A- t4 D* i) A
return objTag;  C. V3 |8 l3 y6 |
}6 b, ?8 I6 `. R; i4 B4 `* i9 o
break;

}

case 8: /* Cut Area Geometry 切削区域几何体*/
4 m  `$ ~0 y) _2 d( f{2 Y$ A7 z  @7 q4 v
#ifdef DEBUG
) A4 U/ Z- O0 z2 E/ ]! jprintf("\n Type returned is %d", type);9 T3 q: S/ H. M" _
printf("\n Subtype returned is %d", subtype);+ r: u. _( f$ f* p( `1 r) z6 `' q
#endif1 A! p) ^8 Q' Q) x5 N# J2 K8 ~
{
4 k( {' _2 R& \irc = UF_CAMGEOM_append_items( objTag, UF_CAM_cut_area, entity_count,
* U  B* |% O& y* yentity_list, app_data_list );
+ O1 t* C- O# F2 r" A}! l. c( q+ V% s; T6 }- b
if ( irc != 0 )) v) N2 J) y  V/ }2 Z
{+ N2 f4 E; `, ~
UF_get_fail_message( irc, errorstrg );' ]; T% c& ]( D" X' W3 r: k
printf("\n The return code is %d\n", irc);( x  X% z: H/ b: s' Y. B
printf("\n Error code translates to %s\n", errorstrg);) u  u' {' B) X1 e+ q" z- S4 i
return objTag;
% ^$ n7 {. z5 B5 C; |}: G8 ~0 O. V% W, X1 ]; ?; Y
break;
1 n. k) ~0 u  I! q1 v* X7 e}! i% n9 Z4 `2 c' {5 c
case 9: /* Trim Geometry 修剪几何体 */6 Z  Y0 x  \4 c1 _8 X
{
5 S1 A" d8 T# u; eprintf("This case not implemented.\n");, ~9 G: B* P- S
break;
" E% A1 U. z# g, T# B}
# H1 E' F6 h! t: ]9 r/*Drive Geometry 驱动几何体*/

default: /* Selection Complete 完成选取 表达式没有相应的则走这条语句*/" k- x$ h$ g( _4 U; O1 g% f
{6 @* W9 f$ ^% ?, O
break;! v) ~4 I0 B% v
}
3 h' l5 J- p; O+ P' N, s* p}
; _5 x2 p( _% c% g- \}
2 }; i$ g3 I" S9 m}& ~  s( s: M( {
}
) `. Z( [1 c9 \' K4 B; [  _}* n- n, k2 R& {' X2 D% U! C
}
4 J( W, s- c% U3 i/* Free the Allocated Memory. 释放内存*/1 k" E/ x/ r! j5 h( @6 {% m
for (i=0; i<entity_count; i++)" `7 b: S/ J* N5 x0 Y
{+ Z1 B  a  @* E- x0 Z
UF_free (app_data_list);
8 U. x4 g  K% l* G% B) C}

/* UF_free (objects);*/

return(0);
* ]/ D& [% J$ N7 a7 b: u, m+ [}+ O4 y3 Z( l3 l4 p& p
/* Selection initialization procedure 选择初始化程序*/
6 P  M# S1 s9 p. }  d0 r( R6 ]. Kstatic int init_proc& ~: j8 U* L: p3 b
(4 w- {; B4 [# r( q( G3 I
UF_UI_selection_p_t select,//指针 pointer, v+ D7 C2 ^9 h0 h6 [
void* user_data) P$ ^7 y6 e: R; n0 w- `& [
)
& c5 [0 W" y5 Z9 |& E{
. {% d0 u; @* I: nint num_triples = 3;; q1 l% w( m* t2 e+ X! j2 K0 }
//最终指定的特征类型. t8 U- e  {# |' M2 m' y) k* _+ |3 b
UF_UI_mask_t mask_triples[] = {3 q% v6 L! E/ w/ L
UF_line_type, 0, 0,9 X' g  @8 w7 @( X* ?
UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE,
& k1 Z$ x5 c7 uUF_solid_type, 0, UF_UI_SEL_FEATURE_BODY};

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

if((UF_UI_set_sel_mask(select,* D, [5 g! W5 ~$ \
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
; z/ M& Z; n, x* F$ m, qnum_triples, mask_triples)) == 0)//3倍 3*3=9

{/ G2 y) _9 P8 _1 Z  S. V& V6 `
return (UF_UI_SEL_SUCCESS);# [+ [3 Y0 A6 c% l3 A0 \/ ?
}. z$ m4 S  I. H  G( p$ b3 [$ Q
else
5 V( f( a' O6 ?9 h7 S/ T) n1 [{0 p% {( K9 \" k; A/ \4 H
return (UF_UI_SEL_FAILURE);
3 h* @4 I: u- l7 Z}5 I6 ?; ]2 v6 P3 W4 X8 z
}* x6 ~8 }7 \3 E9 `
static void init_camgeom_app_data5 d! k! ~+ b  ^4 W( P
(/ p/ b, B* _$ ?. C$ O! v4 S/ K
UF_CAMGEOM_app_data_p_t app_data
: O/ S; w, m: g3 g6 [' s)
# A% y, R3 p% w0 |7 S{
" d1 i2 z9 l8 |) G+ P& D; }if (app_data)5 k5 s' K5 X. {
{
$ S: l* M. a+ B/* Set flags. 设置标识*/

app_data->has_stock = 0; /* Used 1 - Else 0 */2 g7 B! A8 ]: H% k, p1 [
app_data->has_cut_stock = 0; /* Used 1 - Else 0 */
0 a4 a" s" e% F% U7 O5 f. w/ eapp_data->has_tolerances = 0 ; /* Used 1 - Else 0 */
8 s- T- x. ?% L$ W0 ~' Dapp_data->has_feedrate = 0 ; /* Used 1 - Else 0 */$ v1 y9 R3 u3 ~1 E5 q
app_data->has_offset = 0; /* Used 1 - Else 0 */
8 R, e( j' O  w4 Eapp_data->has_avoidance_type = 0 ; /* Used 1 - Else 0 */

/* Set values.设置参数值 */
  G2 K3 Z  j  K' n, \5 n) [app_data->stock = 0.033 ;- R" X4 K8 m6 d1 I5 B, L' n
app_data->cut_stock[0] = 0.2 ;
7 J  o! J6 v, v2 U7 yapp_data->cut_stock[1] = 0.1 ;
' _) v( ?$ c/ C$ z% F% fapp_data->cut_stock[2] = 0.5 ;
$ D: v7 W7 g: i! Z2 \# ]) |# napp_data->tolerances[0] = 0.003 ;
% f5 Y) j3 D9 t, k& f( W+ Zapp_data->tolerances[1] = 0.003 ;
5 m* a7 H- K$ N; O# [) yapp_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute ;
; U5 w4 L) ^# {6 b' m: t- napp_data->feedrate_value = 33.0 ;
( n# q0 I: E( E) }4 f/ l2 C* {  Kapp_data->offset = 0.055 ;5 P: ?% K7 \0 g2 M' I
app_data->avoidance_type = UF_CAM_avoidance_type_warning;9 D9 z" ?1 Q1 J4 G4 H8 q4 I
}; S" M' f, {3 A) f* q) o
}

( L# H" C1 u/ g6 e
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

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’错误。
  A, ~; h+ s) G3 @4 d! D0 n有了解可能的原因的吗?
上海点团信息科技有限公司,承接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

( M5 _- `, o" @0 t
不错不错,正需要的东西
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 发邮件注册

返回列表 本版积分规则

用户组 : 管理员
邮   箱 :xduniverse@qq.com
手   机 :VIP用户可查看[申请]
Q   Q : 点击这里给我发消息
性别 : 就不告诉你
主页 :http://www.plmhome.com
个人介绍 :原西门子NX高级教务员,10多年NX培训,开发咨询,Teamcenter培训实施等

主题2127

帖子3335

积分62978

  • Tecnomatix 二次开发

    Tecnomatix 二次开发入门教程 6 实现打开PLM之家

  • Tecnomatix 二次开发

    Tecnomatix 二次开发入门教程 3 第一个hello plm

  • NX二次开发--一个好用

    NX二次开发--一个好用的树列表调换次序功能-很赞

  • NX12.0.1 mp02 焊接新

    NX12.0.1 mp02 焊接新增强功能 简易焊接 Easy Sp

  • 使用Block Styler 创

    使用Block Styler 创建对话框 和 MFC 的创建对话

  • 发布新帖
  • 在线客服1
  • 在线客服2
  • 微信
  • 客户端
  • 返回顶部
  • NX讨论
    Catia
    TC讨论
    Tecno
    云课堂
    业务合作
    快速回复 返回顶部 返回列表