使用python更改dxf文件中的图层名称

时间:2017-01-30 18:12:52

标签: python dxf

您好我需要使用python自动化工作流程。我必须打开一个dxf文件,并在其中更改一个文本和一个形状的名称。我正在使用ezdxf模块。我可以看到图层,但是当我尝试更改其中一个图层的名称并保存文件时,使用新名称创建一个新图层。提前谢谢。

dwg = ezdxf.readfile('path_to_my_file.dxf')
for layer in dwg.layers:
    if layer.dxf.name == 'old_layer_name':
        layer.dxf.name = 'new_layer_name'

2 个答案:

答案 0 :(得分:1)

DXF格式非常松散,并且 <script> function handleError() { var sources = document.querySelectorAll("picture source"); var img = document.querySelector("picture img"); for (var i = 0; i < sources.length; i++) { if (window.matchMedia(sources[i].media).matches) { img.setAttribute("alt", sources[i].dataset.alt); break; } } } </script> <picture class='my-image'> <source media="(min-width: 1024px)" srcset="large.jpg" data-alt="large"> <source media="(min-width: 768px)" srcset="med.jpg" data-alt="small"> <source srcset="small.jpg" data-alt="small"> <img src="small.jpg" alt="" onerror="handleError()"> <p>Accessible text</p> </picture> 表中以及LAYERS表中的每个项目都指定了图层名称(也可能在某些ENTITIES中指定了图层名称),所以你必须在任何地方更新图层名称才能生效。

我对OBJECTS库一无所知,但可能发生的事情是,在保存文件时,图书馆会注意到即使您将ezdxf重命名为'old_layer_name',仍然存在指定'new_layer_name'的实体,因此库将该层添加到'old_layer_name'表以尝试保持一致性。

最终结果将如下所示(未经测试):

LAYERS

答案 1 :(得分:1)

如果您只是在图层表中重命名图层,则不会更改任何实体的图层,因为所有实体都拥有自己的图层属性,该图层属性决定实体出现在哪个图层上。这必须手动完成所有布局空间,包括模型空间以及所有块定义。

仅适用于模型空间的示例:

import ezdxf

dwg = ezdxf.readfile('old.dxf')
msp = dwg.modelspace()

OLD_LAYER_NAME = 'old_layer_name'
NEW_LAYER_NAME = 'new_layer_name'

# rename layer
try:
    layer = dwg.layers.get(OLD_LAYER_NAME)
except ValueError:
    print('Layer {} not found.'.format(OLD_LAYER_NAME))
else:
    layer.dxf.name = NEW_LAYER_NAME

# move entities in model space to new layer
all_entities_on_old_layer = dwg.modelspace().query('*[layer=="%s"]' % OLD_LAYER_NAME)
for entity in all_entities_on_old_layer:
    entity.dxf.layer = NEW_LAYER_NAME  # this assigns the new layer

dwg.saveas('new.dxf')