diff --git a/svgpathtools/svg_to_paths.py b/svgpathtools/svg_to_paths.py index cf964e0..4023cd2 100644 --- a/svgpathtools/svg_to_paths.py +++ b/svgpathtools/svg_to_paths.py @@ -24,6 +24,7 @@ def path2pathd(path): return path['d'] + def ellipse2pathd(ellipse): """converts the parameters from an ellipse or a circle to a string for a Path object d-attribute""" @@ -91,17 +92,26 @@ def rect2pathd(rect): x, y = float(rect.get('x', 0)), float(rect.get('y', 0)) w, h = float(rect.get('width', 0)), float(rect.get('height', 0)) if 'rx' in rect or 'ry' in rect: - rx = float(rect.get('rx', 0)) - ry = float(rect.get('ry', 0)) - d = "M {} {} ".format(x + rx, y) # right of p0 - d += "L {} {} ".format(x + w - rx, y) # go to p1 - d += "A {} {} 0 0 1 {} {} ".format(rx, ry, x+w, y+ry) # arc for p1 - d += "L {} {} ".format(x+w, y+h-ry) # above p2 - d += "A {} {} 0 0 1 {} {} ".format(rx, ry, x+w-rx, y+h) # arc for p2 - d += "L {} {} ".format(x+rx, y+h) # right of p3 - d += "A {} {} 0 0 1 {} {} ".format(rx, ry, x, y+h-ry) # arc for p3 - d += "L {} {} ".format(x, y+ry) # below p0 - d += "A {} {} 0 0 1 {} {} z".format(rx, ry, x+rx, y) # arc for p0 + + # if only one, rx or ry, is present, use that value for both + # https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect + rx = rect.get('rx', None) + ry = rect.get('ry', None) + if rx is None: + rx = ry or 0. + if ry is None: + ry = rx or 0. + rx, ry = float(rx), float(ry) + + d = "M {} {} ".format(x + rx, y) # right of p0 + d += "L {} {} ".format(x + w - rx, y) # go to p1 + d += "A {} {} 0 0 1 {} {} ".format(rx, ry, x+w, y+ry) # arc for p1 + d += "L {} {} ".format(x+w, y+h-ry) # above p2 + d += "A {} {} 0 0 1 {} {} ".format(rx, ry, x+w-rx, y+h) # arc for p2 + d += "L {} {} ".format(x+rx, y+h) # right of p3 + d += "A {} {} 0 0 1 {} {} ".format(rx, ry, x, y+h-ry) # arc for p3 + d += "L {} {} ".format(x, y+ry) # below p0 + d += "A {} {} 0 0 1 {} {} z".format(rx, ry, x+rx, y) # arc for p0 return d x0, y0 = x, y