From b22ee1f76047c046691965067ec62a1f354b401d Mon Sep 17 00:00:00 2001 From: Florian Festi Date: Mon, 18 Apr 2016 22:05:11 +0200 Subject: [PATCH] Replace Edge.width() with .startwidth() and .endwidth() to allow changes in the with of the edge. This is currently needed for the CompoundEdge but may be used by future edges, too. --- boxes/__init__.py | 15 +-- boxes/edges.py | 41 ++++++-- boxes/generators/flexbox3.py | 4 +- boxes/generators/magazinefile.py | 2 +- examples/box.svg | 14 +-- examples/box2.svg | 8 +- examples/box3.svg | 8 +- examples/castle.svg | 12 +-- examples/drillbox.svg | 170 +++++++++++++++---------------- examples/flexbox2.svg | 4 +- examples/flexbox3.svg | 6 +- examples/lamp.svg | 12 +-- examples/magazinefile.svg | 8 +- examples/traylayout.svg | 14 +-- examples/typetray.svg | 18 ++-- 15 files changed, 178 insertions(+), 158 deletions(-) diff --git a/boxes/__init__.py b/boxes/__init__.py index 94eb070..2d0eb68 100755 --- a/boxes/__init__.py +++ b/boxes/__init__.py @@ -983,8 +983,9 @@ class Boxes: left = self.edges.get(left, left) right = self.edges.get(right, right) - topwidth = top.width() - bottomwidth = bottom.width() + # XXX assumes startwidth == endwidth + topwidth = top.startwidth() + bottomwidth = bottom.startwidth() overallwidth = 2*x + 2*y - 8*r + 4*c4 + \ self.edges["d"].spacing() + self.edges["D"].spacing() @@ -1070,17 +1071,17 @@ class Boxes: self.ctx.save() self.moveTo(edges[-1].margin(), edges[0].margin()) for i, l in enumerate((x, y, x, y)): - self.edge(edges[i-1].width()) - self.cc(callback, i, y=edges[i].width()+self.burn) + self.edge(edges[i-1].endwidth()) + self.cc(callback, i, y=edges[i].startwidth()+self.burn) edges[i](l, bedBolts=self.getEntry(bedBolts, i), bedBoltSettings=self.getEntry(bedBoltSettings, i)) - self.edge(edges[i+1].width()) + self.edge(edges[i+1].startwidth()) self.corner(90-edges[i].endAngle()-edges[i+1].startAngle()) if holesMargin is not None: - self.moveTo(holesMargin+edges[-1].width(), - holesMargin+edges[0].width()) + self.moveTo(holesMargin+edges[-1].endwidth(), + holesMargin+edges[0].startwidth()) self.hexHolesRectangle(x-2*holesMargin, y-2*holesMargin) self.ctx.restore() self.ctx.stroke() diff --git a/boxes/edges.py b/boxes/edges.py index 82652d3..28bbff6 100644 --- a/boxes/edges.py +++ b/boxes/edges.py @@ -173,17 +173,20 @@ class BaseEdge: self.ctx.line_to(length, 0) self.ctx.translate(*self.ctx.get_current_point()) - def width(self): + def startwidth(self): """Amount of space the beginning of the edge is set below the inner space of the part """ return 0.0 + def endwidth(self): + return self.startwidth() + def margin(self): """Space needed right of the starting point""" return self.boxes.spacing def spacing(self): """Space the edge needs outside of the inner space of the part""" - return self.width() + self.margin() + return self.startwidth() + self.margin() def startAngle(self): """Not yet supported""" @@ -203,7 +206,7 @@ class OutSetEdge(BaseEdge): char = 'E' description = "Straight Edge (outset by thickness)" - def width(self): + def startwidth(self): return self.boxes.thickness class CompoundEdge(BaseEdge): @@ -216,8 +219,11 @@ class CompoundEdge(BaseEdge): self.lengths = lengths self.length = sum(lengths) - def width(self): - return self.types[0].width() + def startwidth(self): + return self.types[0].startwidth() + + def endwidth(self): + return self.types[-1].endwidth() def margin(self): return max((e.margin() for e in self.types)) @@ -225,9 +231,19 @@ class CompoundEdge(BaseEdge): def __call__(self, length, **kw): if length and abs(length - self.length) > 1E-5: raise ValueError("Wrong length for CompoundEdge") + lastwidth = self.types[0].startwidth() for e, l in zip(self.types, self.lengths): - # XXX different margins??? + diff = e.startwidth() - lastwidth + if diff > 1E-5: + self.boxes.corner(-90) + self.boxes.edge(diff) + self.boxes.corner(90) + elif diff < -1E-5: + self.boxes.corner(90) + self.boxes.edge(-diff) + self.boxes.corner(-90) e(l) + lastwidth = e.endwidth() ############################################################################# #### Slots @@ -264,8 +280,11 @@ class SlottedEdge(BaseEdge): self.sections = sections self.slots = slots - def width(self): - return self.edge.width() + def startwidth(self): + return self.edge.startwidth() + + def endwidth(self): + return self.edge.endwidth() def margin(self): return self.edge.margin() @@ -439,7 +458,7 @@ class FingerHoleEdge(BaseEdge): self.ctx.line_to(length, 0) self.ctx.translate(*self.ctx.get_current_point()) - def width(self): + def startwidth(self): """ """ return (self.fingerHoleEdgeWidth+1) * self.thickness @@ -520,7 +539,7 @@ class StackableEdge(BaseEdge): def _height(self): return self.settings.height + self.settings.holedistance + self.settings.thickness - def width(self): + def startwidth(self): return self._height() if self.bottom else 0 def margin(self): @@ -607,7 +626,7 @@ class DoveTailJointCounterPart(DoveTailJoint): positive = False - def width(self): + def startwidth(self): return self.settings.depth def margin(self): diff --git a/boxes/generators/flexbox3.py b/boxes/generators/flexbox3.py index 3d92f1c..c25b80f 100755 --- a/boxes/generators/flexbox3.py +++ b/boxes/generators/flexbox3.py @@ -39,10 +39,10 @@ class FlexBox(Boxes): edge1 = self.edges.get(edge1, edge1) edge2 = self.edges.get(edge2, edge2) if edge2: - self.edge(edge2.width()) + self.edge(edge2.startwidth()) self.corner(90) if edge1: - self.edge(edge1.width()) + self.edge(edge1.endwidth()) @restore def flexBoxSide(self, x, y, r, callback=None): diff --git a/boxes/generators/magazinefile.py b/boxes/generators/magazinefile.py index dd2c319..ad139c0 100755 --- a/boxes/generators/magazinefile.py +++ b/boxes/generators/magazinefile.py @@ -37,7 +37,7 @@ class Box(Boxes): lx = (w - 2*r) / 2.0 ly = 0 - e_w = self.edges["F"].width() + e_w = self.edges["F"].startwidth() self.moveTo(3, 3) self.edge(e_w) self.edges["F"](w) diff --git a/examples/box.svg b/examples/box.svg index 06c5289..68ea91c 100644 --- a/examples/box.svg +++ b/examples/box.svg @@ -1,11 +1,11 @@ - + - - - - - - + + + + + + diff --git a/examples/box2.svg b/examples/box2.svg index f72e911..0ef3c28 100644 --- a/examples/box2.svg +++ b/examples/box2.svg @@ -1,10 +1,10 @@ - - - - + + + + diff --git a/examples/box3.svg b/examples/box3.svg index 360f6ef..563e789 100644 --- a/examples/box3.svg +++ b/examples/box3.svg @@ -1,9 +1,9 @@ - - - - + + + + diff --git a/examples/castle.svg b/examples/castle.svg index a78cf50..e36b479 100644 --- a/examples/castle.svg +++ b/examples/castle.svg @@ -1,11 +1,11 @@ - - - - - - + + + + + + diff --git a/examples/drillbox.svg b/examples/drillbox.svg index f5f0d71..7d5ab96 100644 --- a/examples/drillbox.svg +++ b/examples/drillbox.svg @@ -41,138 +41,138 @@ - - - - - - + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - + diff --git a/examples/flexbox2.svg b/examples/flexbox2.svg index 5573321..2cb1e6c 100644 --- a/examples/flexbox2.svg +++ b/examples/flexbox2.svg @@ -1,7 +1,7 @@ - - + + diff --git a/examples/flexbox3.svg b/examples/flexbox3.svg index 18e9371..81352f7 100644 --- a/examples/flexbox3.svg +++ b/examples/flexbox3.svg @@ -1,8 +1,8 @@ - - - + + + diff --git a/examples/lamp.svg b/examples/lamp.svg index 86060a6..5782d5f 100644 --- a/examples/lamp.svg +++ b/examples/lamp.svg @@ -4,11 +4,11 @@ - - - - - - + + + + + + diff --git a/examples/magazinefile.svg b/examples/magazinefile.svg index 2254ede..19129a6 100644 --- a/examples/magazinefile.svg +++ b/examples/magazinefile.svg @@ -1,9 +1,9 @@ - - - - + + + + diff --git a/examples/traylayout.svg b/examples/traylayout.svg index 1a01b91..70a9b3b 100644 --- a/examples/traylayout.svg +++ b/examples/traylayout.svg @@ -5,12 +5,12 @@ - - - - - - - + + + + + + + diff --git a/examples/typetray.svg b/examples/typetray.svg index 2afe458..a0bfa8d 100644 --- a/examples/typetray.svg +++ b/examples/typetray.svg @@ -1,14 +1,14 @@ - - - - - - - - - + + + + + + + + +