Skip to content

Instantly share code, notes, and snippets.

@stenson
Created November 8, 2022 17:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stenson/c3cee8a0cc250d54034bbca10778e6c6 to your computer and use it in GitHub Desktop.
Save stenson/c3cee8a0cc250d54034bbca10778e6c6 to your computer and use it in GitHub Desktop.
from coldtype import *
from coldtype.fx.skia import precompose
# inspired by https://mauricemeilleur.net/truchet_tiles
rs = random_series(0, 3)
rs2 = random_series()
tr = Rect(100)
tn = 8
at = AsciiTimeline(8, 30, """
<
[0 ] [0 ] [0] [0 ]
[1 ] [1 ] [1 ] [1 ]
[2 ] [2 ] [2 ] [2 ]
""")
eases = ["beo", "eeo", "ceo"]
colors = [hsl(0.17, 0.8), hsl(0.6, 0.8), hsl(0.95, 0.8)]
@animation((tr.w*tn, tr.w*tn), tl=at, bg=1)
def truchet1(f):
def rotate(i, p):
#row, col = i//tn, i%tn
(p.rotate(90*int(rs[i]))
.rotate(f.t.ki(i%3).ec(eases[i%3], rng=(0, 90)))
.f(colors[i%3])
.blendmode(BlendMode.Cycle(7))
)
return (P(tr)
.difference(P()
#.m(tr.pne).l(tr.pse).l(tr.pnw).cp()
.append(P().oval(tr).t(tr.w/2))
#.append(P().oval(tr).t(-tr.w/2))
)
.f(0)
.data(frame=tr)
.layer(tn)
.spread()
.layer(tn)
.stack()
.mapv(rotate)
.insert(0, P(f.a.r).f(0))
.ch(precompose(f.a.r)))
def release(passes):
from coldtype.renderable.animation import gifski
gifski(truchet1, passes)
print("/release")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment