hello @jansindl3r,
thanks for the example, I didn’t know about svg.path. (in order to use it inside DrawBot, you have to install it for Python 3.6 – see some problems importing noise module)
you can only have one segment for this formula
a contour is made out of several segments, so you need to loop over the contour and get (p1, p2, p3, p4) for each segment.
here’s an example, using the same getPoint() function from the gist:
steps = 13
r = 5
B = BezierPath()
B.text('a', (90, 120), fontSize=1400)
fill(0, 1, 1)
drawPath(B)
fill(1, 0, 0)
for contour in B.contours:
for i, segment in enumerate(contour):
if i == 0 and contour.open:
continue
# the first point in a segment
# is the last point from the previous segment
# tip: use modulo division!
p1 = contour[(i-1) % len(contour)][-1]
# curve segment
if len(segment) == 3:
p2, p3, p4 = segment
# line segment
else:
p2 = p1
p3 = p4 = segment[0]
# draw steps
for i in range(steps):
t = i * 1.0 / (steps - 1)
x, y = getPoint(t, p1, p2, p3, p4)
oval(x-r, y-r, r*2, r*2)
hope this helps!