Python和ezdxf复制块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python和ezdxf复制块相关的知识,希望对你有一定的参考价值。

我有一个带有一个或多个块的dxf文件。如何使用ezdxf读取此dxf并将一个块复制到另一个dxf文件?

此代码无法正常工作:

    dxf = ezdxf.readfile("blocks.dxf")
    block_test = dxf.blocks.get('b_test')
    dxf_test = ezdxf.readfile("arc.dxf")
    msp_test = dxf_test.modelspace()
    flag = dxf_test.blocks.new(name='FLAG')
    flag.add_lwpolyline([(0, 0), (0, 5), (4, 3), (0, 3)])
    flag.add_circle((0, 0), .4, dxfattribs={'color': 2}) 
    msp_test.add_blockref(block_test, (10.1, 10.1), dxfattribs={
    'xscale': 1,
    'yscale': 1,
    'rotation': 0
    })

    msp_test.add_blockref('flag', (0.1, 0.1), dxfattribs={
    'xscale': 5.1,
    'yscale': 5.1,
    'rotation': 115
    })

    dxf_test.saveas("blockref_tutorial.dxf")
    exit()

上面的代码示例未按预期工作。也就是说,block_test不在保存的文件中...谢谢..

答案

由于DXF格式具有复杂的可扩展性,并且缺乏除实体描述之外的足够的内部结构文档,因此复制实体或将它们移动到DXF文件内部并不是一件容易的事情,而且在不同的DXF文件之间当然也不容易。] >

要完成这种任务,ezdxf

具有Importer附加组件,它可以将一些资源,实体和块定义从源文档导入到目标文档中,但是不要指望完美的结果,请阅读docs

以下代码将块定义'b_test'从源DXF文件'blocks.dxf'导入到目标DXF文件'arc.dxf',完成导入后,您可以将对块'b_test'的块引用添加到对象的模型空间目标DXF文件。

import ezdxf
from ezdxf.addons import Importer

source_dxf = ezdxf.readfile("blocks.dxf")

if 'b_test' not in source_dxf.blocks:
    print("Block 'b_test' not defined.")
    exit()

target_dxf = ezdxf.readfile("arc.dxf")

importer = Importer(source_dxf, target_dxf)
importer.import_block('b_test')
importer.finalize()

msp = target_dxf.modelspace()
msp.add_blockref('b_test', insert=(10, 10))
target_dxf.saveas("blockref_tutorial.dxf")

以上是关于Python和ezdxf复制块的主要内容,如果未能解决你的问题,请参考以下文章

[Python]常用代码块

Sphinx - 在代码块片段中使用省略号 (...)

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

<code> vs <pre> vs <samp> 用于内联和块代码片段

如何在 Django Summernote 中显示编程片段的代码块?

VsCode中Vue页面代码块快捷设置 代码模板