#coding:utf-8 # Author: mozman # Purpose: svg path element # Created: 08.09.2010 # License: MIT License from svgwrite.base import BaseElement from svgwrite.utils import strlist from svgwrite.mixins import Presentation, Markers, Transform class Path(BaseElement, Transform, Presentation, Markers): """ The <path> element represent the outline of a shape which can be filled, stroked, used as a clipping path, or any combination of the three. """ elementname = 'path' def __init__(self, d=None, **extra): """ :param `iterable` d: *coordinates*, *length* and *commands* :param dict attribs: additional SVG attributes :param extra: additional SVG attributes as keyword-arguments """ super(Path, self).__init__(**extra) self.commands = [] self.push(d) if self.debug: self.validator.check_all_svg_attribute_values(self.elementname, self.attribs) def push(self, *elements): """ Push commands and coordinates onto the command stack. :param `iterable` elements: *coordinates*, *length* and *commands* """ self.commands.extend(elements) @staticmethod def arc_flags(large_arc=True, angle_dir='+'): large_arc_flag = int(large_arc) sweep_flag = {'+': 1, '-': 0}[angle_dir] return "%d,%d" % (large_arc_flag, sweep_flag) def push_arc(self, target, rotation, r, large_arc=True, angle_dir='+', absolute=False): """ Helper function for the elliptical-arc command. see SVG-Reference: http://www.w3.org/TR/SVG11/paths.html#PathData :param 2-tuple target: *coordinate* of the arc end point :param number rotation: x-axis-rotation of the ellipse in degrees :param number|2-tuple r: radii rx, ry when r is a *2-tuple* or rx=ry=r if r is a *number* :param bool large_arc: draw the arc sweep of greater than or equal to 180 degrees (**large-arc-flag**) :param angle_dir: ``'+|-'`` ``'+'`` means the arc will be drawn in a "positive-angle" direction (**sweep-flag**) :param bool absolute: indicates that target *coordinates* are absolute else they are relative to the current point """ self.push({True: 'A', False: 'a'}[absolute]) if isinstance(r, (float, int)): self.push(r, r) else: self.push(r) self.push(rotation) self.push(Path.arc_flags(large_arc, angle_dir)) self.push(target) def get_xml(self): """ Get the XML representation as `ElementTree` object. :return: XML `ElementTree` of this object and all its subelements """ self.attribs['d'] = str(strlist(self.commands, ' ')) return super(Path, self).get_xml()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
data | Folder | 0755 |
|
|
extensions | Folder | 0755 |
|
|
__init__.py | File | 2.45 KB | 0644 |
|
animate.py | File | 6.51 KB | 0644 |
|
base.py | File | 8.42 KB | 0644 |
|
container.py | File | 10.49 KB | 0644 |
|
drawing.py | File | 5.17 KB | 0644 |
|
elementfactory.py | File | 2.24 KB | 0644 |
|
etree.py | File | 1.33 KB | 0644 |
|
filters.py | File | 7.81 KB | 0644 |
|
gradients.py | File | 4.59 KB | 0644 |
|
image.py | File | 2.43 KB | 0644 |
|
masking.py | File | 1.81 KB | 0644 |
|
mixins.py | File | 10.5 KB | 0644 |
|
params.py | File | 1.86 KB | 0644 |
|
path.py | File | 2.78 KB | 0644 |
|
pattern.py | File | 1.93 KB | 0644 |
|
shapes.py | File | 5.19 KB | 0644 |
|
solidcolor.py | File | 1.69 KB | 0644 |
|
text.py | File | 7.95 KB | 0644 |
|
utils.py | File | 7.25 KB | 0644 |
|
validator2.py | File | 6.06 KB | 0644 |
|
version.py | File | 1.09 KB | 0644 |
|