完整6 UG二次开发实用教程第六章.docx
《完整6 UG二次开发实用教程第六章.docx》由会员分享,可在线阅读,更多相关《完整6 UG二次开发实用教程第六章.docx(92页珍藏版)》请在冰豆网上搜索。
完整6UG二次开发实用教程第六章
第六章零件设计
UG的特征建模功能非常强大,UG中几乎所有的几何特征都可以利用UG/OPENAP进行创建。
UG/OPENAP提供诸如UF_MODL_create_XXX_XXX函数用于创建几何特征,提供诸如UF_MODL_ask_XXX_X的函数用于查询特征的属性。
但是通常情况下,修改几何特征往往要通过几何特征的参数来实现。
6.1基本概念
1、明确特征的几何描述
利用函数UF_MODL_create_XXX_XXX建几何特征,首先要明确几何特征的几何描述。
以最简单的圆锥为例,可以通过函数UF_MODL_create_cone1(创建一个圆锥,但是如果你
对圆锥特征的几何描述不清楚,你就不能明白函数UF_MODL_create_cone1(中参数的含义。
如果你在使用函数UF_MODL_create_cone1(创建圆锥特征之前,知道在三维空间中描述一个圆锥,需要知道圆锥的原点、高度、底部和顶部的直径、方向。
此时你使用函数UF_MODL_create_cone1(时,
intUF_MODL_create_cone1(UF_FEATURE_SIGNsigndoubleorigin[3]char*height
char*diam[2]
doubledirection[3]tag_t*cone_obj_id)
也就是说,在创建任何特征之前,要明确特征的几何描述。
2、分清函数参数的类型
在二次开发过程中,必须分清UF函数是针对特征(Feature)操作、还是对象(Object)操作,还是实体(Body)操作。
特征是将用户对UG实体的所有操作过程都以特征的方式记录下来,一个实体往往可以拥有多个特征,如一个block经过倒角(blend),钻孔(hole)后,那么在这个实体上就存在了三个特征,并且按照时间先后顺序排列。
对象是指uf_object_types.h中说明的对象,包括:
体(),表面,边缘,直线(line),圆(circle)、二次曲线(conic)和样条曲线(spline)等几何对象,还有基准轴(datumaxis),基准面(datumplane)、草图(sketch)、表达式、颜色、线型、组等非几何对象。
Body是指UG实体。
利用UF函数可以从Body中得到所有在其上操作过的Feature。
特征、对象和实体之间可以相互访问,可以从Feature中得到相应的Body
UF_MODL_ask_feat_body
UF_MODL_ask_feat_faces
UFMODLaskfeatedges
UF_MODL_ask_body_feats
UFMODLaskedgefeats
UF_MODL_ask_face_feats
UF_MODL_ask_body_faces
UF_MODL_ask_body_edges
UF_MODL_ask_face_body
UFMODLaskfaceedges
UF_MODL_ask_edge_body
UFMODLaskedgefaces
用UF_MODL_ask_feat_body可以获得与特征相连的体标识,相应的如果已知某个体标识,也可以利用函数UF_MODL_ask_body_feats获得与之相连的所有特征标识。
3、建模思路
UG基于特征的建模过程是仿真零件的加工过程。
采用UG/OPENAP建立零件模型时,可先在NX交互界面下生成实体模型,再根据其操作过程运用相应的API函数。
UF_MODL_create_cyl1()
UF_MODL_create_simple_hole()
UF_MODL_create_edge_blend()
6.1创建体素特征
基本体素是基本的解析外形,包括:
长方体、圆柱体、圆锥体和球。
UF函数允许用户
创建和查询所有的基本体素特征,创建和查询基本体素的函数声明主要包含在头文件uf_modl.h中。
特征名
函数名
块
UF_MODL_create_block1
UF_MODL_create_block
UF_MODL_ask_block_parms
圆柱
UF_MODL_create_cyl1
UF_MODL_create_cyl
UF_MODL_ask_cylinder_parms
圆锥
UF_MODL_create_cone1
UF_MODL_create_cone
UF_MODL_ask_cone_parms
球
UF_MODL_create_sphere1
UF_MODL_create_sphere
UFMODLasksphereparms
表6-1与体素特征相关的函数
下面以如何创建长方体为例,讲解创建体素特征,我们可以利用UF_MODL_create_block1()创建一个长方体,该函数包括三个输入参数和输出参数。
intUF_MODL_create_block1
(
UF_FEATURE_SIGNsign//
输入参数,布尔操作标记
doublecorner_pt[3]char*edge_len[3]
tag_t*blk_obj_id
//输入参数,长方体的原点
//输入参数,长方体的长宽高
//输出参数,长方体的特征标识
)
其中,sign表示布尔操作的标记,表示新建的长方体与已存目标体的布尔操作方式,包括:
UF_NULLSIGN=不进行布尔操作
UF_POSITIVE=与已存目标体加操作
UF_NEGATIVE=与已存目标体减操作UF_UNSIGNED=与已存目标体相交操作
corner_pt表示长方体的原点,为底面斜角点,如下图所示,圆柱和圆锥的原点为底面中点,球的原点为球心位置。
edge_len是一个字符串数组,表示长方体的长宽高,可以直接赋值,也可以使用表达式赋值,比如:
char*block_len[3]={“1","2","3"};
char*block_len[3]={“bl_length=1","bl_width=2","bl_Height=3"};
如果直接赋值,将由系统自动生成“pn”格式的表达式,如果采用表达式赋值,此时在表达式中将会出现相应的表达式,建议米用表达式方式赋值。
blk_obj_id是输出参数,通过tag_t指针输出新建长方体的特征标识,如果需要可以
通过函数UF_MODL_ask_feat_bod礙得对应特征的实体对象标识。
创建长方体特征的函数除UF_MODL_create_block1()夕卜,还有UF_MODL_create_block()。
事实上,UF_MODL_create_block()比UF_MODL_create_block1()多了一个参数tag_t类型的输入参数targ_tag,该参数表示当进行布尔操作时,可以通过该参数指定目标体,如果不进行布尔操作可将参数设置为NULL_TAG
例6-1通过一个选择菜单,让用户选择创建不同的基本体素特征例6-1创建基本体素
#include
#include
#include
#include
#include
#includeexternvoidufusr(char*param,int*retcod,intparam_len){
/*对话框设置*/
char*cp1="请选择";
intip2=0;
charcp3[4][38]={"创建一个块(Block)",
"创建一个圆柱(Cylinder)",
"创建一个圆锥(Cone)",
"创建一个球体(Sphere)"};
intip4=4;
intvalue;
tag_tview_tag=NULL_TAG;
UF_FEATURE_SIGNsign=UF_NULLSIGN;
/*Block的变量声明区*/
doubleblk_corner[3]={0.0,0.0,0.0};
char*blk_edge_len[3]={"10.0","20.0","30.0"};tag_tblk_obj_id;
/*Cylinder的变量声明区*/doublecyl_origin[3]={0.0,0.0,0.0};char*cyl_height="20.0";
char*cyl_diam="10.0";
doublecyl_direction[3]={0.0,0.0,1.0};
tag_tcyl_obj_id;
/*Cone的变量声明区*/
doublecone_origin[3]={0.0,0.0,0.0};
char*cone_height="20.0";
char*cone_diam[2]={"30.0","20.0"};doublecone_direction[3]={0.0,0.0,1.0};tag_tcone_obj_id;
/*Sphere的变量声明区*/
doublesphere_center[3]={0.0,0.0,0.0};char*sphere_diam="30.0";
tag_tsphere_obj_id;
if(!
UF_initialize())
{
/*显示菜单*/
value=uc1603(cp1,ip2,cp3,ip4);switch(value)
{
case5:
/*创建Block(块)*/
UF_MODL_create_block1(sign,blk_corner,blk_edge_len,&blk_obj_id);
break;
case6:
/*创建Cylinder(圆柱)*/
UF_MODL_create_cyl1(
sign,cyl_origin,cyl_height,cyl_diam,cyl_direction,
&cyl_obj_id);
break;
case7:
/*创建Cone(圆锥)*/
UF_MODL_create_cone1(sign,cone_origin,cone_height,cone_diam,cone_direction,&cone_obj_id);
break;
case8:
/*创建Sphere(球体)*/
UF_M0DL_create_sphere1(sign,sphere_center,sphere_diam,&sphere_obj」d);
break;
default:
uc1601("发生了错误!
",0);
}
/*调整视图到合适的大小*/
UF_VIEW_ask_work_view(&view_tag);
UF_VIEW_fit_view(view_tag,0.7);
/*保存文件*/
UF_PART_save();
UF_terminate();
}
}
在编译连接后,新建或打开一个部件文件。
通过FilefExecute