CAD数据格式解析
CAD数据格式解析
AutoCAD 是面向工程规划、设计行业的图形编辑软件,侧重于几何图形表达、可视化展示,其数据文件 DWG(或 DXF)中对几何图形的组织方式较为松散,且不具备空间拓扑关系。
从底层自主开发转换工具的难点有两点:一是 DWG或 DXF 数据的解析,DWG 格式不公开,DXF 格式虽然公开,但自主解析难度较大;二是实现顾及符号化的语义级无损转换。
目前解析CAD数据的基本思路:
首先将DWG格式转为DXF格式,然后利用netdxf(C#)实现dxf文件读写。
下面主要对DXF数据格式进行解析(
主要参考官方文档
):
DXF™ 格式是 AutoCAD® 图形文件中包含的所有信息的一种带标记数据的表示方式。带标记数据是指文件中的每个数据元素前面都带有一个称为组码的整数。组码的值表明了随后的数据元素的类型。还指出了数据元素对于给定对象(或记录)类型的含义。实际上,图形文件中所有用户指定的信息都可以用 DXF 格式表示。
一.DXF文件的基本结构
DXF 文件本质上由代码及关联值对组成。代码(通常称为组码)表明其后的值的类型。使用这些组码和值对,可以将 DXF 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成。在 DXF 文件中,每个组码和值都各占一行。
每段都以一个后跟字符串 SECTION 的组码 0 开始,其后是组码 2 和表示该段名称的字符串(例如,HEADER)。每段都由定义其元素的组码和值组成。每段都以一个后跟字符串 ENDSEC 的组码 0 结束。
DXF 文件完整的结构如下:
HEADER 段
。包含图形的基本信息。它由 AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含一个变量名称及其关联的值。
CLASSES 段
。包含应用程序定义的类的信息,这些类的实例出现在数据库BLOCKS、ENTITIES 和 OBJECTS 段中。类定义在类的层次结构中是固定不变的。
TABLES 段
。包含以下符号表的定义:
APPID(应用程序标识表)
BLOCK_RECORD(块参照表)
DIMSTYLE(标注样式表)
LAYER(图层表)
LTYPE(线型表)
STYLE(文字样式表)
UCS(用户坐标系表)
VIEW(视图表)
VPORT(视口配置表)
BLOCKS 段
。包含构成图形中每个块参照的块定义和图形图元。
ENTITIES 段
。包含图形中的图形对象(图元),其中包括块参照(插入图元)。
OBJECTS 段
。包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。OBJECTS 段中的条目样例是包含多线样式和组的词典。
THUMBNAILIMAGE 段
。包含图形的预览图像数据。此段为可选。
1.DXF文件中的组码
组码和关联值定义对象或图元的特定方面。紧接着组码的一行是关联值。该值可以是字符串、整数或浮点值,例如点的 X 坐标。组中第二行后面的行(如果存在)由组定义和与组关联的数据确定。
特殊组码用作文件分隔符,例如用于表示段和表的开始和结束,以及文件本身结束的标记。
图元、对象、类、表和表条目以及文件分隔符通过 0 组码(其后是用于描述该组的名称)引入
DXF 文件字符串的最大长度是 256 个字符。如果 AutoCAD 图形中包含的字符串超出了此数字,则在执行 SAVE、SAVEAS 和 WBLOCK 时将截断那些字符串。如果 DXF 文件包含的字符串超出了此长度,OPEN 和 INSERT 命令将失败。
2.DXF文件中的标题组码
以下是 DXF™ 文件的 HEADER 区域的样例:
3.DXF文件中的类组码
以下是 DXF 文件 CLASSES 段的样例:
4.DXF文件中的符号表组码
以下是 DXF 文件 TABLES 段的样例:
5.DXF文件中的块组码
以下是 DXF 文件 BLOCKS 段的样例:
6.DXF文件中的图元组码
以下是 DXF 文件 ENTITIES 段的样例:
7.DXF文件中的对象组码
以下是 DXF 文件 OBJECTS 段的样例:
二.AutoCAD 数据与 GIS数据的融合问题
(1)坐标系统AutoCAD 中的坐标系统和 GIS 中的坐标系统虽然都是笛卡尔坐标系,但其坐标系的意义不同。AutoCAD 中的坐标系原点是任意的,在工程规划、设计中,可根据需求平移,整个图形也可以同时平移,甚至旋转、缩放,只要保证各图形间的相对关系即可,对坐标的绝对值没有特别要求。但在 GIS 中,特定坐标系的原点是固定的,一般情况下,不允许对地理要素进行平移、旋转、缩放等,强调地理要素坐标绝对值的正确性。在 AutoCAD 数据向 GIS数据转换过程中,就会造成 AutoCAD 数据坐标系与 GIS坐标系不一致的情况,在缺少同名点的情况下,很难实现坐标纠正,影响数据的融合和叠加。
(2)几何类型
AutoCAD 中的几何类型包括点、线段、多义线、弧、圆、注记、块、形等类型,而 GIS 数据的类型一般只有点、线、面、注记(不考虑三维数据类型,如三角扇、面片、不规则格网等),很难通过一一对应的关系实现二者间几何形状的无损转换。一般情况下,可能是多对一的关系,如AutoCAD 中闭合的多义线转为 GIS 中的面,AutoCAD 中的弧转为 GIS 中的线,AutoCAD 中的圆转为 GIS 中的面等。在对几何形体、长度、面积指标等要求较为精确的应用场景中(如精密工业测量、房产数据),通过 GIS 中的线拟合AutoCAD 中的弧,或 GIS 中的多边形拟合 AutoCAD 中的圆,对节点的数量是有严格要求的,若节点数量过多,尽管可以精确拟合,但数据冗余大、占用过多的物理存储空间;若节点数量过少,几何形体、长度、面积指标等会造成损失,影响业务应用。
(3)空间拓扑
AutoCAD 中的几何实体仅作为图面表达而存在,只要满足可视化和出图需求即可,对几何实体的空间拓扑关系没有特殊要求,如封闭几何形体的首尾节点不闭合、悬挂线、悬挂点等现象在 AutoCAD 中经常出现。而 GIS数据对空间拓扑要求较为严格,以上情况在 GIS 数据中可能被判定为不合格数据。因此,在数据融合过程中,若AutoCAD 数据的空间拓扑关系存在严重问题,会造成 AutoCAD 数据无法正确转换成 GIS 数据。
(4)图层分层
AutoCAD 中的图层可以理解为几何实体的容器,不同几何类型的几何对象都可以归到一个图层中,而 GIS 中的图层要求内部的要素必须具有同样的几何类型和属性结构。若 AutoCAD 下生产的数据对图层规则定义与 GIS中的图层不一致,则会给二者之间的转换造成很大困难。
(5)属性信息
AutoCAD 对属性信息管理能力较弱,属性信息在 AutoCAD 中有两种表现形式:扩展属性、文字注记。扩展属性与单个几何对象绑定,结构化特性不强;文字注记直接标注在图面上,与要标注的几何对象没有建立强关联关系。而 GIS 数据的属性信息通过图层的属性表来定义,结构化特性强。两种不同属性信息表达方式,造成从 GIS 数据转为 AutoCAD 数据,属性信息可以无损地转换过去,而
AutoCAD 数据转为 GIS 数据,要逐个抽取几何对象的扩展属性,解析字段名和字段值,甚至要解析注记信息,工作量大且极易造成信息损失。
(6)符号系统
AutoCAD 中的符号系统通过线型文件、块参照等方式表现,甚至直接用线划来表现(如地形图中陡坎要素),可以看出 AutoCAD 中的符号系统较为复杂,且几何形体和符号间的界限模糊,AutoCAD 中的几何形体可能是实际地物的骨架线,也有可能就是符号。而 GIS 中几何形体和符号是分离的,几何形体就是地物的骨架线,几何形体通过 GIS 符号库渲染后,形成可视化的地图。要实现 AutoCAD 数据与 GIS 数据深度融合、真正的无损转换,则需要解决二者之间的符号转换和替换。