Доступ к содержимому INSERT/Block в DXF с помощью ezdxf

Я пытаюсь нарисовать содержимое файла DXF в изображение, используя python 2.7 и модуль ezdxf.

У меня получается читать и рисовать LINE, POLYLINE, CIRCLE, но я не знаю, что делать с элементом INSERT. Я предполагаю, что этот элемент INSERT (или связанный с ним блок) содержит другие элементы, LINE, POLYLINE и так далее... Верно?

Вот как я получаю доступ к основным элементам DXF:

dwg = ezdxf.readfile(filename)
modelspace = dwg.modelspace()
for e in modelspace:
   analyseElement(e)

def analyseElement(e):
   if e.dxftype() == 'LINE':
       print("DXF LINE FOUND:")
       p1=e.dxf.start
       p2=e.dxf.end
      [...]

Могу ли я надеяться изучить и извлечь основные элементы из содержимого INSERT? Спасибо вам всем !


person technico    schedule 16.08.2017    source источник


Ответы (1)


БЛОК представляет собой многократно используемую коллекцию объектов и может использоваться как пространство модели для поиска или добавления объектов DXF.

Объект INSERT — это ссылка на блок, которая определяет место, размер и поворот вставляемых объектов блока. И INSERT может иметь дополнительные объекты ATTRIB, которые представляют собой текстовые значения, на которые ссылается тег (имя).

Определения БЛОКА хранятся в свойстве Drawing.blocks:

# iterate over all existing block definitions
for block in dwg.blocks:
    for e in block:
        analyseElement(e)

Объект INSERT хранится в пространстве модели или в другом определении блока:

for insert in modelspace.query('INSERT'):
    block = dwg.blocks[insert.dxf.name]
    for e in block:
         analyseElement(e)

Для поиска определенных объектов INSERT:

for insert in modelspace.query('INSERT[name=="MyBlock"]'):
    ...
person mozman    schedule 17.08.2017
comment
Это сработало чудесно! Спасибо mozman за помощь и за этот отличный ezdxf :) - person technico; 17.08.2017