Я пытаюсь найти общую длину (периметр), площадь сплайна из файла dxf. Есть ли какая-либо функция в dxfgrabber или ezdxf для определения общей длины объекта из файла dxf?
как найти длину объекта из файла dxf с помощью пакетов dxfgrabber или ezdxf
comment
Вам нужно подумать об использовании такой библиотеки, как Teigha opendesign.com/the_oda_platform/Teigha, которая обеспечит Вы получаете полную функциональность не только для чтения данных DXF / DWG, но и для работы с полезными вещами. Сплайны — это сложные элементы, потому что существует множество вариантов изгиба данных, и это повлияет на длину линии. Я бы использовал такую библиотеку.
- person Andrew Truckle   schedule 16.04.2016
Ответы (2)
dxfgrabber и ezdxf являются просто интерфейсами к формату DXF и не предоставляют каких-либо функций САПР или вычислений, а геометрическая длина объектов DXF не является доступными атрибутами в формате DXF.
person
mozman
schedule
10.04.2016
Вы можете перебирать объекты, каждый объект имеет координаты линий, из которых он состоит, затем вы можете использовать эти точки для расчета длины объекта. Этот код вычисляет длину прямых линий, кривых и окружностей в файле .DXF.
import ezdxf
import math
dwg = ezdxf.readfile("arc.dxf")
msp = dwg.modelspace()
longitud_total = 0
for e in msp:
print(e)
if e.dxftype() == 'LINE':
dl = math.sqrt((e.dxf.start[0]-e.dxf.end[0])**2 + (e.dxf.start[1]-
e.dxf.end[1])**2)
print('linea: '+str(dl))
longitud_total = longitud_total + dl
elif e.dxftype() == 'CIRCLE':
dc = 2*math.pi*e.dxf.radius
print('radio: '+str(e.dxf.radius))
print('circulo: '+str(dc))
longitud_total = longitud_total + dc
elif e.dxftype() == 'SPLINE':
puntos = e.get_control_points()
for i in range(len(puntos)-1):
ds = math.sqrt((puntos[i][0]-puntos[i+1][0])**2 + (puntos[i][1]-
puntos[i+1][1])**2)
print('curva: '+str(ds))
longitud_total = longitud_total + ds
print('Longitud Total: '+ str(longitud_total))
person
Luis Fernando Ramirez
schedule
05.04.2019
Вы бы вставили код в свой ответ, чтобы через некоторое время он мог помочь кому-то еще. Внешние источники могут удалять информацию без какого-либо уведомления.
- person Arfeo; 05.04.2019
e.get_control_points() не работает в версии 0.15.2 Объект «Сплайн» не имеет атрибута «get_control_points»
- person TomK; 13.03.2021