как найти длину объекта из файла dxf с помощью пакетов dxfgrabber или ezdxf

Я пытаюсь найти общую длину (периметр), площадь сплайна из файла dxf. Есть ли какая-либо функция в dxfgrabber или ezdxf для определения общей длины объекта из файла dxf?


person Hafees Kazhunkil    schedule 02.03.2016    source источник
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
comment
Вы бы вставили код в свой ответ, чтобы через некоторое время он мог помочь кому-то еще. Внешние источники могут удалять информацию без какого-либо уведомления. - person Arfeo; 05.04.2019
comment
e.get_control_points() не работает в версии 0.15.2 Объект «Сплайн» не имеет атрибута «get_control_points» - person TomK; 13.03.2021