1

我正在寻找一个将合并 dxf 文件的 python 模块。我找到了 dxfgrabber 和 ezdxf,但是它们似乎用于不同的应用程序,然后是我所追求的。

我用的是ExpressPCB,它分别输出PCB的每一层、孔和丝印。对于我的应用程序,我想将所有这些单独的 DXF 组合成一个。见照片

在此处输入图像描述

据我所知,起源等都是相同的,所以它应该像在现实生活中一样排列。

目前,这些模块都没有针对此类应用程序的任何教程。一些psudo代码以pythonic方式传达这个想法:

dxf_file1 = read(file1)
dxf_file2 = read(file2)    
dxf_file3 = read(file3)

out_file.append(dxf_file1)
out_file.append(dxf_file2)
out_file.append(dxf_file3)

outfile.save()

在我的应用程序中,文件都将具有相同的原点并且永远不会重叠,因此您应该能够以某种方式轻松合并文件。提前感谢您的帮助!

4

2 回答 2

2

您可以在 ezdxf v0.10 中使用重写的 Importer 插件:

import ezdxf
from ezdxf.addons import Importer


def merge(source, target):
    importer = Importer(source, target)
    # import all entities from source modelspace into target modelspace
    importer.import_modelspace()
    # import all required resources and dependencies
    importer.finalize()


base_dxf = ezdxf.readfile('file1.dxf')

for filename in ('file2.dxf', 'file3.dxf'):
    merge_dxf = ezdxf.readfile(filename)
    merge(merge_dxf, base_dxf)

# base_dxf.save()  # to save as file1.dxf
base_dxf.saveas('merged.dxf')

此导入器仅支持基本图形,如 LINE、CIRCLE、ARC 和 DIMENSION(无尺寸样式覆盖)等。

所有 XDATA 和 3rd 方数据都将被忽略,但您的文件似乎足够简单,可以正常工作。

可以在此处找到 Importer 附加组件的文档。

于 2019-12-08T14:06:44.127 回答
0
import sys
import ezdxf
from ezdxf.addons import geo
from shapely.geometry import shape
from shapely.ops import unary_union

def dxf2shapley(filename):
    doc = ezdxf.readfile(filename)
    msp = doc.modelspace()
    entities = msp.query('LINE')
    proxy = geo.proxy(entities)
    shapley_polygon = shape(proxy)
    if !shapley_polygon.is_valid:
        raise Exception('polygon is not valid')
    return shapley_polygon

h0 = dxf2shapley('test-0.dxf')
h1 = dxf2shapley('test-1.dxf')

polygons = [h0, h1]
polyout = unary_union(polygons)

result = ezdxf.addons.geo.dxf_entities(polyout, polygon=2)
doc = ezdxf.new('R2010')
msp = doc.modelspace()
for entity in result:
    msp.add_entity(entity)

doc.saveas('test_merged.dxf')
于 2021-11-06T01:08:35.650 回答