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 шт):
Нашёл решение, может, не самое оптимизированное в плане перебора элементов, но работает - ищет сложные объекты (полилинии), разбивает на примитивы, и каждый примитив проверяет на принадлежность к аркам.
В моём первоначальном варианте просто была логическая ошибка, потому что я не понимал, как работает библиотека 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)