首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python更改dxf文件中的图层名称

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

Stack Overflow用户
提问于 2017-01-31 02:12:52
回答 2查看 1.3K关注 0票数 1

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

代码语言:javascript
运行
复制
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'
EN

回答 2

Stack Overflow用户

发布于 2017-02-01 02:47:47

如果仅重命名layers表中的层,则不会更改任何图元的层,因为所有图元都有其自己的layer属性,该属性确定图元出现在哪个层上。对于所有布局空间(包括模型空间)以及所有块定义,都必须手动执行此操作。

仅针对模型空间的示例:

代码语言:javascript
运行
复制
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')
票数 2
EN

Stack Overflow用户

发布于 2017-01-31 03:17:35

DXF格式非常松散,层名称既在LAYERS表中指定,也在ENTITIES表中的每个项上指定(也可能在一些OBJECTS中指定),因此您必须在所有地方更新层名称才能使其生效。

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

最终结果将类似于(未测试的):

代码语言:javascript
运行
复制
# 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'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41942682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档