Python + dxf = Разбить сложные объекты на простые

В .dxf есть объекты Полилинии, которые сами по себе являются массивами из окружностей, линий, арок и т.д. Мне нужно найти координаты центров арок.

Используется библиотека import ezdxf

Для начала надо найти сами арки, для этого надо разбить полилинии:

for file in glob.glob(os.path.join(old_dir_path, '*.dxf')):
    # Открываем чертеж
    doc = ezdxf.readfile(file)
    msp = doc.modelspace()

    # Получаем все объекты из разбитых полиний
    polys = [poly.explode() for polyin msp if poly.dxftype() == 'LWPOLYLINE']
    print(polys)

Вопрос - как разбить полилинии? В Nanocad это функция EXPLODE - она разбивает выбранный объект. Это сработало и в питоне, но объектами получаются некие <ezdxf.query.EntityQuery object at 0x79796c41ab90> - из них не получается вытащить названий или атрибутов.

Может кто-то делал подобное, подскажите пожалуйста решение


Ответы (1 шт):

Автор решения: Irking

Нашёл решение, может, не самое оптимизированное в плане перебора элементов, но работает - ищет сложные объекты (полилинии), разбивает на примитивы, и каждый примитив проверяет на принадлежность к аркам.

В моём первоначальном варианте просто была логическая ошибка, потому что я не понимал, как работает библиотека ezdxf.

doc = ezdxf.readfile(file)
# Получаем из пространства файла все полилинии
all_lines = doc.modelspace().query('LWPOLYLINE')
# Ищем арки    
for polyline in all_lines:
    for line in polyline.explode():
        if line.DXFTYPE == 'ARC':
            arcs_list.append(line)
→ Ссылка