From 10a10d3f272f5fda2f5ac257a2d82c50e5b22cc6 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg <guzba8@gmail.com> Date: Sat, 19 Dec 2020 21:59:43 -0600 Subject: [PATCH] svg more basic shapes, more transforms --- src/pixie/fileformats/svg.nim | 107 ++++++++++++++++++++++++++------ src/pixie/paths.nim | 6 ++ tests/images/svg/circle01.png | Bin 0 -> 13656 bytes tests/images/svg/circle01.svg | 13 ++++ tests/images/svg/line01.png | Bin 0 -> 8954 bytes tests/images/svg/line01.svg | 23 +++++++ tests/images/svg/polygon01.png | Bin 0 -> 22825 bytes tests/images/svg/polygon01.svg | 18 ++++++ tests/images/svg/polyline01.png | Bin 0 -> 11086 bytes tests/images/svg/polyline01.svg | 19 ++++++ tests/images/svg/rect01.png | Bin 0 -> 5347 bytes tests/images/svg/rect01.svg | 13 ++++ tests/images/svg/rect02.png | Bin 0 -> 22298 bytes tests/images/svg/rect02.svg | 17 +++++ tests/test_svg.nim | 6 ++ 15 files changed, 204 insertions(+), 18 deletions(-) create mode 100644 tests/images/svg/circle01.png create mode 100644 tests/images/svg/circle01.svg create mode 100644 tests/images/svg/line01.png create mode 100644 tests/images/svg/line01.svg create mode 100644 tests/images/svg/polygon01.png create mode 100644 tests/images/svg/polygon01.svg create mode 100644 tests/images/svg/polyline01.png create mode 100644 tests/images/svg/polyline01.svg create mode 100644 tests/images/svg/rect01.png create mode 100644 tests/images/svg/rect01.svg create mode 100644 tests/images/svg/rect02.png create mode 100644 tests/images/svg/rect02.svg diff --git a/src/pixie/fileformats/svg.nim b/src/pixie/fileformats/svg.nim index 90560f5..b2ffc57 100644 --- a/src/pixie/fileformats/svg.nim +++ b/src/pixie/fileformats/svg.nim @@ -49,22 +49,42 @@ proc decodeCtx(inherited: Ctx, node: XmlNode): Ctx = if transform == "": discard # Inherit else: - if transform.startsWith("matrix("): - let arr = transform[7..^2].split(",") - if arr.len != 6: - failInvalid() - var m = mat3() - m[0] = parseFloat(arr[0]) - m[1] = parseFloat(arr[1]) - m[3] = parseFloat(arr[2]) - m[4] = parseFloat(arr[3]) - m[6] = parseFloat(arr[4]) - m[7] = parseFloat(arr[5]) - result.transform = result.transform * m - else: + template failInvalidTransform(transform: string) = raise newException( - PixieError, "Unsupported SVG transform: " & transform & "." - ) + PixieError, "Unsupported SVG transform: " & transform & "." + ) + + var remaining = transform + while remaining.len > 0: + let index = remaining.find(")") + if index == -1: + failInvalidTransform(transform) + let f = remaining[0 .. index].strip() + remaining = remaining[index + 1 .. ^1] + + if f.startsWith("matrix("): + let arr = f[7 .. ^2].split(",") + if arr.len != 6: + failInvalidTransform(transform) + var m = mat3() + m[0] = parseFloat(arr[0]) + m[1] = parseFloat(arr[1]) + m[3] = parseFloat(arr[2]) + m[4] = parseFloat(arr[3]) + m[6] = parseFloat(arr[4]) + m[7] = parseFloat(arr[5]) + result.transform = result.transform * m + elif f.startsWith("translate("): + let + components = f[10 .. ^2].split(" ") + tx = parseFloat(components[0]) + ty = parseFloat(components[1]) + result.transform = result.transform * translate(vec2(tx, ty)) + elif f.startsWith("rotate("): + let angle = parseFloat(f[7 .. ^2]) * -PI / 180 + result.transform = result.transform * rotationMat3(angle) + else: + failInvalidTransform(transform) proc draw( img: Image, node: XmlNode, ctxStack: var seq[Ctx] @@ -99,6 +119,53 @@ proc draw( ) img.draw(strokeImg, bounds.xy) + of "line": + let + ctx = decodeCtx(ctxStack[^1], node) + x1 = parseFloat(node.attr("x1")) + y1 = parseFloat(node.attr("y1")) + x2 = parseFloat(node.attr("x2")) + y2 = parseFloat(node.attr("y2")) + + let path = newPath() + path.moveTo(x1, y1) + path.lineTo(x2, y2) + path.closePath() + + if ctx.fill != ColorRGBA(): + img.fillPath(path, ctx.fill, ctx.transform) + if ctx.stroke != ColorRGBA() and ctx.strokeWidth > 0: + img.strokePath(path, ctx.stroke, ctx.strokeWidth, ctx.transform) + + of "polyline", "polygon": + let + ctx = decodeCtx(ctxStack[^1], node) + points = node.attr("points") + + var vecs: seq[Vec2] + for pair in points.split(" "): + let parts = pair.split(",") + if parts.len != 2: + failInvalid() + vecs.add(vec2(parseFloat(parts[0]), parseFloat(parts[1]))) + + if vecs.len == 0: + failInvalid() + + let path = newPath() + path.moveTo(vecs[0]) + for i in 1 ..< vecs.len: + path.lineTo(vecs[i]) + + # The difference between polyline and polygon is whether we close the path + if node.tag == "polygon": + path.closePath() + + if ctx.fill != ColorRGBA(): + img.fillPath(path, ctx.fill, ctx.transform) + if ctx.stroke != ColorRGBA() and ctx.strokeWidth > 0: + img.strokePath(path, ctx.stroke, ctx.strokeWidth, ctx.transform) + of "rect": let ctx = decodeCtx(ctxStack[^1], node) @@ -106,12 +173,14 @@ proc draw( y = parseFloat(node.attr("y")) width = parseFloat(node.attr("width")) height = parseFloat(node.attr("height")) - path = newPath() + + let path = newPath() path.moveTo(x, y) - path.lineTo(x + width, x) + path.lineTo(x + width, y) path.lineTo(x + width, y + height) path.lineTo(x, y + height) path.closePath() + if ctx.fill != ColorRGBA(): img.fillPath(path, ctx.fill, ctx.transform) if ctx.stroke != ColorRGBA() and ctx.strokeWidth > 0: @@ -126,13 +195,15 @@ proc draw( cy = parseFloat(node.attr("cy")) r = parseFloat(node.attr("r")) magic = (4.0 * (-1.0 + sqrt(2.0)) / 3) * r - path = newPath() + + 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.closePath() + let d = $path if ctx.fill != ColorRGBA(): let (bounds, fillImg) = fillPathBounds(d, ctx.fill, ctx.transform) diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index eebebca..9500e05 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -828,11 +828,17 @@ proc moveTo*(path: Path, x, y: float32) = path.commands.add PathCommand(kind: Move, numbers: @[x, y]) path.at = vec2(x, y) +proc moveTo*(path: Path, pos: Vec2) = + path.moveTo(pos.x, pos.y) + proc lineTo*(path: Path, x, y: float32) = ## Connects the last point in the subpath to the (x, y) coordinates with a straight line. path.commands.add PathCommand(kind: Line, numbers: @[x, y]) path.at = vec2(x, y) +proc lineTo*(path: Path, pos: Vec2) = + path.lineTo(pos.x, pos.y) + proc bezierCurveTo*(path: Path, x1, y1, x2, y2, x3, y3: float32) = ## Adds a cubic Bézier curve to the path. It requires three points. The first two points are control points and the third one is the end point. The starting point is the last point in the current path, which can be changed using moveTo() before creating the Bézier curve. path.commands.add(PathCommand(kind: Cubic, numbers: @[ diff --git a/tests/images/svg/circle01.png b/tests/images/svg/circle01.png new file mode 100644 index 0000000000000000000000000000000000000000..d4d4ddfe41bc8acf69065ef33b0bc89ec43d14cb GIT binary patch literal 13656 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 VB3G}E0$)I1e&%(o>eGm?{tqfc^;iG^ literal 0 HcmV?d00001 diff --git a/tests/images/svg/circle01.svg b/tests/images/svg/circle01.svg new file mode 100644 index 0000000..bf71ce9 --- /dev/null +++ b/tests/images/svg/circle01.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" standalone="no"?> +<svg width="12cm" height="4cm" viewBox="0 0 1200 400" + xmlns="http://www.w3.org/2000/svg" version="1.1"> + <desc>Example circle01 - circle filled with red and stroked with blue</desc> + + <!-- Show outline of viewport using 'rect' element --> + <rect x="1" y="1" width="1198" height="398" + fill="none" stroke="blue" stroke-width="2"/> + + <circle cx="600" cy="200" r="100" + fill="red" stroke="blue" stroke-width="10" /> +</svg> + diff --git a/tests/images/svg/line01.png b/tests/images/svg/line01.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee524a9b0bb6942c4bffba8d16b518cd5eac1f0 GIT binary patch literal 8954 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 F_&?a1-}V3i literal 0 HcmV?d00001 diff --git a/tests/images/svg/line01.svg b/tests/images/svg/line01.svg new file mode 100644 index 0000000..bb1d2bf --- /dev/null +++ b/tests/images/svg/line01.svg @@ -0,0 +1,23 @@ +<?xml version="1.0" standalone="no"?> +<svg width="12cm" height="4cm" viewBox="0 0 1200 400" + xmlns="http://www.w3.org/2000/svg" version="1.1"> + <desc>Example line01 - lines expressed in user coordinates</desc> + + <!-- Show outline of viewport using 'rect' element --> + <rect x="1" y="1" width="1198" height="398" + fill="none" stroke="blue" stroke-width="2" /> + + <g stroke="green" > + <line x1="100" y1="300" x2="300" y2="100" + stroke-width="5" /> + <line x1="300" y1="300" x2="500" y2="100" + stroke-width="10" /> + <line x1="500" y1="300" x2="700" y2="100" + stroke-width="15" /> + <line x1="700" y1="300" x2="900" y2="100" + stroke-width="20" /> + <line x1="900" y1="300" x2="1100" y2="100" + stroke-width="25" /> + </g> +</svg> + diff --git a/tests/images/svg/polygon01.png b/tests/images/svg/polygon01.png new file mode 100644 index 0000000000000000000000000000000000000000..60d4d9163586d7bc77fd1d7f222465f90b57d130 GIT binary patch literal 22825 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 literal 0 HcmV?d00001 diff --git a/tests/images/svg/polygon01.svg b/tests/images/svg/polygon01.svg new file mode 100644 index 0000000..900cf65 --- /dev/null +++ b/tests/images/svg/polygon01.svg @@ -0,0 +1,18 @@ +<?xml version="1.0" standalone="no"?> +<svg width="12cm" height="4cm" viewBox="0 0 1200 400" + xmlns="http://www.w3.org/2000/svg" version="1.1"> + <desc>Example polygon01 - star and hexagon</desc> + + <!-- Show outline of viewport using 'rect' element --> + <rect x="1" y="1" width="1198" height="398" + fill="none" stroke="blue" stroke-width="2" /> + + <polygon fill="red" stroke="blue" stroke-width="10" + points="350,75 379,161 469,161 397,215 + 423,301 350,250 277,301 303,215 + 231,161 321,161" /> + <polygon fill="lime" stroke="blue" stroke-width="10" + points="850,75 958,137.5 958,262.5 + 850,325 742,262.6 742,137.5" /> +</svg> + diff --git a/tests/images/svg/polyline01.png b/tests/images/svg/polyline01.png new file mode 100644 index 0000000000000000000000000000000000000000..4b8d0c7aeee8230fd05c8472730c57d965c76146 GIT binary patch literal 11086 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 literal 0 HcmV?d00001 diff --git a/tests/images/svg/polyline01.svg b/tests/images/svg/polyline01.svg new file mode 100644 index 0000000..9ac958d --- /dev/null +++ b/tests/images/svg/polyline01.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" standalone="no"?> +<svg width="12cm" height="4cm" viewBox="0 0 1200 400" + xmlns="http://www.w3.org/2000/svg" version="1.1"> + <desc>Example polyline01 - increasingly larger bars</desc> + + <!-- Show outline of viewport using 'rect' element --> + <rect x="1" y="1" width="1198" height="398" + fill="none" stroke="blue" stroke-width="2" /> + + <polyline fill="none" stroke="blue" stroke-width="10" + points="50,375 + 150,375 150,325 250,325 250,375 + 350,375 350,250 450,250 450,375 + 550,375 550,175 650,175 650,375 + 750,375 750,100 850,100 850,375 + 950,375 950,25 1050,25 1050,375 + 1150,375" /> +</svg> + diff --git a/tests/images/svg/rect01.png b/tests/images/svg/rect01.png new file mode 100644 index 0000000000000000000000000000000000000000..7fcfcbb4233f8e8a2573be770b8a2e845a085350 GIT binary patch literal 5347 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 Q%|x-FrCiR5CH%ks4~nywssI20 literal 0 HcmV?d00001 diff --git a/tests/images/svg/rect01.svg b/tests/images/svg/rect01.svg new file mode 100644 index 0000000..d61727e --- /dev/null +++ b/tests/images/svg/rect01.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" standalone="no"?> +<svg width="12cm" height="4cm" viewBox="0 0 1200 400" + xmlns="http://www.w3.org/2000/svg" version="1.1"> + <desc>Example rect01 - rectangle with sharp corners</desc> + + <!-- Show outline of viewport using 'rect' element --> + <rect x="1" y="1" width="1198" height="398" + fill="none" stroke="blue" stroke-width="2"/> + + <rect x="400" y="100" width="400" height="200" + fill="yellow" stroke="navy" stroke-width="10" /> +</svg> + diff --git a/tests/images/svg/rect02.png b/tests/images/svg/rect02.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf92f2034de263c4eb9a4d86ab39bc779bc3e37 GIT binary patch literal 22298 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%0AF@u|r$hNpy+(Fz}rOCV)VNLTN#T9`Cl$x=Brn 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 CH=El4 literal 0 HcmV?d00001 diff --git a/tests/images/svg/rect02.svg b/tests/images/svg/rect02.svg new file mode 100644 index 0000000..b943ff4 --- /dev/null +++ b/tests/images/svg/rect02.svg @@ -0,0 +1,17 @@ +<?xml version="1.0" standalone="no"?> +<svg width="12cm" height="4cm" viewBox="0 0 1200 400" + xmlns="http://www.w3.org/2000/svg" version="1.1"> + <desc>Example rect02 - rounded rectangles</desc> + + <!-- Show outline of viewport using 'rect' element --> + <rect x="1" y="1" width="1198" height="398" + fill="none" stroke="blue" stroke-width="2"/> + + <rect x="100" y="100" width="400" height="200" rx="50" + fill="green" /> + + <g transform="translate(700 210) rotate(-30)"> + <rect x="0" y="0" width="400" height="200" rx="50" + fill="none" stroke="purple" stroke-width="30" /> + </g> +</svg> diff --git a/tests/test_svg.nim b/tests/test_svg.nim index 435fbae..9356964 100644 --- a/tests/test_svg.nim +++ b/tests/test_svg.nim @@ -1,6 +1,12 @@ import pixie/fileformats/svg, pixie, strformat const files = [ + "line01", + "polyline01", + "polygon01", + "rect01", + "rect02", + "circle01", "triangle01", "quad01", "Ghostscript_Tiger"