CAD/CAPP集成的方法实践
作者: 来源于:计算机世界报
2004-4-7 10:58:39
    CAD/CAPP/CAM集成的基础是建立统一的产品定义模型。几年来的实践表明,基于特征的建模技术正成为实施CAD/CAPP/CAM一体化最有效的建模方法之一。传统的CAD系统一般只能提供产品的几何模型,因此,如何将几何模型转换为特征模型已成为CAD/CAPP/CAM集成的关键。实现这种模型有两种方法——交互式特征定义和特征识别。前者采用的是人机交互式,获得的特征模型可信度较高,但输入费时,实用效率低。后者的自动化程度较高,实现较为困难。本文通过解析DXF图形文件格式实现CAD/CAPP集成。

    一、DXF文件格式分析

    DXF文件由标题段、表段、块段、实体段和文件结束段5部分组成,其内容如下。

    ☆标题段(HEADER)标题段记录AutoCAD系统的所有标题变量的当前值或当前状态。标题变量记录了AutoCAD系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层层名及线型、颜色等。

    ☆表段(TABLES)表段共包含4个表,每个表又包含可变数目的表项。这些表在文件中出现的顺序是线型表(LTYPE)、图层表(LAYER)、字样表(STYLE)、视图表(VIEW)。

    ☆块段(BLOCK)块段记录了所用块的块名,当前图层层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH命令生成的剖面线和用DIM命令所完成的尺寸标准。

    ☆实体段(ENTITIES)实体段记录了每个实体的名称、所在图层及其名字、线型、颜色等。

    ☆文件结束段(EOF OF FILE)DXF文件的结束标志。

    一个DXF文件由若干个组构成,每个组占两行,第一行为组的代码,第二行为组值。组代码相当于数据类型的代码,它由CAD图形系统所规定,而组值为具体的数值,二者结合起来表示一个数据的含义和值。例如,代码10代表一个点的X坐标,占一行,而其第二行4.5425则是点X坐标的具体数值,二者结合表示一点,其X坐标值为4.5425。

    (1)组代码和组值的类型组代码为一个非负的不超过三位的整数,而组值由组代码的类型决定。例如:

    代码0~9组值类型为字符型。

    代码10~59组值类型为实型。

    代码60~79组值类型为整型。

    代码999表示解释行。

    (2)组代码的含义每个组代码均有规定的含义,有些代码含义是固定的,而有些组代码则因应用场合不同而有多个含义,应具体分析。另外,一些代码是备用的,目前版本尚未用到,现将他们的含义举例介绍如下。

    0:表示一个事物的开始,如一个块、表、图层、实体等。

    1:字符型数据的值,如TEXT的字符串、文件名、属性值等。

    2:一个事物的名字,如段、表、块、线型、视图等的名字。

    3~5:字符型数据的值,如文件名、线型说明等。

    6:线型名(固定类型)。

    8:图层名(固定类型)。

    关于实体的坐标与相应的组代码10~18、20~28、30~38的用法应根据实体所用到点的数量,按组代码个位的0、1、2、……的顺序使用。例如LINE的起点组代码为10、20、30,而11、21、31为其终点。其他类似。

    DXF文件的结构相当复杂,完整读取DXF文件也是一项异常繁琐的工程。在实际应用中,为了提取图形的实体信息,可以省略DXF文件中的许多项,只要获取其中的层表、块段和实体段,就可以完成相应几何图形的描述。在层表中说明每一层的颜色、线型,在块段中说明块所在的层、属性及其在图形中的位置,在实体段中说明直线的起点、终点及圆的圆心、半径等几何信息和各实体所在的层。根据实体所在的层,在层表中搜索每一层的颜色、线型并将其添加到实体对象中。在利用CAD进行绘图时,需将变量参数DIMASO设为ON,以保证块段中定义的尺寸块为一个整体,并可被正确无误地获取。根据尺寸类型名、尺寸定义的起点、终点坐标与实体类型名、实体空间坐标是否匹配,对实体对象进行尺寸附加。在绘图时,如对自定义的粗糙度、形位公差等块不进行“EXPLODE”炸开操作,也可通过增加相应读取函数提取其属性。

    下面举例说明实体段在DXF文件中的格式。

    圆弧(ARC)

    0(开始)ARC(圆弧)

    8(层的组码)

    W1(层名为“W1”)

    10(圆弧圆心的X坐标组码)

    7.0(圆弧圆心的X坐标组值)

    20(圆弧圆心的Y坐标组码)

    9.0(圆弧圆心的Y坐标组值)

    30(圆弧圆心的Z坐标组码)

    0.0(圆弧圆心的Z坐标组值)

    40(圆弧的半径组码)

    25.0(圆弧的半径值)

    50(圆弧的起始角度组码)

    90.0(圆弧的起始角度值)

    51(圆弧的终止角度组码)

    180.0(圆弧的终止角度组值)

    若实体的线型用BYLAYER,颜色为256(即BYLAYER),基面高度和厚度为零,其格式可简化。

    对于其他图形实体的格式描述(LINE、CIRCLE、TEXT等),这里就不再一一详述了。

    二、几何图形实体信息的提取

    生成DXF文件必须首先进入图形编辑环境,在命令(Command)提示下键入DXFOUT,回答所需的一个文件名后,即把内部压缩格式的图形数据转换为ASCⅡ的数据并写入相应DXF文件(以DXF为扩展名)中,供应用程序提取并处理实体数据。

    三、几何图形描述的数据结构

    通过对CAD系统的DXF图形交换文件进行分析,可以得到描述零件的全部几何图形元素。为简化问题,设定组成零件内外轮廓的图形元素只包括点、直线和圆弧,并分别用下列数据结构表示。

    点:class POINT { float x;float y;float z;}虚基类:class SHAPE{ //由虚基类派生出直线、圆弧,便于链表操作public:

    virtual void showEntity()=0;//表示此函数在派生类中必须定义……//在此定义其他虚函数} 直线:class LINE:public SHAPE,public POINT{ public://直线类由两个基类SHAPE和POINT派生而来POINT start_point;//直线起点POINT end_point;//直线终点……//在此定义其他内部变量和函数}圆弧:class ARC:public SHAPE,public POINT{ public://圆弧类由两个基类SHAPE和POINT派生而来POINT center_point;//圆弧圆心POINT start_point;//圆弧起点POINT end_point;//圆弧终点float radius;//圆弧半径……//在此定义其他内部变量和函数}结点:struct Node //定义结点,便于链表内部删除,增加和修改{SHAPE *Item;//内容域Node *llink;//左指针Node *rlink;//右指针} 链表:class LIST { //链表类private:

    Node *head;//结点头指针public:

    LIST();//构造函数,进行变量初始化void~LIST();//析构函数,释放内存void addEntity(SHAPE *);//定义增加图形元素的函数……//在此定义其他函数}由此,回转体零件的几何图形元素不难用上述数据结构以线性链表进行存储。完整的特征识别系统不仅仅包含几何信息,还要包括加工工艺信息,而常用的几何造型CAD系统并不提供后者。为此,我们在AutoCAD系统中定义了一套工艺信息块,其全部以图形文件块的形式存储,这些信息包括:形状公差(直线度、平面度、圆度、圆柱度、线轮廓度和面轮廓度)、位置公差(平行度、垂直度、倾斜度、同轴度、对称度、位置度、圆跳动和全跳动)、表面粗糙度和基准等。

    四、小结

    本文首先介绍了DXF文件的结构,分析组值和组代码的含义,然后说明读取DXF文件的方法,最后简单介绍了实现此功能模块的数据结构。该方法在回转类零件CAD/CAPP集成系统中的使用取得了较好的效果。


 
  山东装备制造业信息网 版权所有