DXF文件结构与示意

DXF文件解析

DXF文件中几种主要数据的定义方法,以及数据的保存方式

DXF的几个基本单位

DXF主要由图块、图元、图层这三者组成。

图元

图元 由各种不同的几何类型组成包括但不限于线、多线、弧线、点、圆、椭圆等组成
kabejia中的主要图元
每个图元都有各种属性,如线性、颜色、大小、名称、句柄等。

图块

图块其实可以理解为各种不同图元的固定组合。通过图块,能够重复使用一些设计起来较为复杂但一致的细节。如同样的门、桌子、洗手盆等,使用统一类型的
一个图块可能包含了弧线和线两个图元,其中弧线代表门的打开路径、线代表门的宽度等信息。不同的图元可能由不同的线性组成。由此形成一个独特的图块结构。同时图块也有自己的属性,除了插入点、颜色等等外,还包括了旋转角度、缩放角度等。同一个图块在不同的地方,使用不同的缩放大小代表不一致的规格。如大门与室内的小门可用不同缩放的门进行表示。

图层

图层通过对不同元素进行分别绘制,以达到更好的规划管理数据的功能。通常将室内建筑数据分为、装饰物、墙面、家具、门窗等不同类型的图层。使用图层可快速筛选需要的数据。

各section的作用

DXF 文件本质上由代码及关联值对组成。代码(通常称为 组码)表明其后的值的类型。使用这些组码和值对,可以将 DXF 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成。在 DXF 文件中,每个组码和值都各占一行。

每段都以一个后跟字符串 SECTION 的组码 0 开始,其后是组码 2 和表示该段名称的字符串(例如,HEADER)。每段都由定义其元素的组码和值组成。每段都以一个后跟字符串 ENDSEC 的组码 0 结束。

从小图形中生成 DXF 文件,打印出来并在阅读本文时参考,可能会有助于用户理解本文的内容。

DXF 文件完整的结构如下:

  • HEADER 段。包含图形的基本信息。它由 AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含一个变量名称及其关联的值。
  • CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的 BLOCKS、ENTITIES 和 OBJECTS 段中。类定义在类的层次结构中是固定不变的。
  • TABLES 段。包含以下符号表的定义:

    APPID(应用程序标识表)

    BLOCK_RECORD(块参照表)

    DIMSTYLE(标注样式表)

    LAYER(图层表)

    LTYPE(线型表)

    STYLE(文字样式表)

    UCS(用户坐标系表)

    VIEW(视图表)

    VPORT(视口配置表)

  • BLOCKS 段。包含构成图形中每个块参照的块定义和图形图元。
  • ENTITIES 段。包含图形中的图形对象(图元),其中包括块参照(插入图元)。
  • OBJECTS 段。包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。OBJECTS 段中的条目样例是包含多线样式和组的词典。
  • THUMBNAILIMAGE 段。包含图形的预览图像数据。此段为可选。


TABLE用于保存各种类型数据的属性,相当于dxf中各种数据的元数据,如TABLE中的layer中保存各个图层的名字、ID、图形类型(线性或弧形)等等与图层有关的数据
BLOCKS段主要用来设计图块的各种几何形状、属性、颜色等。
ENTITIES段则是DXF最关键的段落。用于描述具体图层下具体图元的几何、属性等数据。

图层

图层的属性保存在table中的layer中,具体开始的位置在table中的

0
TABLE
2
LAYER ----->(这代表着以下是table中用来描述layer图层)

接下来的

0
layer---------->代表着这是table中的layer中的各图层。
				以下将开始描述各个图层的详细信息包括图层名字、id、符号类型等等

以下这是各种组码对应的含义

以下为layer图层非公共组码对应含义
在这里插入图片描述
不止layer类、其他类也都有一部分在特定类中起作用的唯一的组码。

Entities

适用于所有图形对象的组码

组码

说明

如果省略,

默认为 …

-1

APP:图元名(每次打开图形时都会发生变化)

未省略

0

图元类型

未省略

5

句柄

未省略

102

应用程序定义的组的开始

“{application_name”(可选)

无默认值

应用程序定义的代码

102 组中的代码和值由应用程序定义(可选)

无默认值

102

组的结束“}”(可选)

无默认值

102

“{ACAD_REACTORS”表示 AutoCAD 永久反应器组的开始。仅当将永久反应器附加到此对象时,此组才存在(可选)

无默认值

330

所有者词典的软指针 ID/句柄(可选)

无默认值

102

组的结束“}”(可选)

无默认值

102

“{ACAD_XDICTIONARY”表示扩展词典组的开始。仅当将扩展词典附加到此对象时,此组才存在(可选)

无默认值

360

所有者词典的硬所有者 ID/句柄(可选)

无默认值

102

组的结束“}”(可选)

无默认值

330

所有者 BLOCK_RECORD 对象的软指针 ID/句柄

未省略

100

子类标记 (AcDbEntity)

未省略

67

不存在或零表示图元位于模型空间中。1 表示图元位于图纸空间中(可选)

0

410

APP:布局选项卡名

未省略

8

图层名

未省略

6

线型名(如果不是“随层”,则出现)。特殊名称“随块”表示可变的线型(可选)

BYLAYER

347

材质对象的硬指针 ID/句柄(如果不是“随层”,则出现)

BYLAYER

62

颜色号(如果不是“随层”,则出现);零表示“随块”(可变的)颜色;256 表示“随层”;负值表示层已关闭(可选)

BYLAYER

370

线宽枚举值。作为 16 位整数存储和移动。

未省略

48

线型比例(可选)

1.0

60

对象可见性(可选):0 = 可见;1 = 不可见

0

92

后面的 310 组(二进制数据块记录)中表示的代理图元图形中的字节数(可选)

无默认值

310

代理图元图形数据(多行;每行最多 256 个字符)(可选)

无默认值

420

一个 24 位颜色值,应按照值为 0 到 255 的字节进行处理。最低字节是蓝色值,中间字节是绿色值,第三个字节是红色值。最高字节始终为 0。该组码不能用于自定义图元本身的数据,因为该组码是为 AcDbEntity 类级别颜色数据和 AcDbEntity 类级别透明度数据保留的。

无默认值

430

颜色名。该组码不能用于自定义图元本身的数据,因为该组码是为 AcDbEntity 类级别颜色数据和 AcDbEntity 类级别透明度数据保留的。

无默认值

440

透明度值。该组码不能用于自定义图元本身的数据,因为该组码是为 AcDbEntity 类级别颜色数据和 AcDbEntity 类级别透明度数据保留的。

无默认值

390

打印样式对象的硬指针 ID/句柄

无默认值

284

阴影模式

0 = 投射和接收阴影

1 = 投射阴影

2 = 接收阴影

3 = 忽略阴影

无默认值


NOTES:
1、需要提到的是,在java库中,kabeja中对应的图层ID-LAYERID其实就是图层的名称。
2、使用了java库kabeja提取dxf的数据。通过检验发现是由第三方cad编辑软件生成的格式不符合要求。通过使用autocad软件进行转换生成的dxf格式才能够被该库识别。

Created with Raphaël 2.2.0 开始 读取DXF文件 读取字符串 图元组码 读取字符串 图元结束组码 结束 判断并存储组码 和关联值,并保存属性 yes no yes no
Created with Raphaël 2.2.0 开始 读取DXF文件 读取字符串 图块组码 读取字符串 图块结束组码 结束 筛选出门、窗图块 并存储组码和关联值 保存属性 yes no yes no
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值