Как определить, какие линии и дуги соединены при импорте из DXF?

Я использую ezdxf для импорта файла .dxf в Python. Работает плавно. Я получаю список линий и дуг.

Как понять, какие линии и дуги связаны друг с другом? Они как-то проиндексированы или мне нужно искать начальную и конечную точки линий и дуг и потом сопоставлять их?

Мне нужно найти закрытые строки в файле .dxf.


person Tola    schedule 20.11.2019    source источник
comment
Встроенного индекса нет. Вам нужно построить это самостоятельно.   -  person deets    schedule 20.11.2019


Ответы (1)


Вы должны сопоставить конечные точки линии и дуги вручную.

Получите конечные точки дуг с экструзией по умолчанию (0, 0, 1):

from ezdxf.math import Vector

start_point = Vector.from_deg_angle(arc.dxf.start_angle, arc.dxf.radius)
end_point = Vector.from_deg_angle(arc.dxf.end_angle, arc.dxf.radius)

Добавить в центр дуги:

s = start_point + arc.dxf.center
e = end_point + arc.dxf.center

Если система координат объекта (OCS), определенная arc.dxf.extrusion, отличается от (0, 0, 1), необходимо выполнить преобразование в мировую систему координат (WCS):

ocs = arc.ocs()
s = ocs.to_wcs(s)
e = ocs.to_wcs(e)

Следующая версия ezdxf v0.11 будет иметь свойства Arc.start_point и Arc.end_point, которые будут возвращать координаты WCS.

Важно: не сравнивайте с оператором равенства (==), используйте math.isclose() или лучше Vector.isclose(), например:

s.isclose(line.dxf.start, abs_tol=1e-6)
e.isclose(line.dxf.start, abs_tol=1e-6)
s.isclose(line.dxf.end, abs_tol=1e-6)
e.isclose(line.dxf.end, abs_tol=1e-6)

Установите абсолютный допуск в соответствии с вашими потребностями.

person mozman    schedule 20.11.2019
comment
Спасибо очень полезно - person Tola; 22.11.2019