Polyline

The POLYLINE entity (POLYLINE DXF Reference) is very complex, it’s used to build 2D/3D polylines, 3D meshes and 3D polyfaces. For every type exists a different wrapper class but they all have the same DXF type “POLYLINE”. Detect the actual POLYLINE type by the method Polyline.get_mode().

POLYLINE types returned by Polyline.get_mode():

For 2D entities all vertices in OCS.

For 3D entities all vertices in WCS.

Subclass of

ezdxf.entities.DXFGraphic

DXF type

'POLYLINE'

2D factory function

ezdxf.layouts.BaseLayout.add_polyline2d()

3D factory function

ezdxf.layouts.BaseLayout.add_polyline3d()

Inherited DXF attributes

Common graphical DXF attributes

Warning

Do not instantiate entity classes by yourself - always use the provided factory functions!

class ezdxf.entities.Polyline

The Vertex entities are stored in the Python list Polyline.vertices. The VERTEX entities can be retrieved and deleted by direct access to the Polyline.vertices attribute:

# delete first and second vertex
del polyline.vertices[:2]
dxf.elevation

Elevation point, the X and Y values are always 0, and the Z value is the polyline elevation (3D Point).

dxf.flags

Constants defined in ezdxf.lldxf.const:

Polyline.dxf.flags

Value

Description

POLYLINE_CLOSED

1

This is a closed Polyline (or a polygon mesh closed in the M direction)

POLYLINE_MESH_CLOSED_M_DIRECTION

1

equals POLYLINE_CLOSED

POLYLINE_CURVE_FIT_VERTICES_ADDED

2

Curve-fit vertices have been added

POLYLINE_SPLINE_FIT_VERTICES_ADDED

4

Spline-fit vertices have been added

POLYLINE_3D_POLYLINE

8

This is a 3D Polyline

POLYLINE_3D_POLYMESH

16

This is a 3D polygon mesh

POLYLINE_MESH_CLOSED_N_DIRECTION

32

The polygon mesh is closed in the N direction

POLYLINE_POLYFACE_MESH

64

This Polyline is a polyface mesh

POLYLINE_GENERATE_LINETYPE_PATTERN

128

The linetype pattern is generated continuously around the vertices of this Polyline

dxf.default_start_width

Default line start width (float); default is 0

dxf.default_end_width

Default line end width (float); default is 0

dxf.m_count

Polymesh M vertex count (int); default is 1

dxf.n_count

Polymesh N vertex count (int); default is 1

dxf.m_smooth_density

Smooth surface M density (int); default is 0

dxf.n_smooth_density

Smooth surface N density (int); default is 0

dxf.smooth_type

Curves and smooth surface type (int); default is 0, see table below

Constants for smooth_type defined in ezdxf.lldxf.const:

Polyline.dxf.smooth_type

Value

Description

POLYMESH_NO_SMOOTH

0

no smooth surface fitted

POLYMESH_QUADRATIC_BSPLINE

5

quadratic B-spline surface

POLYMESH_CUBIC_BSPLINE

6

cubic B-spline surface

POLYMESH_BEZIER_SURFACE

8

Bezier surface

vertices

List of Vertex entities.

is_2d_polyline

True if POLYLINE is a 2D polyline.

is_3d_polyline

True if POLYLINE is a 3D polyline.

is_polygon_mesh

True if POLYLINE is a polygon mesh, see Polymesh

is_poly_face_mesh

True if POLYLINE is a poly face mesh, see Polyface

is_closed

True if POLYLINE is closed.

is_m_closed

True if POLYLINE (as Polymesh) is closed in m direction.

is_n_closed

True if POLYLINE (as Polymesh) is closed in n direction.

has_arc

Returns True if 2D POLYLINE has an arc segment.

has_width

Returns True if 2D POLYLINE has default width values or any segment with width attributes.

get_mode() str

Returns POLYLINE type as string:

  • “AcDb2dPolyline”

  • “AcDb3dPolyline”

  • “AcDbPolygonMesh”

  • “AcDbPolyFaceMesh”

m_close(status=True) None

Close POLYMESH in m direction if status is True (also closes POLYLINE), clears closed state if status is False.

n_close(status=True) None

Close POLYMESH in n direction if status is True, clears closed state if status is False.

