This commit is contained in:
treeform 2022-06-29 23:14:34 -07:00
parent de0600e1e2
commit 04abf707fa
4 changed files with 17 additions and 19 deletions

View file

@ -683,9 +683,8 @@ proc commandsToShapes(
ctrl2 * (-3*t3 + 3*t2) +
to * (t3)
proc computeDerv(at, ctrl1, ctrl2, to: Vec2, t: float32): Vec2 {.inline.} =
let
t2 = t*t
proc computeDeriv(at, ctrl1, ctrl2, to: Vec2, t: float32): Vec2 {.inline.} =
let t2 = t*t
at * (-3*t2 + 6*t - 3) +
ctrl1 * (9*t2 - 12*t + 3) +
ctrl2 * (-9*t2 + 6*t) +
@ -703,11 +702,11 @@ proc commandsToShapes(
let
midpoint = (prev + next) / 2
lineTangent = midpoint - prev
curveTangent = computeDerv(at, ctrl1, ctrl2, to, t + step / 2)
curveTangent = computeDeriv(at, ctrl1, ctrl2, to, t + step / 2)
curveTangentScaled = curveTangent.normalize() * lineTangent.length()
error = (midpoint - halfway).lengthSq +
(lineTangent - curveTangentScaled).lengthSq
if error > errorMarginSq:
error = (midpoint - halfway).lengthSq
errorTangent = (lineTangent - curveTangentScaled).lengthSq
if error + errorTangent > errorMarginSq:
next = halfway
halfway = compute(at, ctrl1, ctrl2, to, t + step / 4)
step /= 2

BIN
tests/paths/pathSwish.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

View file

@ -1,12 +0,0 @@
import chroma, pixie, pixie/fileformats/png, strformat
block:
let
image = newImage(100, 100)
pathStr = """
M 40 40 L 40 80 L 80 80 L 80 40 C 80 -20 40 100 40 40
"""
color = rgba(0, 0, 0, 255)
image.fill(rgba(255, 255, 255, 255))
image.fillPath(pathStr, color)
image.writeFile("tests/paths/pathSwish.png")

View file

@ -773,3 +773,14 @@ block:
mat3(),
NonZero
)
block:
let
image = newImage(100, 100)
pathStr = """
M 40 40 L 40 80 L 80 80 L 80 40 C 80 -20 40 100 40 40
"""
color = rgba(0, 0, 0, 255)
image.fill(rgba(255, 255, 255, 255))
image.fillPath(pathStr, color)
image.writeFile("tests/paths/pathSwish.png")