Skip to content

Instantly share code, notes, and snippets.

@justvanrossum
justvanrossum / SquareVsLozenge.py
Created May 3, 2016 19:07
DrawBot: Create a simple animation with a grid of rotating squares.
# http://dailydrawbot.tumblr.com/post/143801148619/square-vs-lozenge
def rotatedSquare(x, y, squareSize, angle):
offsetSin = squareSize * sin(radians(angle))
save()
translate(x + offsetSin, 0)
rotate(angle)
rect(0, 0, squareSize, squareSize)
restore()
@justvanrossum
justvanrossum / GrowingCircles.py
Created September 23, 2016 15:37
DrawBot: Generate a progress-spinner-like animation with growing circles.
# Result:
# http://dailydrawbot.tumblr.com/post/150807743869/growing-circles
def circle(pt, radius):
diameter = 2 * radius
x, y = pt
oval(x - radius, y - radius, diameter, diameter)
nFrames = 50
canvasSize = 500
@justvanrossum
justvanrossum / LissajousGrid.py
Last active April 29, 2020 16:51
DrawBot: create a grid of Lissajous curve variations.
# http://dailydrawbot.tumblr.com/post/160078796339/lissajous-grid
# remade from https://twitter.com/fermatslibrary/status/857580490425020416
def lissajous(a, b, phase, radius):
numSteps = 340
points = []
for i in range(numSteps):
angle = 2 * pi * i / numSteps
x = radius * sin(a * angle + phase)
y = -radius * sin(b * angle)
@justvanrossum
justvanrossum / SierpinskiSquare.py
Last active December 13, 2017 17:40
DrawBot: infinite zoom into a Sierpinski Square (takes a while to render!)
# Slightly modified from
# https://twitter.com/petrvanblokland/status/860610270410018817
# by Petr van Blokland @petrvanblokland
def drawSierpinskiSquare(px, py, w, maxW, maxH):
if w < 1:
return
for x in range(3):
for y in range(3):
if x == 1 and y == 1:
@justvanrossum
justvanrossum / Ellipses.py
Last active October 4, 2020 23:36
DrawBot: create a simple loop of nested ellipses
# Result:
# http://dailydrawbot.tumblr.com/post/160364438359/ellipses
def drawEllipses(cx, cy, rx, ry, dx, dy, n, bw=0):
for i in range(n):
fill(bw)
oval(cx - rx, cy - ry, 2 * rx, 2 * ry)
rx -= dx
ry -= dy
bw = 1 - bw
@justvanrossum
justvanrossum / NestedBoxes.py
Last active August 6, 2019 15:14
DrawBot: create a simple animation with moving squares
# http://dailydrawbot.tumblr.com/post/163234641179/nested-boxes
def easeInOutQuad(t):
t *= 2
if t < 1:
return 0.5 * (t ** 2)
else:
t = 2 - t
return 1 - 0.5 * (t ** 2)
@justvanrossum
justvanrossum / screen_info.py
Created June 6, 2019 06:30
macOS/Python: Get dimension info about active screens
from AppKit import NSScreen, NSDeviceSize, NSDeviceResolution
from Quartz import CGDisplayScreenSize
for i, screen in enumerate(NSScreen.screens(), 1):
description = screen.deviceDescription()
pw, ph = description[NSDeviceSize].sizeValue()
rx, ry = description[NSDeviceResolution].sizeValue()
mmw, mmh = CGDisplayScreenSize(description["NSScreenNumber"])
scaleFactor = screen.backingScaleFactor()
pw *= scaleFactor
@justvanrossum
justvanrossum / PaulBrownPattern.py
Last active March 11, 2020 21:19
DrawBot script to recreate 'Untitled Computer Assisted Drawing' by Paul Brown from 1975
# Original:
# Paul Brown, 'Untitled Computer Assisted Drawing' (1975)
# The program was written in Fortran and drawn with Calcomp's drum pen plotter.
# https://twitter.com/satoshi_aizawa/status/1218786881631965186
def drawArc(center, radius, startAngle, endAngle):
bez = BezierPath()
bez.arc(center, radius, startAngle, endAngle, False)
drawPath(bez)
@justvanrossum
justvanrossum / generateOTTagsModule.py
Last active August 20, 2020 08:50
Scrape OT tag definitions and descriptions from OT spec site (script, language and feature tags)
import os
import re
def parse(data):
start = data.find("<tbody>")
end = data.find("</tbody>")
data = data[start+7:end]
for chunk in re.findall(r"<tr>.+?</tr>", data, re.DOTALL):
fields = re.findall(r"<td>(.+?)</td>", chunk, re.DOTALL)
@justvanrossum
justvanrossum / animated_color_grid.py
Created April 5, 2020 18:23
Animated Color Grid with DrawBot
canvasSize = 500
numSquares = 25
squareSize = canvasSize / numSquares
numFrames = 50
for frame in range(numFrames):
t = frame / numFrames
newPage(canvasSize, canvasSize)
frameDuration(1/25)