From ea8d6c1a6c866e4dca86e5899f72438d6652e0be Mon Sep 17 00:00:00 2001 From: Florian Festi Date: Wed, 6 Nov 2013 22:49:32 +0100 Subject: [PATCH] Add typetray.py --- typetray.py | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100755 typetray.py diff --git a/typetray.py b/typetray.py new file mode 100755 index 0000000..64ea8a8 --- /dev/null +++ b/typetray.py @@ -0,0 +1,113 @@ +#!/usr/bin/python + +from boxes import * + +class BottomEdge(FingerJointEdge): + def __init__(self, boxes, sections, slot=0): + FingerJointEdge.__init__(self, boxes, None) + self.sections = sections + self.slot = slot + + def _slot(self): + if self.slot: + self.boxes.corner(90) + self.boxes.edge(self.slot) + self.boxes.corner(-90) + self.boxes.edge(self.thickness) + self.boxes.corner(-90) + self.boxes.edge(self.slot) + self.boxes.corner(90) + else: + self.boxes.edge(self.thickness) + + def __call__(self, l, **kw): + for x in self.sections[:-1]: + self.boxes.fingerJointEdge(x) + self._slot() + self.boxes.fingerJointEdge(self.x[-1]) + +class TopEdge(BottomEdge): + + + margin = Edge.margin + width = Edge.width + + def __call__(self, l, **kw): + for x in self.sections[:-1]: + self.boxes.edge(x) + self._slot() + self.boxes.edge(self.x[-1]) + +class TypeTray(Boxes): + def __init__(self, x, y, h, **kw): + self.x, self.y, self.h = x, y, h + Boxes.__init__(self, width=sum(x)+sum(y)+50, height=sum(y)+2*h+50, **kw) + + def xSlots(self): + posx = -0.5 * self.thickness + for x in self.x[:-1]: + posx += x + self.thickness + posy = 0 + for y in self.y: + self.fingerHolesAt(posx, posy, y) + posy += y + self.thickness + + def ySlots(self): + posy = -0.5 * self.thickness + for y in self.y[:-1]: + posy += y + self.thickness + posx = 0 + for x in self.x: + self.fingerHolesAt(posy, posx, x) + posx += x + self.thickness + + def xHoles(self): + posx = -0.5 * self.thickness + for x in self.x[:-1]: + posx += x + self.thickness + self.fingerHolesAt(posx, 0, self.h) + + def yHoles(self): + posy = -0.5 * self.thickness + for y in self.y[:-1]: + posy += y + self.thickness + self.fingerHolesAt(posy, 0, self.h) + + + def render(self): + x = sum(self.x) + self.thickness * (len(self.x)-1) + y = sum(self.y) + self.thickness * (len(self.y)-1) + h = self.h + t = self.thickness + + self.moveTo(t, t) + self.rectangularWall(x, h, "Ffef", callback=[self.xHoles,], + move="right") + self.rectangularWall(y, h, "FFeF", callback=[self.yHoles,], + move="up") + self.rectangularWall(y, h, "FFeF", callback=[self.yHoles,]) + self.rectangularWall(x, h, "Ffef", callback=[self.xHoles,], + move="left up") + + self.rectangularWall(x, y, "ffff", + callback=[self.xSlots, self.ySlots], + move="right") + + for i in range(len(self.x)-1): + e = [BottomEdge(self, self.y, 0.5*h), "f", "e", "f"] + self.rectangularWall(y, h, e, + move="up") + for i in range(len(self.y)-1): + e = [BottomEdge(self, self.x), "f", + TopEdge(self, self.x, 0.5*h), "f"] + self.rectangularWall(x, h, e, + move="up") + + self.ctx.stroke() + self.surface.flush() + self.surface.finish() + +b = TypeTray([100, 100], [50, 50, 100, 100], 50, thickness=4.0) +b.edges["f"].settings.setValues(b.thickness, space=3, finger=3, + surroundingspaces=1) +b.render()