0

有没有办法从图层列表中删除一个空图层?我想做与 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”

4

1 回答 1

3

首先,考虑以下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 文件中删除图层定义之前,您需要确保图层名称在数据库中的任何位置都没有引用。

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

于 2019-10-01T15:50:40.510 回答