Понимание формата файла 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 координаты, но теперь я могу сопоставить их вместе.


person neerdy30    schedule 29.05.2018    source источник
comment
Вам действительно нужны пустые строки между каждой строкой или двумя? Это затрудняет чтение данных.   -  person Bryan Oakley    schedule 01.06.2018


Ответы (1)


То, что вы пытаетесь сделать, на самом деле не соответствует тому, как работает большинство 2D-чертежей.

Представьте себе чистый лист бумаги. Вы берете карандаш и рисуете квадрат. Вы решаете, что это будет комната. Итак, где-то рядом с квадратом, который вы нарисовали, вы пишете какой-то текст; Например, «Комната 1». Между текстом «Комната 1» и нарисованным вами квадратом нет внутренней связи или «связи». Это совершенно не связанные сущности. Связь существует только в уме рисовальщика, или, если текст и квадрат расположены близко друг к другу, кто-то другой, рассматривающий рисунок, может сделать вывод о связи.

Именно так работает подавляющее большинство 2D-чертежей (файлы .dxf). Если вы не настроите специальные объекты с атрибутами, между любым фрагментом текста и любым другим объектом чертежа в файле .dxf не будет никакой связи.

Если у вас есть чертежи, на которых метка комнаты всегда размещается «внутри» комнаты, вы можете выполнить некоторые математические действия, чтобы определить, находится ли конкретный фрагмент текста в определенном наборе линий/полилиний.

person Stewbob    schedule 01.06.2018
comment
Спасибо за ваш ответ. Теперь я понял это намного лучше. Спасибо. - person neerdy30; 02.06.2018