close(m_close=True, n_close=False) None

Set closed state of POLYMESH and POLYLINE in m direction and n direction. True set closed flag, False clears closed flag.

__len__() int

Returns count of Vertex entities.

__getitem__(pos) DXFVertex

Get Vertex entity at position pos, supports list-like slicing.

points() Iterator[Vec3]

Returns iterable of all polyline vertices as (x, y, z) tuples, not as Vertex objects.

append_vertex(point: UVec, dxfattribs=None) None

Append a single Vertex entity at location point.

Parameters:
  • point – as (x, y[, z]) tuple

  • dxfattribs – dict of DXF attributes for Vertex class

append_vertices(points: Iterable[UVec], dxfattribs=None) None

Append multiple Vertex entities at location points.

Parameters:
  • points – iterable of (x, y[, z]) tuples

  • dxfattribs – dict of DXF attributes for the VERTEX objects

append_formatted_vertices(points: Iterable[Sequence], format: str = 'xy', dxfattribs=None) None

Append multiple Vertex entities at location points.

Parameters:
  • points – iterable of (x, y, [start_width, [end_width, [bulge]]]) tuple

  • format – format string, default is “xy”, see: User Defined Point Format Codes

  • dxfattribs – dict of DXF attributes for the VERTEX objects

insert_vertices(pos: int, points: Iterable[UVec], dxfattribs=None) None

Insert vertices points into Polyline.vertices list at insertion location pos .

Parameters:
  • pos – insertion position of list Polyline.vertices

  • points – list of (x, y[, z]) tuples

  • dxfattribs – dict of DXF attributes for Vertex class

transform(m: Matrix44) Polyline

Transform the POLYLINE entity by transformation matrix m inplace.

A non-uniform scaling is not supported if a 2D POLYLINE contains circular arc segments (bulges).

Parameters:

m – transformation Matrix44

Raises:

NonUniformScalingError – for non-uniform scaling of 2D POLYLINE containing circular arc segments (bulges)

virtual_entities() Iterator[Line | Arc | Face3d]

Yields the graphical representation of POLYLINE as virtual DXF primitives (LINE, ARC or 3DFACE).

These virtual entities are located at the original location, but are not stored in the entity database, have no handle and are not assigned to any layout.

explode(target_layout: BaseLayout | None = None) EntityQuery

Explode the POLYLINE entity as DXF primitives (LINE, ARC or 3DFACE) into the target layout, if the target layout is None, the target layout is the layout of the POLYLINE entity.

Returns an EntityQuery container referencing all DXF primitives.

Parameters:

target_layout – target layout for DXF primitives, None for same layout as source entity.

Vertex

A VERTEX (VERTEX DXF Reference) represents a polyline/mesh vertex.

Subclass of

ezdxf.entities.DXFGraphic

DXF type

'VERTEX'

Factory function

Polyline.append_vertex()

Factory function

Polyline.extend()

Factory function

Polyline.insert_vertices()

Inherited DXF Attributes

Common graphical DXF attributes

class ezdxf.entities.Vertex
dxf.location

Vertex location (2D/3D Point OCS when 2D, WCS when 3D)

dxf.start_width

Line segment start width (float); default is 0

dxf.end_width

Line segment end width (float); default is 0

dxf.bulge

Bulge value (float); default is 0.

The bulge value is used to create arc shaped line segments.

dxf.flags

Constants defined in ezdxf.lldxf.const:

Vertex.dxf.flags

Value

Description

VTX_EXTRA_VERTEX_CREATED

1

Extra vertex created by curve-fitting

VTX_CURVE_FIT_TANGENT

2

curve-fit tangent defined for this vertex. A curve-fit tangent direction of 0 may be omitted from the DXF output, but is significant if this bit is set.

VTX_SPLINE_VERTEX_CREATED

8

spline vertex created by spline-fitting

VTX_SPLINE_FRAME_CONTROL_POINT

16

spline frame control point

VTX_3D_POLYLINE_VERTEX

32

3D polyline vertex

VTX_3D_POLYGON_MESH_VERTEX

64

3D polygon mesh

VTX_3D_POLYFACE_MESH_VERTEX

128

polyface mesh vertex

dxf.tangent

Curve fit tangent direction (float), used for 2D spline in DXF R12.

