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/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 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+