48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
# robothon06
|
|
# rasterise the shape in glyph "A"
|
|
# and draw boxes in a new glyph named "A.silly"
|
|
#
|
|
|
|
from robofab.world import CurrentFont, CurrentGlyph
|
|
|
|
sourceGlyph = "a"
|
|
|
|
f = CurrentFont()
|
|
source = f[sourceGlyph]
|
|
|
|
# find out how big the shape is from the glyph.box attribute
|
|
xMin, yMin, xMax, yMax = source.box
|
|
|
|
# create a new glyph
|
|
dest = f.newGlyph(sourceGlyph+".silly")
|
|
dest.width = source.width
|
|
|
|
# get a pen to draw in the new glyph
|
|
myPen = dest.getPen()
|
|
|
|
# a function which draws a rectangle at a specified place
|
|
def drawRect(pen, x, y, size=50):
|
|
pen.moveTo((x-.5*size, y-.5*size))
|
|
pen.lineTo((x+.5*size, y-.5*size))
|
|
pen.lineTo((x+.5*size, y+.5*size))
|
|
pen.lineTo((x-.5*size, y+.5*size))
|
|
pen.closePath()
|
|
|
|
# the size of the raster unit
|
|
resolution = 30
|
|
|
|
# draw from top to bottom
|
|
yValues = range(yMin, yMax, resolution)
|
|
yValues.reverse()
|
|
|
|
# go for it!
|
|
for y in yValues:
|
|
for x in range(xMin, xMax, resolution):
|
|
# check the source glyph is white or black at x,y
|
|
if source.pointInside((x, y)):
|
|
drawRect(myPen, x, y, resolution-5)
|
|
# update for each line if you like the animation
|
|
# otherwise move the update() out of the loop
|
|
dest.update()
|
|
|