UG二次开发中特征识别和设定
南京欧奔软件技术有限公司
[摘 要] 对UGII中特征进行了分类,将用于描述几何形状信息的形状特征作为最重要的特征和其它特征信息的载体,介绍了基于UGII的专用CAD系统开发过程中形状特征信息的识别和其它非形状特征信息的添加方法。
[关 键 词] UGII;特征识别;特征设定
中图分类号:TP399 文献标识码:A
UGII作为机械领域基于特征的高档三维CAD软件,因其所具备的工程实用能力和良好的售后服务、技术支持,在国内正拥有越来越多的用户。在为企业提供服务的过程中发现,企业在使用该软件一段时间后,都会提出二次开发的要求,希望通过建立基于UGII的专用CAD系统,进一步提高设计效率。为了建立专用CAD系统,首先必须实现对用UGII所设计零件的相关信息的提取和存贮,所以本文在对UGII中特征进行分析的基础上,结合自身的开发经验,介绍了对UGII零件中形状特征的识别和非形状特征的设定方法。
1 UGII中的形状特征
形状特征通常是指某一领域,具有特定意义的可表达的实体或抽象体。UGII作为基于特征的三维CAD软件,能够提供产品定义的高层描述,使产品设计在更高层次上进行,设计人员的操作对象是产品的功能要素即形状特征(如孔、键槽等),设计完成后的零件数据库中不仅包含几何与拓扑信息,还可以包含产品总体信息、结构信息和尺寸公差信息等,UGII中的形状特征如图1所示。

图1 UGII中形状特征
二次开发过程中,形状特征描述了一定工程意义,是产品信息模型中最主要的特征,可以作为其它特征信息(如:精度特征、材料特征、技术特征、管理特征等)的载体。下面着重介绍对UGII所设计零件中形状特征的识别方法和其它特征信息的添加方法。
2 形状特征的识别
在UGII中,零件模型中的特征是有序的,它们一一对应于涉及零件形体改变的每一步特征操作,系统根据操作的先后给出特征间的父子关系,并对零件中的所有特征给以唯一编号,此编号被称为特征码(FID)。在特征内,它的每一个显示构成面都有唯一的标识自身的编码(SID);每一条边也有一个唯一的编码(EID),因而用一个二元组(FID,SID)或三元组(FID,SID,EID)就唯一确定零件中的每一个面和边。零件的几何模型是通过边和面显示的,这样对几何模型中的任一对象都可以用这种方法加以描述。如图2所示模型:在长方体上建立了一个简单孔,并对孔进行倒角,图2a示意各构成面的SID,其中箭头所指边Edge (ID:171)的依存关系可以描述为图2b。

a 构成面的SID号 b Edge(ID:171)的依存关系
图2 模型中面的ID号和对象Edge(ID:171)依存关系示意
基于以上分析,作如下假定:零件的几何模型是由形状特征来定义和构造的,几何模型中所有的对象都属于一个或几个特征。因而,特征识别可叙述为:人机交互或利用规则选择操作对象→确定该对象所属形状特征→读取与该形状特征相关的其它特征信息和父子形状特征→存入数据库→供应用系统使用。
二次开发过程中常用如下的函数进行形状特征识别:
int UF_MODL_ask_edge_feats (tag_t edge_obj_id, uf_list_p_t * feature_list );
//通过输入边的ID号,读出指向与该边相关的特征列表的指针;
int UF_MODL_ask_face_feats (tag_t face_obj_id, uf_list_p_t * feature_list );
//通过输入面的ID号,读出指向该面所属的特征列表的指针,
int UF_MODL_ask_face_edges (tag_t face, uf_list_p_t * edge_list );
//通过输入面的ID号,读出指向与该面相关的边的列表的指针;
int UF_MODL_ask_edge_faces (tag_t edge, uf_list_p_t * face_list );
//通过输入边的ID号,读出指向与该边相关的面的列表的指针;
二次开发中,对于需要人机交互所选择的对象ID号可通过如下函数建立对话框进行获取:
int UF_UI_select_with_class_dialog (
char * message, //给定提示行信息;
char * title, //给定对话框的标题;
int scope, //给定选择的范围;
UF_UI_sel_init_fn_t sel_init_proc, //对该选择操作的初始化;
void * user_data, //给定初始化时所需要的初值;
int * response, //返回对该对话框的响应方式;
int * count, //返回所选择的对象的个数;
tag_p_t * object );//返回指向所选择的对象的ID列表的指针;使用后要用UF_free()释放;
由于在二次开发中需要用到大量的指针,开发人员应特别注意及时释放内存空间,否则在使用时将随着操作步骤的增加,导致系统不稳定。
3 非形状特征信息的设定
精度特征、技术特征等常是针对零件的具体面而言的,所以应将其加入到形状特征的面上;而材料特征、管理特征是针对该零件的整体而言的,应将其加入到零件中。这些非形状特征信息可通过赋属性的方法保存到零件中。在给定属性时,如果传递的TAG是对象的则给对象属性,如果是部件的TAG,则给该部件赋属性。
UGII中对部件或对象属性的操作函数都在uf_attr.h中。
int? UF_ATTR_ask_part_attribute (tag_t * attribute );
// 获得指向当前工作部件部件属性的指针;
int UF_ATTR_ask_part_attrs ( const tag_t part_tag, int * n_attributes,?UF_ATTR_part_attr_p_t * attributes );
//读入某已装入部件的所有部件属性;
UF_ATTR_assign (tag_t object, char * title, UF_ATTR_value_t value );
//给定对象的属性;
int UF_ATTR_find_attribute (tag_t object, int type, char * title, int * title_type );
//查找给定的属性;
int UF_ATTR_read_value (tag_t object, char * title, int type, UF_ATTR_value_p_t value );
//查找给定属性的值;
按以上方法将非形状特征信息根据需要作为属性附加到部件或形状特征的面和边上能够满足实际开发时的需要,便于建立非形状特征与具体对象间关系,解决了具体特征信息的保存,从而实现二次开发过程中的对所需特征信息的调用。
4 结 论
根据对UGII中特征的分类,将形状特征作为所有特征中最重要的特征,其它特征信息作为属性的方式添加到零件或零件模型的面和边中,符合正常的开发习惯,便于对UGII中特征的描述和对零件相关特征信息的提取和运用,以及以后知识库中知识的录入及推理的建立,因而是一种切实可行的方法。
|