Skip to content

Commit

Permalink
Add Lid option to more Generators
Browse files Browse the repository at this point in the history
 * DividerTray
 * DrillBox
 * GridfinityBase
 * GridfinityTrayLayout
 * SmallPartsTray
 * SmallPartsTray2
 * TrayLayout
 * TypeTray

Related: #128
Related: #277
  • Loading branch information
florianfesti committed Apr 7, 2023
1 parent fa760de commit 7bd0ab9
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 29 deletions.
5 changes: 4 additions & 1 deletion boxes/generators/dividertray.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import math
from functools import partial

from boxes import Boxes, edges, boolarg
from boxes import Boxes, edges, boolarg, lids


class NotchSettings(edges.Settings):
Expand Down Expand Up @@ -94,6 +94,7 @@ def __init__(self) -> None:
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)
Expand Down Expand Up @@ -194,6 +195,8 @@ def render(self):
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(
Expand Down
4 changes: 3 additions & 1 deletion boxes/generators/drillbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

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"""
Expand All @@ -32,6 +32,7 @@ def __init__(self) -> None:
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"),
Expand Down Expand Up @@ -125,3 +126,4 @@ def render(self):
x, y, "ffff",
callback=[lambda: self.drillholes(description=True)],
move="right")
self.lid(x, y, self.top_edge)
25 changes: 13 additions & 12 deletions boxes/generators/gridfinitybase.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

from boxes import *
from boxes import lids

class GridfinityBase(Boxes):
"""A parameterized Gridfinity base"""
Expand All @@ -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)")
Expand Down Expand Up @@ -69,23 +71,22 @@ def create_tray(self):
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)
17 changes: 11 additions & 6 deletions boxes/generators/gridfinitytraylayout.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
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"""
Expand All @@ -25,6 +25,7 @@ class GridfinityTrayLayout(TrayLayout):
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.
Expand Down Expand Up @@ -103,9 +104,13 @@ def render(self):

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)
12 changes: 9 additions & 3 deletions boxes/generators/smallpartstray.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

from boxes import *
from boxes import lids
from boxes.edges import CompoundEdge

class SmallPartsTray(Boxes):
Expand All @@ -27,6 +28,7 @@ def __init__(self) -> None:

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(
Expand Down Expand Up @@ -243,7 +245,11 @@ def render(self):


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.render_simple_tray_divider(l, h, move="up only")

self.partsMatrix(len(self.sx), 0, "right", self.render_simple_tray_divider_feet)
self.lid(x, y)
5 changes: 3 additions & 2 deletions boxes/generators/smallpartstray2.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

from boxes import *
from boxes.lids import _TopEdge
from boxes.lids import _TopEdge, LidSettings

class TopEdge(edges.BaseEdge):

Expand Down Expand Up @@ -55,6 +55,7 @@ def __init__(self) -> None:
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(
Expand Down Expand Up @@ -178,7 +179,6 @@ def render(self):
callback=[self.fingerHolesCB(self.sx, hi-t2)],
move="up", label="floor front side")
floors.append(hi-t2)
print(y, sum(floors), floors)

# Inner walls

Expand All @@ -198,6 +198,7 @@ def render(self):

# 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")
Expand Down
7 changes: 5 additions & 2 deletions boxes/generators/traylayout.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import boxes
from boxes import *

from boxes import lids

class TrayLayoutFile(Boxes):
"""Generate a layout file for a typetray."""
Expand Down Expand Up @@ -101,6 +101,7 @@ class TrayLayout(Boxes):
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(
Expand Down Expand Up @@ -452,4 +453,6 @@ def parse(self, input):
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)
4 changes: 3 additions & 1 deletion boxes/generators/typetray.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

from boxes import *
from boxes.lids import _TopEdge
from boxes.lids import _TopEdge, LidSettings

class TypeTray(_TopEdge):
"""Type tray - allows only continuous walls"""
Expand All @@ -26,6 +26,7 @@ def __init__(self) -> None:
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(
Expand Down Expand Up @@ -156,6 +157,7 @@ def render(self):
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")
Expand Down
2 changes: 1 addition & 1 deletion boxes/lids.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def __call__(self, x, y, edge=None):
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")
Expand Down

0 comments on commit 7bd0ab9

Please sign in to comment.