birdhouse.frink

Download or view birdhouse.frink in plain text format


// This makes a birdhouse from a Little Golden Book like The Poky Little Puppy.
// The only major variable is the angle of the roof theta.

maxw = 15.5 cm
maxh = 20.15 cm

theta = 30 deg

wf = maxw
we = wf/2
hr = we tan[theta]
h0 = maxh - hr

hpeak = maxh

l = hr / sin[theta]


println["l is " + format[l, "cm", 2]]


g = new graphics
g.stroke[.5 mm]

// Draw front/back of house
p = new polygon
p.addPoint[-wf/2, 0 cm]
p.addPoint[wf/2, 0 cm]
p.addPoint[wf/2, -h0]
p.addPoint[0 cm, -hpeak]
p.addPoint[-wf/2, -h0]

println["Side height is " + format[h0, "cm", 2]]

g.add[p]

g.drawEllipseCenter[0 cm, -6.8 cm, 1.5 in, 1.5 in]

// Draw book cover
lroof = maxw
wr = lroof cos[theta]
hr = hpeak - lroof sin[theta]


// Draw wood roof
lwoodroof = maxw - 1 cm
wr1 = lwoodroof cos[theta]
hr1 = hpeak - lwoodroof sin[theta]
g.color[0,0,0,.5]

thickness = 6 mm
g.stroke[thickness]
voffset = thickness cos[theta]
//g.line[0 cm, -hpeak - 1/2 voffset, wr1, -hr1 - 1/2 voffset ]
//g.line[0 cm, -hpeak - 1/2 voffset, -wr1, -hr1 - 1/2 voffset]

g.stroke[1 mm]
g.color[0,0,0]
//g.line[0 cm, -hpeak - voffset,   wr, -hr - voffset]
//g.line[0 cm, -hpeak - voffset , -wr, -hr - voffset]

g.show[]


// Draw side
depth = maxw
g2 = new graphics
g2.stroke[.5 mm]
g2.drawRectSides[-depth/2 + thickness, -h0, depth/2 - thickness, 0 cm]
g2.font["SansSerif", 1 cm]
g2.text["side", 0 cm, -h0/2]
g2.show[]

// Draw roof
dwoodroof = maxh - 2 cm
g3 = new graphics
g3.stroke[.5 mm]
g3.drawRectSides[-dwoodroof / 2, lwoodroof, dwoodroof / 2, 0 cm]
g3.font["SansSerif", 1 cm]
g3.text["roof", 0 cm, lwoodroof / 2]
g3.show[]


// Draw floor
g4 = new graphics
g4.stroke[.5 mm]
wfloor = maxw + 4 cm
g4.drawRectCenter[0 cm, 0 cm, wfloor, wfloor]
g4.font["SansSerif", 1 cm]
g4.text["floor", 0 cm, 0 cm]
g4.show[]

// Draw felt under floor
wfelt = wfloor - 1 cm
g6 = new graphics
g6.drawRectCenter[0 cm, 0 cm, wfelt, wfelt]
g6.stroke[.5 mm]
g6.font["SansSerif", 1 cm]
g6.text["felt", 0 cm, 0 cm]
g6.show[]

// Draw supports
g5 = new graphics
g5.stroke[.5 mm]
ps = new polygon

// Width of support
ws = 13 mm
wout = we - thickness
dout = wout tan[theta]
hout = hpeak - dout

win = wout - ws
din = win tan[theta]
hin = hpeak - din

ps.addPoint[0 cm, 0 cm]
ps.addPoint[ws, 0 cm]
ps.addPoint[ws, -hout]
ps.addPoint[0 cm, -hin]

g5.add[ps]
g5.show[]


Download or view birdhouse.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19970 days, 9 hours, 32 minutes ago.