iterdxf

This add-on allows iterating over entities of the modelspace of really big (> 5GB) DXF files which do not fit into memory by only loading one entity at the time. Only ASCII DXF files are supported.

The entities are regular DXFGraphic objects with access to all supported DXF attributes, this entities can be written to new DXF files created by the IterDXF.export() method. The new add_foreign_entity() method allows also to add this entities to new regular ezdxf drawings (except for the INSERT entity), but resources like linetype and style are removed, only layer will be preserved but only with default attributes like color 7 and linetype CONTINUOUS.

The following example shows how to split a big DXF files into several separated DXF files which contains only LINE, TEXT or POLYLINE entities.

from ezdxf.addons import iterdxf

doc = iterdxf.opendxf('big.dxf')
line_exporter = doc.export('line.dxf')
text_exporter = doc.export('text.dxf')
polyline_exporter = doc.export('polyline.dxf')
try:
    for entity in doc.modelspace():
        if entity.dxftype() == 'LINE':
            line_exporter.write(entity)
        elif entity.dxftype() == 'TEXT':
            text_exporter.write(entity)
        elif entity.dxftype() == 'POLYLINE':
            polyline_exporter.write(entity)
finally:
    line_exporter.close()
    text_exporter.close()
    polyline_exporter.close()
    doc.close()

Supported DXF types:

3DFACE, ARC, ATTDEF, ATTRIB, CIRCLE, DIMENSION, ELLIPSE, HATCH, HELIX, IMAGE, INSERT, LEADER, LINE, LWPOLYLINE, MESH, MLEADER, MLINE, MTEXT, POINT, POLYLINE, RAY, SHAPE, SOLID, SPLINE, TEXT, TRACE, VERTEX, WIPEOUT, XLINE

Transfer simple entities to another DXF document, this works for some supported entities, except for entities with strong dependencies to the original document like INSERT look at add_foreign_entity() for all supported types:

newdoc = ezdxf.new()
msp = newdoc.modelspace()
# line is an entity from a big source file
msp.add_foreign_entity(line)
# and so on ...
msp.add_foreign_entity(lwpolyline)
msp.add_foreign_entity(mesh)
msp.add_foreign_entity(polyface)

Transfer MESH and POLYFACE (dxftype for POLYFACE and POLYMESH is POLYLINE!) entities into a new DXF document by the MeshTransformer class:

from ezdxf.render import MeshTransformer

# mesh is MESH from a big source file
t = MeshTransformer.from_mesh(mesh)
# create a new MESH entity from MeshTransformer
t.render(msp)

# polyface is POLYFACE from a big source file
t = MeshTransformer.from_polyface(polyface)
# create a new POLYMESH entity from MeshTransformer
t.render_polyface(msp)

Another way to import entities from a big source file into new DXF documents is to split the big file into smaller parts and use the Importer add-on for a more safe entity import.

ezdxf.addons.iterdxf.opendxf(filename: str, errors: str = 'surrogateescape')IterDXF

Open DXF file for iterating, be sure to open valid DXF files, no DXF structure checks will be applied.

Use this function to split up big DXF files as shown in the example above.

Parameters
  • filename – DXF filename of a seekable DXF file.

  • errors

    specify decoding error handler

    • ”surrogateescape” to preserve possible binary data (default)

    • ”ignore” to use the replacement char U+FFFD “�” for invalid data

    • ”strict” to raise an UnicodeDecodeError exception for invalid data

Raises
  • DXFStructureError – invalid or incomplete DXF file

  • UnicodeDecodeError – if errors is “strict” and a decoding error occurs

ezdxf.addons.iterdxf.modelspace(filename: str, types: Iterable[str] = None, errors: str = 'surrogateescape') → Iterable[DXFGraphic]

Iterate over all modelspace entities as DXFGraphic objects of a seekable file.

Use this function to iterate “quick” over modelspace entities of a DXF file, filtering DXF types may speed up things if many entity types will be skipped.

Parameters
  • filename – filename of a seekable DXF file

  • types – DXF types like ['LINE', '3DFACE'] which should be returned, None returns all supported types.

  • errors

    specify decoding error handler

    • ”surrogateescape” to preserve possible binary data (default)

    • ”ignore” to use the replacement char U+FFFD “�” for invalid data

    • ”strict” to raise an UnicodeDecodeError exception for invalid data

Raises
  • DXFStructureError – invalid or incomplete DXF file

  • UnicodeDecodeError – if errors is “strict” and a decoding error occurs

ezdxf.addons.iterdxf.single_pass_modelspace(stream: BinaryIO, types: Iterable[str] = None, errors: str = 'surrogateescape') → Iterable[DXFGraphic]

Iterate over all modelspace entities as DXFGraphic objects in one single pass.

Use this function to ‘quick’ iterate over modelspace entities of a not seekable binary DXF stream, filtering DXF types may speed up things if many entity types will be skipped.

Parameters
  • stream – (not seekable) binary DXF stream

  • types – DXF types like ['LINE', '3DFACE'] which should be returned, None returns all supported types.

  • errors

    specify decoding error handler

    • ”surrogateescape” to preserve possible binary data (default)

    • ”ignore” to use the replacement char U+FFFD “�” for invalid data

    • ”strict” to raise an UnicodeDecodeError exception for invalid data

Raises
  • DXFStructureError – Invalid or incomplete DXF file

  • UnicodeDecodeError – if errors is “strict” and a decoding error occurs

class ezdxf.addons.iterdxf.IterDXF
export(name: str)IterDXFWriter

Returns a companion object to export parts from the source DXF file into another DXF file, the new file will have the same HEADER, CLASSES, TABLES, BLOCKS and OBJECTS sections, which guarantees all necessary dependencies are present in the new file.

Parameters

name – filename, no special requirements

modelspace(types: Iterable[str] = None) → Iterable[DXFGraphic]

Returns an iterator for all supported DXF entities in the modelspace. These entities are regular DXFGraphic objects but without a valid document assigned. It is not possible to add these entities to other ezdxf documents.

It is only possible to recreate the objects by factory functions base on attributes of the source entity. For MESH, POLYMESH and POLYFACE it is possible to use the MeshTransformer class to render (recreate) this objects as new entities in another document.

Parameters

types – DXF types like ['LINE', '3DFACE'] which should be returned, None returns all supported types.

close()

Safe closing source DXF file.

class ezdxf.addons.iterdxf.IterDXFWriter
write(entity: DXFGraphic)

Write a DXF entity from the source DXF file to the export file.

Don’t write entities from different documents than the source DXF file, dependencies and resources will not match, maybe it will work once, but not in a reliable way for different DXF documents.

close()

Safe closing of exported DXF file. Copying of OBJECTS section happens only at closing the file, without closing the new DXF file is invalid.