dxf.vtx1

Index of 1st vertex, if used as face (feature for experts)

dxf.vtx2

Index of 2nd vertex, if used as face (feature for experts)

dxf.vtx3

Index of 3rd vertex, if used as face (feature for experts)

dxf.vtx4

Index of 4th vertex, if used as face (feature for experts)

is_2d_polyline_vertex
is_3d_polyline_vertex
is_polygon_mesh_vertex
is_poly_face_mesh_vertex
is_face_record
format(format='xyz') Sequence

Return formatted vertex components as tuple.

Format codes:

  • “x” = x-coordinate

  • “y” = y-coordinate

  • “z” = z-coordinate

  • “s” = start width

  • “e” = end width

  • “b” = bulge value

  • “v” = (x, y, z) as tuple

Args:

format: format string, default is “xyz”

Polymesh

Subclass of

ezdxf.entities.Polyline

DXF type

'POLYLINE'

Factory function

ezdxf.layouts.BaseLayout.add_polymesh()

Inherited DXF Attributes

Common graphical DXF attributes

class ezdxf.entities.Polymesh

A polymesh is a grid of m_count by n_count vertices, every vertex has its own (x, y, z) location. The Polymesh is a subclass of Polyline, the DXF type is also “POLYLINE”, the method get_mode() returns “AcDbPolygonMesh”.

get_mesh_vertex(pos: tuple[int, int]) DXFVertex

Get location of a single mesh vertex.

Parameters:

pos – 0-based (row, col) tuple, position of mesh vertex

set_mesh_vertex(pos: tuple[int, int], point: UVec, dxfattribs=None)

Set location and DXF attributes of a single mesh vertex.

Parameters:
  • pos – 0-based (row, col) tuple, position of mesh vertex

  • point – (x, y, z) tuple, new 3D coordinates of the mesh vertex

  • dxfattribs – dict of DXF attributes

get_mesh_vertex_cache() MeshVertexCache

Get a MeshVertexCache object for this POLYMESH. The caching object provides fast access to the location attribute of mesh vertices.

MeshVertexCache

class ezdxf.entities.MeshVertexCache

Cache mesh vertices in a dict, keys are 0-based (row, col) tuples.

Set vertex location: cache[row, col] = (x, y, z)

Get vertex location: x, y, z = cache[row, col]

vertices

Dict of mesh vertices, keys are 0-based (row, col) tuples.

__getitem__(pos: tuple[int, int]) UVec

Get mesh vertex location as (x, y, z)-tuple.

Parameters:

pos – 0-based (row, col)-tuple.

__setitem__(pos: tuple[int, int], location: UVec) None

Get mesh vertex location as (x, y, z)-tuple.

Parameters:
  • pos – 0-based (row, col)-tuple.

  • location – (x, y, z)-tuple

Polyface

Subclass of

ezdxf.entities.Polyline

DXF type

'POLYLINE'

Factory function

ezdxf.layouts.BaseLayout.add_polyface()

Inherited DXF Attributes

Common graphical DXF attributes

class ezdxf.entities.Polyface

A polyface consist of multiple 3D areas called faces, only faces with 3 or 4 vertices are supported. The Polyface is a subclass of Polyline, the DXF type is also “POLYLINE”, the get_mode() returns “AcDbPolyFaceMesh”.

append_face(face: FaceType, dxfattribs=None) None

Append a single face. A face is a sequence of (x, y, z) tuples.

Parameters:
  • face – sequence of (x, y, z) tuples

  • dxfattribs – dict of DXF attributes for the VERTEX objects

append_faces(faces: Iterable[FaceType], dxfattribs=None) None

Append multiple faces. faces is a list of single faces and a single face is a sequence of (x, y, z) tuples.

Parameters:
  • faces – iterable of sequences of (x, y, z) tuples

  • dxfattribs – dict of DXF attributes for the VERTEX entity

faces() Iterator[list[DXFVertex]]

Iterable of all faces, a face is a tuple of vertices.

Returns:

list of [vertex, vertex, vertex, [vertex,] face_record]

optimize(precision: int = 6) None

Rebuilds the Polyface by merging vertices with nearly same vertex locations.

Parameters:

precision – floating point precision for determining identical vertex locations