了解 DXF 文件格式.标签和几何之间的关系



我对CAD系统很陌生,并试图从dxf文件中提取我的项目的信息。我有平面图的 dxf 文件。我的目标是提取房间的几何形状和与之相关的标签。

虽然我能够分别提取房间几何形状和房间标签,但我发现很难映射两者。我是否错过了几何和标签之间有链接的标签?

房间标签:

0
INSERT
5
53CF
330
2
100
AcDbEntity
8
__X_Polyline_Data
100
AcDbBlockReference
66
1
2
ROOM_DATA
10
11.15367175915704
20
10.40315868785525
30
0.0
1001
AEC_XDATA_BOUND_SPACE
1070
100
1070
1
0
ATTRIB
5
53D1
330
53CF
100
AcDbEntity
8
__X_Polyline_Data
6
Continuous
100
AcDbText
10
11.12027175915704
20
10.44215868785524
30
0.0
40
0.25
1
AE.22
100
AcDbAttribute
280
0
2
PART_AOID
70
0
280
1

房间文字 :

0
TEXT
5
62C
330
2
100
AcDbEntity
8
X_Raumnummer
370
0
100
AcDbText
10
11.15367175915704
20
10.40315868785525
30
0.0
40
0.8
1
AE.22

房间坐标 :

0
LWPOLYLINE
5
239B
330
2
100
AcDbEntity
8
A_DEC_Durchbrüche
370
0
100
AcDbPolyline
90
4
70
1
43
0.0
10
10.95
20
12.215
10
14.6
20
12.215
10
14.6
20
12.48499999999999
10
10.95
20
12.48499999999999

我为提取数据而编写的代码:

lines = [entity for entity in dwg.entities if entity.dxftype == 'LWPOLYLINE']
room_lines = [entity for entity in lines if entity.layer == '__X_Polyline']
lines_data = [entity for entity in dwg.entities if entity.dxftype == 'TEXT']
room_text = [entity for entity in lines_data if entity.layer == 'X_Raumnummer']  

我使用 dxfgrabber 库来提取信息。

如果我的问题很愚蠢,我很抱歉,我找不到链接,而且我对这个领域相当陌生。我能够提取 AE.22 和它的 4 个坐标,但现在能够将它们映射在一起。

您尝试执行的操作并不是大多数 2D 绘图的工作原理。

想象一下一张白纸。 你拿起铅笔,画一个正方形。 你决定这将是一个房间。 所以在你画的正方形附近的某个地方,你写了一些文字;例如"1号房间"。 文本"房间 1"与您绘制的正方形之间没有内在关系或"链接"。 这些是完全断开连接的实体。 这种关系只存在于绘图者的脑海中,或者如果文本和正方形靠得很近,则可能由查看绘图的其他人推断出这种关系。

这正是绝大多数 2D 绘图(.dxf文件(的工作方式。 除非设置具有属性的特殊对象,否则任何一段文本与.dxf文件中的任何其他图形图元之间都没有关系。

如果您碰巧有图纸,其中房间标签始终放置在房间的"内部",那么您可以做一些数学运算来确定特定文本是否位于一组特定的线/折线内。

最新更新