diff --git a/boxes/generators/dividertray.py b/boxes/generators/dividertray.py
index 2b9069a..fc16f35 100644
--- a/boxes/generators/dividertray.py
+++ b/boxes/generators/dividertray.py
@@ -19,7 +19,7 @@ from __future__ import annotations
import math
from functools import partial
-from boxes import Boxes, edges, boolarg
+from boxes import Boxes, edges, boolarg, lids
class NotchSettings(edges.Settings):
@@ -94,6 +94,7 @@ You will likely need to cut each of the dividers you want multiple times.
Boxes.__init__(self)
self.addSettingsArgs(edges.FingerJointSettings)
self.addSettingsArgs(edges.HandleEdgeSettings)
+ self.addSettingsArgs(lids.LidSettings)
self.buildArgParser("sx", "sy", "h", "outside")
self.addSettingsArgs(SlotSettings)
self.addSettingsArgs(NotchSettings)
@@ -194,6 +195,8 @@ You will likely need to cut each of the dividers you want multiple times.
side_wall_length, self.h, [be, "f", se, "f"], move="up", label="Sidepiece " + str(_ + 1)
)
+ self.lid(facing_wall_length, side_wall_length)
+
# Switch to right side of the file
self.ctx.restore()
self.rectangularWall(
diff --git a/boxes/generators/drillbox.py b/boxes/generators/drillbox.py
index 34c646d..6cb73c7 100644
--- a/boxes/generators/drillbox.py
+++ b/boxes/generators/drillbox.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
from boxes import Boxes, edges, Color, ArgparseEdgeType
-from boxes.lids import _TopEdge
+from boxes.lids import _TopEdge, LidSettings
class DrillBox(_TopEdge):
"""A parametrized box for drills"""
@@ -32,6 +32,7 @@ class DrillBox(_TopEdge):
self.addSettingsArgs(edges.RoundedTriangleEdgeSettings, outset=1)
self.addSettingsArgs(edges.StackableSettings)
self.addSettingsArgs(edges.MountingSettings)
+ self.addSettingsArgs(LidSettings)
self.argparser.add_argument(
"--top_edge", action="store",
type=ArgparseEdgeType("eStG"), choices=list("eStG"),
@@ -125,3 +126,4 @@ class DrillBox(_TopEdge):
x, y, "ffff",
callback=[lambda: self.drillholes(description=True)],
move="right")
+ self.lid(x, y, self.top_edge)
diff --git a/boxes/generators/gridfinitybase.py b/boxes/generators/gridfinitybase.py
index 927a6ce..2f870c6 100644
--- a/boxes/generators/gridfinitybase.py
+++ b/boxes/generators/gridfinitybase.py
@@ -15,6 +15,7 @@
# along with this program. If not, see .
from boxes import *
+from boxes import lids
class GridfinityBase(Boxes):
"""A parameterized Gridfinity base"""
@@ -28,6 +29,7 @@ class GridfinityBase(Boxes):
def __init__(self) -> None:
Boxes.__init__(self)
self.addSettingsArgs(edges.FingerJointSettings, space=4, finger=4)
+ self.addSettingsArgs(lids.LidSettings)
self.argparser.add_argument("--x", type=int, default=3, help="number of grids in X direction")
self.argparser.add_argument("--y", type=int, default=2, help="number of grids in Y direction")
self.argparser.add_argument("--h", type=float, default=7*3, help="height of sidewalls of the tray (mm)")
@@ -69,23 +71,22 @@ class GridfinityBase(Boxes):
b = self.edges.get(self.bottom_edge, self.edges["F"])
sideedge = "F" # if self.vertical_edges == "finger joints" else "h"
- with self.saved_context():
- self.rectangularWall(x, h, [b, sideedge, t1, sideedge],
- ignore_widths=[1, 6], move="up")
- self.rectangularWall(x, h, [b, sideedge, t3, sideedge],
- ignore_widths=[1, 6], move="up")
-
- if self.bottom_edge != "e":
- self.rectangularWall(x, y, "ffff", move="up")
-
- self.rectangularWall(x, h, [b, sideedge, t3, sideedge],
- ignore_widths=[1, 6], move="right only")
+ self.rectangularWall(x, h, [b, sideedge, t1, sideedge],
+ ignore_widths=[1, 6], move="right")
self.rectangularWall(y, h, [b, "f", t2, "f"],
ignore_widths=[1, 6], move="up")
self.rectangularWall(y, h, [b, "f", t4, "f"],
- ignore_widths=[1, 6], move="up")
+ ignore_widths=[1, 6], move="")
+ self.rectangularWall(x, h, [b, sideedge, t3, sideedge],
+ ignore_widths=[1, 6], move="left up")
+
+ if self.bottom_edge != "e":
+ self.rectangularWall(x, y, "ffff", move="up")
+
return
def render(self):
self.create_base_plate()
self.create_tray()
+ self.lid(self.x*self.pitch + 2*self.m,
+ self.y*self.pitch + 2*self.m)
diff --git a/boxes/generators/gridfinitytraylayout.py b/boxes/generators/gridfinitytraylayout.py
index d0a2253..e815f4a 100644
--- a/boxes/generators/gridfinitytraylayout.py
+++ b/boxes/generators/gridfinitytraylayout.py
@@ -2,7 +2,7 @@ import boxes
from boxes import Boxes
from boxes.generators.traylayout import TrayLayout
from boxes.Color import Color
-from boxes import restore
+from boxes import restore, lids
class GridfinityTrayLayout(TrayLayout):
"""A Gridfinity Tray Generator based on TrayLayout"""
@@ -25,6 +25,7 @@ this compartment.
def __init__(self) -> None:
Boxes.__init__(self)
self.addSettingsArgs(boxes.edges.FingerJointSettings)
+ self.addSettingsArgs(lids.LidSettings)
self.buildArgParser(h=50)
self.outside = True # We're *always* outside for gridfinity
self.pitch = 42.0 # gridfinity pitch is defined as 42.
@@ -103,9 +104,13 @@ this compartment.
self.prepare()
self.walls()
+ with self.saved_context():
+ self.base_plate(callback=[self.baseplate_etching],
+ move="mirror right")
+ foot = self.opening - self.opening_margin
+ for i in range(min(self.nx * self.ny, 4)):
+ self.rectangularWall(foot, foot, move="right")
self.base_plate(callback=[self.baseplate_etching],
- move="mirror right")
- foot = self.opening - self.opening_margin
- for i in range(min(self.nx * self.ny, 4)):
- self.rectangularWall(foot, foot, move="right")
-
+ move="up only")
+ self.lid(sum(self.x) + (len(self.x)-1) * self.thickness,
+ sum(self.y) + (len(self.y)-1) * self.thickness)
diff --git a/boxes/generators/smallpartstray.py b/boxes/generators/smallpartstray.py
index e8f9929..f2ada5a 100644
--- a/boxes/generators/smallpartstray.py
+++ b/boxes/generators/smallpartstray.py
@@ -15,6 +15,7 @@
# along with this program. If not, see .
from boxes import *
+from boxes import lids
from boxes.edges import CompoundEdge
class SmallPartsTray(Boxes):
@@ -27,6 +28,7 @@ class SmallPartsTray(Boxes):
self.addSettingsArgs(edges.FingerJointSettings)
# self.addSettingsArgs(edges.StackableSettings)
+ self.addSettingsArgs(lids.LidSettings)
self.buildArgParser(sx="50*3", y=100, h=30, outside=True)
self.argparser.add_argument(
@@ -243,7 +245,11 @@ class SmallPartsTray(Boxes):
if self.two_sided:
- for l in self.sx:
- self.render_simple_tray_divider(l, h, move="right")
+ with self.saved_context():
+ for l in self.sx:
+ self.render_simple_tray_divider(l, h, move="right")
- self.partsMatrix(len(self.sx), 0, "right", self.render_simple_tray_divider_feet)
+ self.partsMatrix(len(self.sx), 0, "right", self.render_simple_tray_divider_feet)
+ self.render_simple_tray_divider(l, h, move="up only")
+
+ self.lid(x, y)
diff --git a/boxes/generators/smallpartstray2.py b/boxes/generators/smallpartstray2.py
index 5fbad81..19e6526 100644
--- a/boxes/generators/smallpartstray2.py
+++ b/boxes/generators/smallpartstray2.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
from boxes import *
-from boxes.lids import _TopEdge
+from boxes.lids import _TopEdge, LidSettings
class TopEdge(edges.BaseEdge):
@@ -55,6 +55,7 @@ If there are no inner front to back walls just add everything to one side wall a
Boxes.__init__(self)
self.addTopEdgeSettings(fingerjoint={"surroundingspaces": 1.0},
roundedtriangle={"outset" : 1})
+ self.addSettingsArgs(LidSettings)
self.buildArgParser("sx", "sy", "hi", "outside", h=30)
# "bottom_edge", "top_edge")
self.argparser.add_argument(
@@ -178,7 +179,6 @@ If there are no inner front to back walls just add everything to one side wall a
callback=[self.fingerHolesCB(self.sx, hi-t2)],
move="up", label="floor front side")
floors.append(hi-t2)
- print(y, sum(floors), floors)
# Inner walls
@@ -198,6 +198,7 @@ If there are no inner front to back walls just add everything to one side wall a
# top / lid
self.drawLid(x, y, self.top_edge) # XXX deal with front
+ self.lid(x, y, self.top_edge)
self.ctx.restore()
self.rectangularWall(x, hi, "ffff", move="right only")
diff --git a/boxes/generators/traylayout.py b/boxes/generators/traylayout.py
index b119456..75c2cc8 100644
--- a/boxes/generators/traylayout.py
+++ b/boxes/generators/traylayout.py
@@ -17,7 +17,7 @@ from __future__ import annotations
import boxes
from boxes import *
-
+from boxes import lids
class TrayLayoutFile(Boxes):
"""Generate a layout file for a typetray."""
@@ -101,6 +101,7 @@ You can replace the space characters representing the floor by a "X" to remove t
def __init__(self) -> None:
super().__init__()
self.addSettingsArgs(boxes.edges.FingerJointSettings)
+ self.addSettingsArgs(lids.LidSettings)
self.buildArgParser("h", "hi", "outside", "sx", "sy")
if self.UI == "web":
self.argparser.add_argument(
@@ -452,4 +453,6 @@ You can replace the space characters representing the floor by a "X" to remove t
def render(self) -> None:
self.prepare()
self.walls()
- self.base_plate()
+ self.base_plate(move="up")
+ self.lid(sum(self.x) + (len(self.x)-1) * self.thickness,
+ sum(self.y) + (len(self.y)-1) * self.thickness)
diff --git a/boxes/generators/typetray.py b/boxes/generators/typetray.py
index ec98bc2..c9cfc3b 100644
--- a/boxes/generators/typetray.py
+++ b/boxes/generators/typetray.py
@@ -15,7 +15,7 @@
# along with this program. If not, see .
from boxes import *
-from boxes.lids import _TopEdge
+from boxes.lids import _TopEdge, LidSettings
class TypeTray(_TopEdge):
"""Type tray - allows only continuous walls"""
@@ -26,6 +26,7 @@ class TypeTray(_TopEdge):
Boxes.__init__(self)
self.addTopEdgeSettings(fingerjoint={"surroundingspaces": 0.5},
roundedtriangle={"outset" : 1})
+ self.addSettingsArgs(lids.LidSettings)
self.buildArgParser("sx", "sy", "h", "hi", "outside", "bottom_edge",
"top_edge")
self.argparser.add_argument(
@@ -156,6 +157,7 @@ class TypeTray(_TopEdge):
self.xSlots, self.ySlots], move="up", label="top")
else:
self.drawLid(x, y, self.top_edge)
+ self.lid(x, y, self.top_edge)
self.ctx.restore()
self.rectangularWall(x, hi, "ffff", move="right only")
diff --git a/boxes/lids.py b/boxes/lids.py
index 7ef6f12..e10e840 100644
--- a/boxes/lids.py
+++ b/boxes/lids.py
@@ -63,7 +63,7 @@ class Lid:
if style == "flat":
self.rectangularWall(x, y, "eeee",
callback=[self.handleCB(x, y)],
- move="right", label="lid bottom")
+ move="up", label="lid bottom")
self.rectangularWall(x, y, "EEEE",
callback=[self.handleCB(x, y)],
move="up", label="lid top")