ezdxf:如何删除实体

时间:2019-11-07 14:58:40

标签: python dxf ezdxf

我正在使用ezdxf软件包对DXF图形进行后处理。 然后,我将DXF转换为SVG。

在后处理期间,我需要删除一些位于绘图区域之外的INSERT实体,以便转换后的SVG具有正确的尺寸。我正在做这样的事情:

def dxftype(entity):
   notHandled = []
   if entity.dxftype() in notHandled:
    return None
   else:
    return entity.dxftype()

def hasToBeDeleted(entity):
 """
 Some criteria for deleting an entity
 return a Boolean
 """

dwg = ezdxf.readfile("myDxfFile.dxf")
msp = dwg.modelspace()
group = msp.groupby(key=dxftype)

for entityType, entities in group.items():
 for e in entities:
  if hasToBedeleted(e):
   msp.delete_entity(e)

问题在于,转换实体时,不会删除该实体。实际上,如果在此之后我又进行了一个抑制循环,则该循环仍会执行删除实体的操作,证明该实体尚未真正从模型空间中删除。

然后从ezdxf中的模型空间删除实体的正确方法是什么?我目前正在使用0.9版,现在无法升级到新版本

1 个答案:

答案 0 :(得分:0)

我刚开始使用 ezdxf 并看到了这个:

https://ezdxf.mozman.at/docs/develop/entitydb.html

特别是 purgetrashcan。垃圾桶提到“离开上下文时”,所以也许有一种方法可以使用 with 语句来促进对象的删除?保存它,在使用 purge 循环后显式调用 delete_entity?迭代器文档说它不会返回已删除的项目,但“将其从轨道上摧毁,这是唯一确定的方法”是一个很好的座右铭。