【问题标题】:Can I delete an empty layer using ezdxf?我可以使用 ezdxf 删除一个空层吗?
【发布时间】:2020-04-01 07:12:15
【问题描述】:

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

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

NameError: name 'delete_name' 未定义

【问题讨论】:

  • 如果您删除一个层表条目,您可能需要检查更多可能的层使用情况,不仅是模型空间(布局、块定义、层过滤器等),而且所有可能的用例都是DXF 参考没有记录,我的建议是:不要删除层表条目并参加一些编程课程。

标签: python autocad dxf ezdxf


【解决方案1】:

首先,考虑以下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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多