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文件。