嗨,我需要自动化工作流程使用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'
发布于 2017-02-01 02:47:47
如果仅重命名layers表中的层,则不会更改任何图元的层,因为所有图元都有其自己的layer属性,该属性确定图元出现在哪个层上。对于所有布局空间(包括模型空间)以及所有块定义,都必须手动执行此操作。
仅针对模型空间的示例:
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')
发布于 2017-01-31 03:17:35
DXF格式非常松散,层名称既在LAYERS
表中指定,也在ENTITIES
表中的每个项上指定(也可能在一些OBJECTS
中指定),因此您必须在所有地方更新层名称才能使其生效。
我对ezdxf
库一无所知,但可能发生的情况是,在保存文件时,库注意到即使您将'old_layer_name'
重命名为'new_layer_name'
,仍然存在指定'old_layer_name'
的实体,因此库将该层添加到LAYERS
表中以保持一致性。
最终结果将类似于(未测试的):
# your existing code
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'
# this is the part that's untested
for entity in dwg.entities:
if entity.layer.dxf.name == 'old_layer_name':
entity.layer.dxf.name == 'new_layer_name'
https://stackoverflow.com/questions/41942682
复制相似问题