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

时间:2019-09-30 11:19:15

标签: python autocad dxf 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:名称'delete_name'未定义

1 个答案:

答案 0 :(得分:2)

首先,请考虑以下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_entities从不返回True,因为从定义上看for的循环中,entity必须是all_entities的成员。


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

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