Working with Entities
Entity Structure
Each entity is represented as a frozen dataclass with three fields:
from ezdwg import Entity
# Entity fields:
entity.dxftype # str — entity type name (e.g. "LINE", "ARC")
entity.handle # int — unique handle within the file
entity.dxf # dict[str, Any] — entity-specific attributes
Querying Entities
Use query() on a Layout to iterate over entities:
msp = doc.modelspace()
# All supported entity types
for entity in msp.query():
print(entity.dxftype, entity.handle)
# Filter by type name(s)
for entity in msp.query("LINE"):
print(entity.dxf)
# Multiple types (space-separated)
for entity in msp.query("LINE ARC CIRCLE"):
print(entity.dxftype, entity.dxf)
iter_entities() is an alias for query():
for entity in msp.iter_entities("LINE"):
print(entity.dxf)
Converting to Points
The to_points() method extracts key coordinates from an entity:
for entity in msp.query("LINE LWPOLYLINE POINT"):
points = entity.to_points()
print(entity.dxftype, points)
Supported types for to_points():
| Type |
Returns |
| LINE |
[start, end] |
| LWPOLYLINE |
List of vertex points |
| POINT |
[location] |
| TEXT / MTEXT |
[insert] |
| DIMENSION |
[defpoint2, defpoint3] or [text_midpoint] |
| RAY |
[start, start + unit_vector] |
| XLINE |
[start - unit_vector, start + unit_vector] |
Entity Type Reference
LINE
| Key |
Type |
Description |
start |
(float, float, float) |
Start point |
end |
(float, float, float) |
End point |
ARC
| Key |
Type |
Description |
center |
(float, float, float) |
Center point |
radius |
float |
Radius |
start_angle |
float |
Start angle in degrees |
end_angle |
float |
End angle in degrees |
CIRCLE
| Key |
Type |
Description |
center |
(float, float, float) |
Center point |
radius |
float |
Radius |
LWPOLYLINE
| Key |
Type |
Description |
points |
list[(float, float, float)] |
Vertex points |
closed |
bool |
Whether the polyline is closed |
const_width |
float \| None |
Constant width |
bulges |
list[float] \| None |
Bulge values per vertex |
widths |
list[(float, float)] \| None |
Start/end widths per vertex |
POINT
| Key |
Type |
Description |
location |
(float, float, float) |
Point location |
ELLIPSE
| Key |
Type |
Description |
center |
(float, float, float) |
Center point |
major_axis |
(float, float, float) |
Major axis endpoint relative to center |
axis_ratio |
float |
Ratio of minor to major axis |
start_angle |
float |
Start parameter (radians) |
end_angle |
float |
End parameter (radians) |
TEXT
| Key |
Type |
Description |
insert |
(float, float, float) |
Insertion point |
text |
str |
Text content |
height |
float |
Text height |
rotation |
float |
Rotation angle in degrees |
MTEXT
| Key |
Type |
Description |
insert |
(float, float, float) |
Insertion point |
text |
str |
Text content |
char_height |
float |
Character height |
width |
float |
Reference rectangle width |
attachment_point |
int |
Attachment point code |
DIMENSION
The dxf dictionary for DIMENSION entities includes:
| Key |
Type |
Description |
dimtype |
str |
Subtype: LINEAR, RADIUS, DIAMETER, ALIGNED, ORDINATE, ANG3PT, ANG2LN |
text_midpoint |
(float, float, float) |
Dimension text midpoint |
defpoint |
(float, float, float) |
Definition point (dimension line) |
defpoint2 |
(float, float, float) |
First extension line origin |
defpoint3 |
(float, float, float) |
Second extension line origin |
text |
str |
Override text |
angle |
float |
Rotation angle in degrees |
actual_measurement |
float |
Computed measurement value |
ARC Angles
The high-level API returns ARC angles in degrees. The raw API (ezdwg.raw) returns angles in radians.