Удалить круги в DXF с помощью ezdxf

Я хотел бы удалить все объекты Circle из файла DXF. Я использую ezdxf, кажется, это хороший инструмент для такой работы.

Я использовал ezdxf doc для написания своего кода, но получаю сообщение об ошибке от Python:

AttributeError: 'str' objet has no attribute 'destroy'

Я не понимаю, почему. Я использовал этот документ: http://pythonhosted.org/ezdxf/layouts.html#delete-entities

Вот мой код:

import dxfgrabber
import ezdxf

dwg = dxfgrabber.readfile("test.dxf")
print(dwg)
c = []
center_points = [entity.center for entity in dwg.entities if entity.dxftype == 'CIRCLE']
dxf = ezdxf.readfile("test.dxf")
modelspace = dxf.modelspace()
for point in center_points:
    modelspace.add_point(point)
    c.append(point)
modelspace.delete_entity('CIRCLE')
dxf.save()
print(c)

Спасибо.


person Loïc Kreseski    schedule 17.07.2017    source источник


Ответы (2)


Я преуспел. Я отправляю свой код:

entities = dxf.entities
for e in entities:
        if e.dxftype() == 'CIRCLE':
            modelspace.delete_entity(e)

Вместо :

modelspace.delete_entity('CIRCLE')

Я думаю, что у него может быть лучший способ сделать это, но он работает.

person Loïc Kreseski    schedule 17.07.2017

  1. Чтобы удалить объект DXF, вы должны передать объект объекта DXF, а не строку.
  2. Если вы удаляете объекты из пространства модели, лучше просто перебрать объекты пространства модели, dxf.entities содержит объекты пространства модели и активного пространства листа: for e in dxf.modelspace() ...

или используйте функцию запроса():

msp = dxf.modelspace()
for circle in msp.query('CIRCLE'):
    msp.delete_entity(circle)
person mozman    schedule 17.07.2017