Transform
Added in version 1.1.
This module provides functions to apply transformations to multiple DXF entities inplace or to virtual copies of that entities in a convenient and safe way:
import math
import ezdxf
from ezdxf import transform
doc = ezdxf.readfile("my.dxf")
msp = doc.modelspace()
log = transform.inplace(msp, m=transform.Matrix44.rotate_z(math.pi/2))
# or more simple
log = transform.z_rotate(msp, math.pi/2)
All functions handle errors by collecting them in an logging object without raising
an error.
The input entities are an iterable of DXFEntity, which can be
any layout, EntityQuery or just a list/sequence of entities and
virtual entities are supported as well.
Transforms the given entities inplace by the transformation matrix m, non-uniform scaling is supported. |
|
Copy entities and transform them by matrix m. |
|
Translates (moves) entities inplace by the offset vector. |
|
Scales entities inplace by a factor in all axis. |
|
Scales entities inplace by the factors sx in x-axis, sy in y-axis and sz in z-axis. |
|
Rotates entities inplace by angle in radians about the x-axis. |
|
Rotates entities inplace by angle in radians about the y-axis. |
|
Rotates entities inplace by angle in radians about the x-axis. |
|
Rotates entities inplace by angle in radians about the rotation axis starting at the origin pointing in axis direction. |
- ezdxf.transform.inplace(entities: Iterable[DXFEntity], m: Matrix44) Logger
Transforms the given entities inplace by the transformation matrix m, non-uniform scaling is supported. The function converts circular arcs into ellipses to perform non-uniform scaling. The function logs errors and does not raise errors for unsupported entities or transformation errors, see enum
Error.
- ezdxf.transform.copies(entities: Iterable[DXFEntity], m: Matrix44 | None = None) Tuple[Logger, List[DXFEntity]]
Copy entities and transform them by matrix m. Does not raise any exception and ignores all entities that cannot be copied or transformed. Just copies the input entities if matrix m is
None. Returns a tuple ofLoggerand a list of transformed virtual copies. The function supports virtual entities as input and converts circular arcs into ellipses to perform non-uniform scaling.
- ezdxf.transform.translate(entities: Iterable[DXFEntity], offset: UVec) Logger
Translates (moves) entities inplace by the offset vector.
- ezdxf.transform.scale_uniform(entities: Iterable[DXFEntity], factor: float) Logger
Scales entities inplace by a factor in all axis. Scaling factors smaller than
MIN_SCALING_FACTORare ignored.
- ezdxf.transform.scale(entities: Iterable[DXFEntity], sx: float, sy: float, sz: float) Logger
Scales entities inplace by the factors sx in x-axis, sy in y-axis and sz in z-axis. Scaling factors smaller than
MIN_SCALING_FACTORare ignored.Important
same limitations for virtual entities as the
inplace()function
- ezdxf.transform.x_rotate(entities: Iterable[DXFEntity], angle: float) Logger
Rotates entities inplace by angle in radians about the x-axis.
- ezdxf.transform.y_rotate(entities: Iterable[DXFEntity], angle: float) Logger
Rotates entities inplace by angle in radians about the y-axis.
- ezdxf.transform.z_rotate(entities: Iterable[DXFEntity], angle: float) Logger
Rotates entities inplace by angle in radians about the x-axis.
- ezdxf.transform.axis_rotate(entities: Iterable[DXFEntity], axis: UVec, angle: float) Logger
Rotates entities inplace by angle in radians about the rotation axis starting at the origin pointing in axis direction.
- ezdxf.transform.MIN_SCALING_FACTOR
Minimal scaling factor: 1e-12
- class ezdxf.transform.Error
- NONE
No error, same as a boolean
False, this allows checkif error: ...
- COPY_NOT_SUPPORTED
Entity without copy support.
- TRANSFORMATION_NOT_SUPPORTED
Entity without transformation support.
- NON_UNIFORM_SCALING_ERROR
Circular arcs (CIRCLE, ARC, bulges in POLYLINE and LWPOLYLINE entities) cannot be scaled non-uniformly.
- INSERT_TRANSFORMATION_ERROR
INSERT entities cannot represent a non-orthogonal target coordinate system. Maybe exploding the INSERT entities (recursively) beforehand can solve this issue, see function
ezdxf.disassemble.recursive_decompose().
- VIRTUAL_ENTITY_NOT_SUPPORTED
Transformation not supported for virtual entities e.g. non-uniform scaling for CIRCLE, ARC or POLYLINE with bulges
- class ezdxf.transform.Logger
A
Sequenceof errors asLogger.Entryinstances.- class Entry
Named tuple representing a logger entry.
- msg
error message as string
- entity
DXF entity which causes the error
- __len__() int
Returns the count of error entries.
- messages() list[str]
Returns all error messages as list of strings.