Использование ezdxf для извлечения деталей HATCH из BLOCK REFERENCES в dxf файлах - PullRequest
1 голос
/ 22 апреля 2020

Я попытался извлечь объекты HATCH вместе с их типами шаблонов, которые вставлены в чертежи в качестве БЛОКИРОВКИ, используя тег INSERT. Чертеж dxf: https://drive.google.com/open?id=1SnGDaIh8XiMe0QKAQy1RXzpT-rLNcLk7

Я использовал следующий код, используя обновленный пакет ezdxf-0.12 для python -3.6

import ezdxf
import argparse

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True,
    help="path to input dxf file")
args = vars(ap.parse_args())
file = args["input"]    
doc = ezdxf.readfile(file)

msp = doc.modelspace()

for flag_ref in msp.query('INSERT'):
    for entity in flag_ref.virtual_entities():
        if entity.dxftype() == 'HATCH':

            print("HATCH", entity.dxf.pattern_name)

Код не печатался HATCH объекты, имеющие шаблоны ANSI31. В файле dxf их 2, которые можно просматривать в Autocad (или даже просматривать с помощью обычных текстовых редакторов). Можно отметить, что объекты HATCH, имеющие шаблоны SOLID в данном файле dxf, были напечатаны как обычно.

Есть ли какая-либо ошибка в коде или обновлении пакета?

1 Ответ

2 голосов
/ 23 апреля 2020

Ссылки блока # 385 и # 38E блока "T C" имеют неравномерное масштабирование (-1, 1, 1), которое по умолчанию игнорирует ezdxf (зеркальное отображение имеет почти такую ​​же сложность, что и неравномерное масштабирование), Вы должны явно активировать неравномерное масштабирование с помощью virtual_entities(non_uniform_scaling=True). Но неравномерное масштабирование дает неверные результаты для некоторых объектов - это все еще экспериментальная функция. Также была ошибка в сущности HATCH, которая будет исправлена ​​в следующей версии ezdxf v0.12.1.

...