Transcript ppt课件
CAD之DXF文件的读写 主讲:王兴波教授 1 DXF文件 • DXF 是Autodesk公司开发的用于AutoCAD与 其它软件之间进行CAD数据交换的CAD数据文件 格式 ,是一种基于矢量数据的 ASCII 文本格式[12]。 AutoCAD是目前使用人数最多、流行面最广泛的 CAD系统,DXF作为它与其他CAD接口的一种图 形标准文件也被广泛使用。绝大多数CAD系统都 能读入或输出DXF文件。对于一般的工程人员,掌 握DXF文件的结构特征比掌握DWG(Autodesk发 布的另外一种图形文件格式)文件简单得多。 DXF的历史和变迁 • 1、段的增加 序号 R12 R14 R2000 1 HEADER HEADER HEADER 2 TABLES CLASSES CLASSES 3 BLOCKS TABLES TABLES 4 ENTITIE S BLOCKS BLOCKS 5 ENTITIE S ENTITIES 6 OBJECTS OBJECTS 7 THUMBNAILIMA GE DXF的历史和变迁 • 2、实体信息记录方法的变化 • (1)R14、R2000增加了椭圆的表示 • (2)R14、R2000增加了单纯表示二维平 面曲线的LWPolyline • (3)样条(Spline)的记录 R2000版DXF文件结构简介 R2000的全部段 HEADER CLASSES TABLES BLOCKS ENTITIES OBJECTS THUMBNAILIMAGE HEADER段 • 标题段(HEADER)标题段记录AutoCAD 系统的所有标题变量的当前值或当前状态。 每个变量由给出变量名称的组码 9 指定, 其后是提供变量值的组。标题变量记录了 AutoCAD系统的当前工作环境,如SNAP捕 捉当前状态、栅格间距式样、当前图层层 名及线型、颜色等。 CLASSES段 • CLASSES段包含的信息适用于应用程序定 义的类,这些类的实例出现在数据库的 BLOCKS、ENTITIES 和 OBJECTS 段。 假定类定义在类的层次结构中是永远固定 的,所有字段都是必需的。 TABLE段 • 表段(TABLES)表段共包含4个表,分别是线型 表(LTYPE)、图层表(LAYER)、字样表 (STYLE)、视图表(VIEW)。表的次序可以 更改,但 LTYPE 表总是位于 LAYER 表之前。每 个表中包含可变数目的表项。每个表都由带有 TABLE 标签的 0 组码引入。其后是一个标识特定 表(APPID、DIMSTYLE、LAYER、LTYPE、 STYLE、UCS、VIEW、VPORT 或 BLOCK_RECORD)的 2 组码、一个 5 组码(句 柄)、一个 100 组码(AcDbSymbolTable 子类 标记)和一个 70 组码(用于指定后面的表条目 的最大数目)。表名称以大写字母输出。 DIMSTYLE 句柄是 105 组码,而不是 5 组码。 ENTITIES段 • 在AutoCAD中画的任何图形都统一称为实 体(ENTITY)。DXF文件的实体段 (ENTITIES)实体段记录了每个实体的信 息,包括名称、所在图层及、线型、颜色、 坐标等。实体段是DXF文件的核心数据段, 记录了所有图形数据。基于早期R13以前的 版本进行开发时,只要提取了实体段的数 据就能获得全部信息。后期版本的开发也 必须获取实体段的数据才能进行后期处理。 BLOCKS段 • 块段(BLOCKS)块段记录了所用块的块 名,当前图层层名、块的种类、块的插入 基点及组成该块的所有成员。块的种类分 为图形块、带有属性的块和无名块三种。 无名块包括用HATCH命令生成的剖面线和 用DIM命令所完成的尺寸标准。BLOCKS 段中的所有图元都出现在 BLOCK 和 ENDBLK 图元之间。BLOCK 和 ENDBLK 图元仅出现在 BLOCKS 段。BLOCK 和 ENDBLK 之间不允许出现另一对 BLOCK 和 ENDBLK 对子。 其他段 • OBJECTS段定义了非图形对象的组码,并 且由图元定义列表中的 AutoLISP 和 ObjectARX应用程序使用。 THUMBNAILIMAGE段只有仅当讲预览图 像与DXF文件一同保存时才会存在。文件 结束段(EOF OF FILE)DXF文件的结束 标志。 • DXF常用图元及其组码含义简介见材料 《机电专业C++实用教材》96页 DXF读写开发的C++开源包简介 • 1、Coin3D项目组于2001年开发的DIME工 具包 • 2、Andrew Mustun及其团队开发的 DXF_LIB工具包 DIME • DIME是一个用于读取、构造、操作、输出DXF文 件的C++类库,可实现 • (1) 将DXF文件读进一个数据结构。 • (2) 从杂乱的数据里建立DIME的数据对象层。 • (3) 从模型里提取几何数据。 • (4) 操作DIME的数据对象层。 • (5) 当执行不同的任务时转换DIME的数据对象层。 • (6) 将DIME的数据信息存为DXF文件。 DXFLIB • dxflib是一个用来读写DXF文件的C++库,完全基 于C/C++标准库实现,不依赖任何其他的库。当 读DXF文件的时候,dxflib分析文件并且调用用户 自己定义的函数来添加实体、层等。借助dxflib, 开发者很容易从DXF文件中分析、识别实体以及 其他的对象。早期的DXFLIB只能实现R12和 DXF2000两个版本的图形输出,以后逐步升级了。 使用dxflib库能够方便地读取DXF文件,也可以根 据DXF文件的结构写出自己的DXF文件。