是否无法从图层列表中删除空白图层? 我想做与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'未定义
答案 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文件中删除图层定义之前,您需要确保图层名称在数据库中的任何地方都没有引用。
因此,这需要遍历整个图形数据库中的所有实体(即,所有图形布局中的主要实体,子实体(例如ATTRIB
,VERTEX
,SEQEND
实体),所有实体中的实体块定义以及块定义书挡(BLOCK
,ENDBLK
)。