我可以使用 ezdxf 删除空图层吗?

Can I delete an empty layer using ezdxf?

有没有办法从图层列表中删除一个空图层? 我想做与 autocad purge 命令相同的事情。

我尝试编写代码,但没有成功。

del_lay = [] 
for layer in dwg.layers:
    s = layer.dxf.name
    lay_= re.search(layer.dxf.name, s)
    if lay_:
      L = lay_.group()
      del_lay.append(L)
del_lay.remove("0") #0 layer cannot be deleted, so remove it from the list 

for Lay in del_lay:
    all_entities = dwg.modelspace().query('*[layer=="%s"]' % Lay)
    print(all_entities)
    for entity in all_entities: #If there is no entity in the layer
        if entity not in all_entities:
            delete_name = layer.dxf.name
my_lines = dwg.layers.get(delete_name)
dwg.layers.remove(my_lines)

我自己查的时候,有一层实体不存在,但是没有执行

NameError: name 'delete_name' is not defined

首先,考虑以下 if 语句 永远不会 被验证:

for entity in all_entities: #If there is no entity in the layer
    if entity not in all_entities:

for 循环中,您正在迭代 all_entities 的内容,因此您的测试表达式:entity not in all_entitiesnever return 正确,因为根据 for 循环的定义,entity 必须是 all_entities 的成员。


针对您的主要问题:在从 DXF 文件中删除图层定义之前,您需要确保图层名称在数据库中的任何位置都没有引用。

因此,这需要遍历整个绘图数据库中的所有实体(即所有绘图布局中的主要实体、子实体(例如 ATTRIBVERTEXSEQEND 实体)、实体在所有块定义中,以及块定义书挡 (BLOCK, ENDBLK).