我可以使用 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_entities
将 never return 正确,因为根据 for
循环的定义,entity
必须是 all_entities
的成员。
针对您的主要问题:在从 DXF 文件中删除图层定义之前,您需要确保图层名称在数据库中的任何位置都没有引用。
因此,这需要遍历整个绘图数据库中的所有实体(即所有绘图布局中的主要实体、子实体(例如 ATTRIB
、VERTEX
、SEQEND
实体)、实体在所有块定义中,以及块定义书挡 (BLOCK
, ENDBLK
).
有没有办法从图层列表中删除一个空图层? 我想做与 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_entities
将 never return 正确,因为根据 for
循环的定义,entity
必须是 all_entities
的成员。
针对您的主要问题:在从 DXF 文件中删除图层定义之前,您需要确保图层名称在数据库中的任何位置都没有引用。
因此,这需要遍历整个绘图数据库中的所有实体(即所有绘图布局中的主要实体、子实体(例如 ATTRIB
、VERTEX
、SEQEND
实体)、实体在所有块定义中,以及块定义书挡 (BLOCK
, ENDBLK
).