Source code for svgen.element.line

"""
svgen - A module for the 'line' element.
"""

# built-in
from typing import Union

# internal
from svgen.attribute import PossibleAttributes, attributes
from svgen.cartesian.mutate import Translation
from svgen.cartesian.point import Point
from svgen.element import Element


[docs] class Line(Element): """A definition of a line.""" def __init__( self, p1: Point, p2: Point, attrs: PossibleAttributes = None, **extra ) -> None: """Initialize this line.""" self.p1 = p1.with_index(1) self.p2 = p2.with_index(2) real_attrs = attributes(attrs) real_attrs.extend( [ self.p1.x_attr, self.p1.y_attr, self.p2.x_attr, self.p2.y_attr, ] ) super().__init__(attrib=real_attrs, **extra)
[docs] def translate( self, move: Union[Translation, float], *args, **kwargs ) -> "Line": """Move a rectangle by a given translation.""" move = Translation.normalize(move, *args, **kwargs) return Line(self.p1.translate(move), self.p2.translate(move))
[docs] @staticmethod def create( x2: float, y2: float, x1: float = 0.0, y1: float = 0.0, attrs: PossibleAttributes = None, **extra, ) -> "Line": """Create a line.""" return Line(Point(x1, y1), Point(x2, y2), attrs, **extra)
[docs] def line( x2: float, y2: float, x1: float = 0.0, y1: float = 0.0, attrs: PossibleAttributes = None, **extra, ) -> Line: """Create a line.""" return Line.create(x2, y2, x1, y1, attrs, **extra)