svg_path_editor.svg#
Classes#
2D point with |
|
Point used as target or vertex in an SVG path. |
|
Control point for Bézier segments with optional relation hints. |
|
Base class for a single SVG path command and its numeric values. |
|
Placeholder item used as a default reference owner for points. |
|
SVG |
|
SVG |
|
SVG |
|
SVG |
|
SVG |
|
SVG |
|
SVG |
|
SVG |
|
SVG |
|
SVG |
|
An SVG path as a sequence of |
Module Contents#
- class svg_path_editor.svg.Point(x, y)[source]#
2D point with
decimal.Decimalcoordinates.- x: decimal.Decimal#
- y: decimal.Decimal#
- __ne__(value, /)[source]#
Compare coordinates for inequality.
- Parameters:
value (object)
- Return type:
bool
- property vec2: Vec2#
Exact conversion to
Vec2.Coordinates are converted to SymPy rationals via
dec_to_rat().- Return type:
- property length: decimal.Decimal#
Euclidean norm \(‖v‖_2 = \sqrt{x^2 + y^2}\).
- Return type:
decimal.Decimal
- property normalized: Point#
Unit vector \(v / ‖v‖_2\).
The zero vector is returned unchanged.
- Return type:
- class svg_path_editor.svg.SvgPoint(x, y)[source]#
Bases:
svg_path_editor.geometry.PointPoint used as target or vertex in an SVG path.
Instances hold a back-reference to the
SvgItemthat owns them.
- class svg_path_editor.svg.SvgControlPoint(point, relations)[source]#
Bases:
SvgPointControl point for Bézier segments with optional relation hints.
The
relationslist can be used to store points that geometrically constrain this control point (e.g. endpoints of the segment).- sub_index: int = 0#
- class svg_path_editor.svg.SvgItem(values, relative)[source]#
Bases:
abc.ABCBase class for a single SVG path command and its numeric values.
- Parameters:
values (list[T])
relative (bool)
- _relative: bool#
- values: list[decimal.Decimal]#
- absolute_control_points: list[SvgControlPoint] = []#
- static make(raw_item)[source]#
Construct the appropriate subclass of
SvgItemfrom a parsed command and its parameter strings.- Parameters:
raw_item (list[str]) – List starting with the command letter followed by numeric parameters as strings (e.g.
["M", "0", "0"]).- Raises:
ValueError – If the item is empty or the command is invalid.
- Return type:
- static make_from(origin, previous, new_type)[source]#
Create a new
SvgItemof typenew_typefrom an existing item.The new item preserves the current target location and, where possible, the original control point geometry.
- refresh_absolute_points(origin, previous)[source]#
Recalculate absolute points from stored values and the previous item.
- property relative: bool#
Whether this command is stored in relative coordinates.
- Return type:
bool
- refresh_absolute_control_points(origin, previous_target)[source]#
Recalculate absolute control points.
The default implementation assumes there are no control points.
- reset_control_points(previous_target)[source]#
Reset control points to a default geometry between previous and target.
Subclasses for curve commands override this to compute reasonable defaults.
- Parameters:
previous_target (SvgItem) – Previous item in the path.
- Return type:
None
- clone()[source]#
Return a shallow clone of this item, retaining its subclass.
Values, relativity and
previous_pointare copied. Absolute points and control points need to be recomputed viarefresh(), as is done inSvgPath.clone().- Return type:
Self
- translate(x, y, force=False)[source]#
Translate in place.
Relative items are translated only if
forceis true; otherwise their stored deltas are left unchanged.
- translated(x, y, force=False)[source]#
Return a translated copy. See
translate()for details.
- rotate(ox, oy, degrees, force=False)[source]#
Rotate the item in place around
(ox, oy).For relative items, rotation is performed around
(0, 0)unlessforceis true.
- rotated(ox, oy, degrees, force=False)[source]#
Return a rotated copy around
(ox, oy). Seerotate()for details.
- set_target_location(pt)[source]#
Move the geometric target of this command to
pt.- Parameters:
pt (Point) – New target location in absolute coordinates.
- Return type:
None
- set_control_location(idx, pt)[source]#
Move control point
idxtopt.Only meaningful for commands storing Bézier handles.
- Parameters:
idx (int) – Index of the control point to move.
pt (Point) – New control point location in absolute coordinates.
- Return type:
None
- property control_locations: list[SvgControlPoint]#
Absolute control points associated with this item.
- Return type:
list[SvgControlPoint]
- get_type(ignore_is_relative=False)[source]#
Return the SVG command letter for this item (e.g.
"M"or"l").- Parameters:
ignore_is_relative (bool) – Always return the uppercase key regardless of
relative.- Return type:
str
- as_standalone_string()[source]#
Return a standalone path string for this command.
The result starts with an
Mto this command’sprevious_pointfollowed by the command itself.- Return type:
str
- as_string(decimals=None, minify=False, trailing_items=())[source]#
Serialize this command into an SVG path fragment.
Optionally additional same-typed
trailing_itemscan be appended in a compact form.- Parameters:
decimals (int | None) – Number of decimal places, or
Nonefor default.minify (bool) – Use a more compact numeric representation.
trailing_items (collections.abc.Iterable[SvgItem]) – Additional items of the same type to serialize in the same command group.
- Return type:
str
- __format__(format_spec)[source]#
Format this item using
as_string().The
format_speccan be used to control decimal places and minification:""(empty): useas_string()defaults".3":decimals=3"m":minify=True".3m"or"m.3":decimals=3,minify=True
Any other characters are currently ignored.
- Parameters:
format_spec (str) – Format specification string (e.g.
".3m").- Return type:
str
- __str__()[source]#
Return
as_string()with default options.- Return type:
str
- class svg_path_editor.svg.DummySvgItem[source]#
Bases:
SvgItemPlaceholder item used as a default reference owner for points.
- class svg_path_editor.svg.MoveTo(values, relative)[source]#
Bases:
SvgItemSVG
M/mcommand (move current point).- Parameters:
values (list[T])
relative (bool)
- key = 'M'#
- class svg_path_editor.svg.LineTo(values, relative)[source]#
Bases:
SvgItemSVG
L/lcommand (line to point).- Parameters:
values (list[T])
relative (bool)
- key = 'L'#
- class svg_path_editor.svg.CurveTo(values, relative)[source]#
Bases:
SvgItemSVG
C/ccommand (cubic Bézier curve).- Parameters:
values (list[T])
relative (bool)
- key = 'C'#
- class svg_path_editor.svg.SmoothCurveTo(values, relative)[source]#
Bases:
SvgItemSVG
S/scommand (smooth cubic Bézier curve).- Parameters:
values (list[T])
relative (bool)
- key = 'S'#
- refresh_absolute_control_points(origin, previous_target)[source]#
Recompute absolute control points for a smooth cubic Bézier segment.
- as_standalone_string()[source]#
Standalone SVG path fragment using
Mand an explicitC.- Return type:
str
- class svg_path_editor.svg.QuadraticBezierCurveTo(values, relative)[source]#
Bases:
SvgItemSVG
Q/qcommand (quadratic Bézier curve).- Parameters:
values (list[T])
relative (bool)
- key = 'Q'#
- class svg_path_editor.svg.SmoothQuadraticBezierCurveTo(values, relative)[source]#
Bases:
SvgItemSVG
T/tcommand (smooth quadratic Bézier curve).- Parameters:
values (list[T])
relative (bool)
- key = 'T'#
- class svg_path_editor.svg.ClosePath(values, relative)[source]#
Bases:
SvgItemSVG
Z/zcommand (close current subpath).- Parameters:
values (list[T])
relative (bool)
- key = 'Z'#
- class svg_path_editor.svg.HorizontalLineTo(values, relative)[source]#
Bases:
SvgItemSVG
H/hcommand (horizontal line).- Parameters:
values (list[T])
relative (bool)
- key = 'H'#
- rotate(ox, oy, degrees, force=False)[source]#
Rotate in place.
Only a rotation by 180 degrees affects pure horizontal segments. Other angles are handled at the path level by type changes.
- class svg_path_editor.svg.VerticalLineTo(values, relative)[source]#
Bases:
SvgItemSVG
V/vcommand (vertical line).- Parameters:
values (list[T])
relative (bool)
- key = 'V'#
- rotate(ox, oy, degrees, force=False)[source]#
Rotate in place.
Only a rotation by 180 degrees affects pure vertical segments. Other angles are handled at the path level by type changes.
- translate(x, y, force=False)[source]#
Translate in place.
For absolute vertical lines, only the y coordinate is translated.
- class svg_path_editor.svg.EllipticalArcTo(values, relative)[source]#
Bases:
SvgItemSVG
A/acommand (elliptical arc).- Parameters:
values (list[T])
relative (bool)
- key = 'A'#
- translate(x, y, force=False)[source]#
Translate in place.
For absolute arcs, only the arc target coordinates are translated.
- rotate(ox, oy, degrees, force=False)[source]#
Rotate in place.
The arc’s rotation angle and target coordinates are updated accordingly.
- scale(kx, ky)[source]#
Scale in place.
Radii, rotation angle, target and sweep flag are updated to reflect the scaling factors.
- to_geometry(*, n=None)[source]#
Return a parametric representation of this SVG elliptical arc.
The construction follows section B.2.4 of the SVG 2.0 specification (see https://svgwg.org/svg2-draft/implnote.html#ArcImplementationNotes) using SymPy for exact computations.
- Parameters:
n (Precision | None) – Optional precision passed to
evalf()for numeric evaluation.- Returns:
Parametric representation as
ParametricEllipticalArcor a straightLineif the radii are zero.- Return type:
- property geometry: ParametricEllipticalArc | Line#
Geometric representation of this arc using
to_geometry().- Return type:
- as_string(decimals=None, minify=False, trailing_items=())[source]#
Serialize this arc (and optionally trailing arcs) to an SVG path fragment.
- Parameters:
decimals (int | None) – Number of decimal places, or
Nonefor default.minify (bool) – Use a compact group representation.
trailing_items (collections.abc.Iterable[SvgItem]) – Additional arc items to serialize together.
- Return type:
str
- class svg_path_editor.svg.SvgPath(path)[source]#
An SVG path as a sequence of
SvgItem.- Parameters:
path (str | list[SvgItem])
- clone()[source]#
Return a deep clone of this path.
All contained items are cloned as well, and absolute positions are recomputed.
- Return type:
- rotate(ox, oy, degrees)[source]#
Rotate in place around
(ox, oy).May also normalize horizontal/vertical segments after rotation.
- property relative: bool#
Indicate whether all items are stored as relative commands.
Mixed paths (some absolute, some relative) return
False.- Return type:
bool
- with_relative(new_relative)[source]#
Return a new path with all items converted to the requested representation.
- Parameters:
new_relative (bool) – Target representation (
Truefor relative).- Return type:
- remove(item)[source]#
Remove the given item.
- Parameters:
item (SvgItem) – Item to remove.
- Raises:
ValueError – If the item is not present.
- Return type:
None
- insert(index, item)[source]#
Insert
itembeforeindex.- Parameters:
index (int) – Index before which to insert.
item (SvgItem) – Item to insert.
- Return type:
None
- as_string(decimals=None, minify=False)[source]#
Serialize the entire path to an SVG path data string.
- Parameters:
decimals (int | None) – Number of decimal places, or
Nonefor default.minify (bool) – Use a compact representation.
- Return type:
str
- property target_locations: list[SvgPoint]#
Final absolute points for each item in the path.
- Return type:
list[SvgPoint]
- property control_locations: list[SvgControlPoint]#
Flattened list of all absolute control points for the path.
- Return type:
list[SvgControlPoint]
- set_location(pt_reference, to)[source]#
Move the given point to
to.The reference must come from a previously queried point list (e.g.
target_locationsorcontrol_locations).
- refresh_absolute_positions()[source]#
Recompute absolute positions for all items in the path.
This should be called after structural or coordinate changes.
- Return type:
None
- __format__(format_spec)[source]#
Format this path using
as_string().The
format_speccan be used to control decimal places and minification, following the same rules asSvgItem.__format__():""(empty): useas_string()defaults".3":decimals=3"m":minify=True".3m"or"m.3":decimals=3,minify=True
Any other characters are currently ignored.
- Parameters:
format_spec (str) – Format specification string (e.g.
".3m").- Return type:
str
- __str__()[source]#
Return
as_string()with default options.- Return type:
str