diff --git a/boxes/__init__.py b/boxes/__init__.py index 353d98d..1498181 100755 --- a/boxes/__init__.py +++ b/boxes/__init__.py @@ -21,6 +21,7 @@ from argparse import ArgumentParser import re from functools import wraps from boxes import edges +from boxes import svgutil ### Helpers @@ -173,22 +174,18 @@ class Boxes: "--burn", action="store", type=float, default=0.05, help="burn correction in mm") - def open(self, width, height): + def open(self): """ Prepare for rendering Call this function from your .render() method - - :param width: width of canvas in mm - :param height: height of canvas in mm - """ self.spacing = 2*self.burn + 0.5 * self.thickness self.fingerHoleEdgeWidth = 1.0 # multitudes of self.thickness self.bedBoltSettings = (3, 5.5, 2, 20, 15) #d, d_nut, h_nut, l, l1 self.hexHolesSettings = (5, 3, 'circle') # r, dist, style - self._init_surface(width, height) + self._init_surface(1000, 1000) self._buildObjects() def buildArgParser(self, *l): @@ -329,7 +326,7 @@ class Boxes: """Implement this method in your sub class. You will typically need to call .parseArgs() before calling this one""" - self.open(100, 100) + self.open() # Change settings and creat new Edges and part classes here raise NotImplemented self.close() @@ -385,6 +382,11 @@ class Boxes: self.surface.flush() self.surface.finish() + + svg = svgutil.SVGFile(self.output) + svg.getEnvelope() + svg.rewriteViewPort() + return f = open(self.output, "r+") s = f.read(1024) pos = s.find('pt"') @@ -1111,7 +1113,7 @@ class DemoBox(Boxes): def render(self): """ """ x, y, h, t = self.x, self.y, self.h, self.thickness - self.open(2*x+10*self.thickness, y+2*h+20*self.thickness) + self.open() self.ctx.save() self.moveTo(t, t) diff --git a/boxes/generators/_template.py b/boxes/generators/_template.py index 8fead5a..73e3d1a 100644 --- a/boxes/generators/_template.py +++ b/boxes/generators/_template.py @@ -32,8 +32,8 @@ class Box(Boxes): # adjust to the variables you want in the local scope x, y, h = self.x, self.y, self.h t = self.thickness - # Calculate canvas size and pass as width and height - self.open(width=x+y+40, height=y+2*h+50) + # Initialize canvas + self.open() # Change settings of default edges if needed. E.g.: self.edges["f"].settings.setValues(self.thickness, space=3, finger=3, diff --git a/boxes/generators/box.py b/boxes/generators/box.py index 8478a4c..208f093 100755 --- a/boxes/generators/box.py +++ b/boxes/generators/box.py @@ -29,7 +29,7 @@ class Box(Boxes): def render(self): x, y, h = self.x, self.y, self.h t = self.thickness - self.open(width=max(x+y,2*x)+10*t, height=y+2*h+12*t) + self.open() d2 = [edges.Bolts(2)] d3 = [edges.Bolts(3)] diff --git a/boxes/generators/box2.py b/boxes/generators/box2.py index 4a62214..8de63b9 100755 --- a/boxes/generators/box2.py +++ b/boxes/generators/box2.py @@ -32,7 +32,7 @@ class Box(Boxes): def render(self): x, y, h = self.x, self.y, self.h - self.open(width=x+y+40, height=y+2*h+50) + self.open() b = self.edges.get(self.bottom_edge, self.edges["F"]) t = self.edges.get(self.top_edge, self.edges["e"]) diff --git a/boxes/generators/box3.py b/boxes/generators/box3.py index 906d181..6e3e577 100755 --- a/boxes/generators/box3.py +++ b/boxes/generators/box3.py @@ -30,7 +30,7 @@ class Box(Boxes): x, y, h = self.x, self.y, self.h t = self.thickness - self.open(width=x+y+10*t, height=y+h+10*t) + self.open() d2 = [edges.Bolts(2)] d3 = [edges.Bolts(3)] diff --git a/boxes/generators/castle.py b/boxes/generators/castle.py index d960e51..c52045b 100755 --- a/boxes/generators/castle.py +++ b/boxes/generators/castle.py @@ -22,7 +22,7 @@ class Castle(Boxes): Boxes.__init__(self) def render(self, t_x=70, t_h=250, w1_x=300, w1_h=120, w2_x=100, w2_h=120): - self.open(800, 600) + self.open() s = edges.FingerJointSettings(self.thickness, relative=False, space = 10, finger=10, height=10, width=self.thickness) diff --git a/boxes/generators/drillbox.py b/boxes/generators/drillbox.py index 1368ac3..55d982d 100755 --- a/boxes/generators/drillbox.py +++ b/boxes/generators/drillbox.py @@ -53,7 +53,7 @@ in 0.5mm steps, 3 holes each size""" x, y, h = self.x, self.y, self.h t = self.thickness - self.open(width=x+y+40, height=3*y+2*h+16*t) + self.open() self.edges["f"].settings.setValues(self.thickness, space=3, finger=3, surroundingspaces=1) diff --git a/boxes/generators/flexbox.py b/boxes/generators/flexbox.py index 15bfb2c..22b4cc4 100755 --- a/boxes/generators/flexbox.py +++ b/boxes/generators/flexbox.py @@ -76,10 +76,7 @@ class FlexBox(boxes.Boxes): self.latchsize = 8 * self.thickness c4 = math.pi * r * 0.5 - width = 2*x + 2*y - 8*r + 4*c4 + 4*self.thickness - height = y + h + 8*self.thickness - - self.open(width, height) + self.open() self.moveTo(self.thickness, self.thickness) self.surroundingWall() diff --git a/boxes/generators/flexbox2.py b/boxes/generators/flexbox2.py index f7b8527..d14420e 100755 --- a/boxes/generators/flexbox2.py +++ b/boxes/generators/flexbox2.py @@ -71,10 +71,7 @@ class FlexBox(Boxes): self.c4 = c4 = math.pi * self.radius * 0.5 self.latchsize = 8*self.thickness - width = 2*self.x + self.y - 3*self.radius + 2*c4 + 7*self.thickness + self.latchsize # lock - height = self.y + self.h + 8*self.thickness - - self.open(width, height) + self.open() self.fingerJointSettings = (4, 4) diff --git a/boxes/generators/flexbox3.py b/boxes/generators/flexbox3.py index c25b80f..6b2d47d 100755 --- a/boxes/generators/flexbox3.py +++ b/boxes/generators/flexbox3.py @@ -109,7 +109,7 @@ class FlexBox(Boxes): width = 2*x + y - 2*r + c4 + 14*thickness + 3*h # lock height = y + z + 8*thickness - self.open(width, height) + self.open() self.edges["f"].settings.setValues( self.thickness, finger=2, space=2, surroundingspaces=1) diff --git a/boxes/generators/flextest.py b/boxes/generators/flextest.py index f4647e4..fbc5c0e 100755 --- a/boxes/generators/flextest.py +++ b/boxes/generators/flextest.py @@ -33,7 +33,7 @@ class FlexTest(Boxes): def render(self): x, y = self.x, self.y - self.open(x+60, y+20) + self.open() self.edges["X"].settings.setValues( self.thickness, relative=True, diff --git a/boxes/generators/folder.py b/boxes/generators/folder.py index 8b14e3b..5e1cd3a 100755 --- a/boxes/generators/folder.py +++ b/boxes/generators/folder.py @@ -31,7 +31,7 @@ class Folder(Boxes): def render(self): x, y, r, h = self.x, self.y, self.r, self.h c2 = math.pi * h - self.open(width=2*x+3*h+20, height=y+20) + self.open() self.moveTo(r+self.thickness, self.thickness) self.edge(x-r) self.edges["X"](c2, y) diff --git a/boxes/generators/lamp.py b/boxes/generators/lamp.py index 8cf58da..12ac1c6 100755 --- a/boxes/generators/lamp.py +++ b/boxes/generators/lamp.py @@ -77,7 +77,7 @@ class Lamp(Boxes): h : height box """ - self.open(width=1000, height=1000) + self.open() #self.edges["f"].settings = (5, 5) # XXX diff --git a/boxes/generators/magazinefile.py b/boxes/generators/magazinefile.py index ad139c0..86c2bf6 100755 --- a/boxes/generators/magazinefile.py +++ b/boxes/generators/magazinefile.py @@ -64,7 +64,7 @@ class Box(Boxes): self.hi = hi = self.hi or (h / 2.0) t = self.thickness - self.open(width=x+y+8*t, height=x+h+hi+4*t) + self.open() self.ctx.save() self.rectangularWall(x, h, "Ffef", move="up") diff --git a/boxes/generators/printer.py b/boxes/generators/printer.py index 1a7fa6c..a98206e 100755 --- a/boxes/generators/printer.py +++ b/boxes/generators/printer.py @@ -121,7 +121,7 @@ class Printer(Boxes): self.move(overallwidth, overallheight, move) def render(self): - self.open(650, 600) + self.open() self.edges["f"].settings.setValues(self.thickness, surroundingspaces=0) self.ctx.save() for i in range(3): diff --git a/boxes/generators/silverwarebox.py b/boxes/generators/silverwarebox.py index 5ecbdd4..1fb6ceb 100755 --- a/boxes/generators/silverwarebox.py +++ b/boxes/generators/silverwarebox.py @@ -70,7 +70,7 @@ using flex for rounded corners""" def render(self): x, y, h, r = 250, 250/1.618, 120, 30 - self.open(750, 450) + self.open() t = self.thickness b = self.burn diff --git a/boxes/generators/trayinsert.py b/boxes/generators/trayinsert.py index fa177a9..5350c78 100755 --- a/boxes/generators/trayinsert.py +++ b/boxes/generators/trayinsert.py @@ -28,8 +28,7 @@ class TrayInsert(Boxes): h = self.h t = self.thickness - self.open(width=max(x, y) + 4*t, - height=(len(self.sx)+len(self.sy)-2)*(h+t)+2*t) + self.open() self.moveTo(t, t) # Inner walls diff --git a/boxes/generators/traylayout.py b/boxes/generators/traylayout.py index 5f18e9c..5cb578a 100755 --- a/boxes/generators/traylayout.py +++ b/boxes/generators/traylayout.py @@ -105,8 +105,7 @@ class Layout(Boxes): for f in line: hasfloor |= f - self.open(max((lx+1)*sum(self.y), (ly+1)*sum(self.x))+lx*ly*4*t, - 2*self.h + hasfloor*sum(self.y) + 12*t) + self.open() self.edges["s"] = boxes.edges.Slot(self, self.hi/2.0) self.edges["C"] = boxes.edges.CrossingFingerHoleEdge(self, self.hi) diff --git a/boxes/generators/typetray.py b/boxes/generators/typetray.py index 93c5f09..af22f67 100755 --- a/boxes/generators/typetray.py +++ b/boxes/generators/typetray.py @@ -78,7 +78,7 @@ class TypeTray(Boxes): hi = self.hi = self.hi or h t = self.thickness - self.open(width=2*max(x,y)+10*t, height=(len(self.sx)+len(self.sy))*(h+2*t)+4*t) + self.open() self.moveTo(t, t) # outer walls