您好我需要使用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'
答案 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')