now parameter supports units will specify if not given

pull/75/head
Andy Port 2018-10-13 21:40:35 -07:00
parent 95179a6bfa
commit aa03a4aecb
1 changed files with 30 additions and 22 deletions

View File

@ -9,6 +9,7 @@ from xml.dom.minidom import parse as md_xml_parse
from svgwrite import Drawing, text as txt
from time import time
from warnings import warn
import re
# Internal dependencies
from .path import Path, Line, is_path_segment
@ -141,13 +142,18 @@ def disvg(paths=None, colors=None,
SVG (default is 600).
:param dimensions - The (x,y) display dimensions of the output SVG.
Using this will override the `mindim` parameter.
I.e. this specifies the `width` and `height` SVG attributes. Note that
these also can be used to specify units other than pixels. Using this
will override the `mindim` parameter.
:param viewbox - This specifies what rectangular patch of R^2 will be
viewable through the outputSVG. It should be input as a 4-tuple,
(min_x, min_y, width, height), or a string "min_x min_y width height".
This is different from the display dimension of the svg, which can be
set through mindim or dimensions.
:param viewbox - This specifies the coordinated system used in the svg.
The SVG `viewBox` attribute works together with the the `height` and
`width` attrinutes. Using these three attributes allows for shifting
and scaling of the SVG canvas without changing the any values other
than those in `viewBox`, `height`, and `width`. `viewbox` should be
input as a 4-tuple, (min_x, min_y, width, height), or a string
"min_x min_y width height". Using this will override the `mindim`
parameter.
:param attributes - a list of dictionaries of attributes for the input
paths. Note: This will override any other conflicting settings.
@ -233,9 +239,12 @@ def disvg(paths=None, colors=None,
if not isinstance(viewbox, str):
viewbox = '%s %s %s %s' % viewbox
if dimensions is None:
szx, szy = viewbox.split(' ')[2:4]
else:
szx, szy = dimensions
dimensions = viewbox.split(' ')[2:4]
elif dimensions:
dimensions = tuple(map(str, dimensions))
def strip_units(s):
return re.search('\d?\.?\d?', s).group()
viewbox = '0 0 %s %s' % tuple(map(strip_units, dimensions))
else:
if paths:
stuff2bound += paths
@ -282,25 +291,24 @@ def disvg(paths=None, colors=None,
dx += 2*margin_size*dx + extra_space_for_style
dy += 2*margin_size*dy + extra_space_for_style
viewbox = "%s %s %s %s" % (xmin, ymin, dx, dy)
if dimensions:
szx, szy = dimensions
else:
if dx > dy:
szx = str(mindim) + 'px'
szy = str(int(ceil(mindim * dy / dx))) + 'px'
else:
szx = str(int(ceil(mindim * dx / dy))) + 'px'
szy = str(mindim) + 'px'
dimensions = szx, szy
# Create an SVG file
if svg_attributes is not None:
szx = svg_attributes.get("width", szx)
szy = svg_attributes.get("height", szy)
dimensions[0] = svg_attributes.get("width", dimensions[0])
dimensions[1] = svg_attributes.get("height", dimensions[1])
debug = svg_attributes.get("debug", svgwrite_debug)
dwg = Drawing(filename=filename, size=(szx, szy), debug=debug,
dwg = Drawing(filename=filename, size=dimensions, debug=debug,
**svg_attributes)
else:
dwg = Drawing(filename=filename, size=(szx, szy), debug=svgwrite_debug,
dwg = Drawing(filename=filename, size=dimensions, debug=svgwrite_debug,
viewBox=viewbox)
# add paths