From 6f37f04ba49804f0cfbf4f26dbfc232b9d7b2de3 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Sun, 20 Dec 2020 12:17:55 -0600 Subject: [PATCH] support ellipse --- src/pixie/fileformats/svg.nim | 33 +++++++++++++++++++++++---------- tests/images/svg/ellipse01.png | Bin 0 -> 24487 bytes tests/images/svg/ellipse01.svg | 20 ++++++++++++++++++++ tests/test_svg.nim | 1 + 4 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 tests/images/svg/ellipse01.png create mode 100644 tests/images/svg/ellipse01.svg diff --git a/src/pixie/fileformats/svg.nim b/src/pixie/fileformats/svg.nim index b2ffc57..6681e92 100644 --- a/src/pixie/fileformats/svg.nim +++ b/src/pixie/fileformats/svg.nim @@ -186,22 +186,35 @@ proc draw( if ctx.stroke != ColorRGBA() and ctx.strokeWidth > 0: img.strokePath(path, ctx.stroke, ctx.strokeWidth, ctx.transform) - of "circle": + of "circle", "ellipse": # Reference for magic constant: # https://dl3.pushbulletusercontent.com/a3fLVC8boTzRoxevD1OgCzRzERB9z2EZ/unknown.png - let - ctx = decodeCtx(ctxStack[^1], node) + let ctx = decodeCtx(ctxStack[^1], node) + + var cx, cy: float32 # Default to 0.0 unless set by cx and cy on node + if node.attr("cx") != "": cx = parseFloat(node.attr("cx")) + if node.attr("cy") != "": cy = parseFloat(node.attr("cy")) - r = parseFloat(node.attr("r")) - magic = (4.0 * (-1.0 + sqrt(2.0)) / 3) * r + + var rx, ry: float32 + if node.tag == "circle": + rx = parseFloat(node.attr("r")) + ry = rx + else: + rx = parseFloat(node.attr("rx")) + ry = parseFloat(node.attr("ry")) + + let + magicX = (4.0 * (-1.0 + sqrt(2.0)) / 3) * rx + magicY = (4.0 * (-1.0 + sqrt(2.0)) / 3) * ry let path = newPath() - path.moveTo(cx + r, cy) - path.bezierCurveTo(cx + r, cy + magic, cx + magic, cy + r, cx, cy + r) - path.bezierCurveTo(cx - magic, cy + r, cx - r, cy + magic, cx - r, cy) - path.bezierCurveTo(cx - r, cy - magic, cx - magic, cy - r, cx, cy - r) - path.bezierCurveTo(cx + magic, cy - r, cx + r, cy - magic, cx + r, cy) + path.moveTo(cx + rx, cy) + path.bezierCurveTo(cx + rx, cy + magicY, cx + magicX, cy + ry, cx, cy + ry) + path.bezierCurveTo(cx - magicX, cy + ry, cx - rx, cy + magicY, cx - rx, cy) + path.bezierCurveTo(cx - rx, cy - magicY, cx - magicX, cy - ry, cx, cy - ry) + path.bezierCurveTo(cx + magicX, cy - ry, cx + rx, cy - magicY, cx + rx, cy) path.closePath() let d = $path diff --git a/tests/images/svg/ellipse01.png b/tests/images/svg/ellipse01.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b815a7b7a30a93b2b3572d46993589ad85df61 GIT binary patch literal 24487 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%0D3D(XLPYHUW%9YBmSOU7xY)jXU)`WxqYi7X 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 BdjtRg literal 0 HcmV?d00001 diff --git a/tests/images/svg/ellipse01.svg b/tests/images/svg/ellipse01.svg new file mode 100644 index 0000000..8403ca4 --- /dev/null +++ b/tests/images/svg/ellipse01.svg @@ -0,0 +1,20 @@ + + + Example ellipse01 - examples of ellipses + + + + + + + + + + + + diff --git a/tests/test_svg.nim b/tests/test_svg.nim index 9356964..2148145 100644 --- a/tests/test_svg.nim +++ b/tests/test_svg.nim @@ -7,6 +7,7 @@ const files = [ "rect01", "rect02", "circle01", + "ellipse01", "triangle01", "quad01", "Ghostscript_Tiger"