diff --git a/boxes/generators/dividertray.py b/boxes/generators/dividertray.py index e30ed08..c056c7a 100644 --- a/boxes/generators/dividertray.py +++ b/boxes/generators/dividertray.py @@ -83,6 +83,7 @@ There are 3 different sets of dividers rendered: One single divider spanning acr def __init__(self): Boxes.__init__(self) self.addSettingsArgs(edges.FingerJointSettings) + self.addSettingsArgs(edges.HandleEdgeSettings) self.buildArgParser("sx", "sy", "h", "outside") self.addSettingsArgs(SlotSettings) self.addSettingsArgs(NotchSettings) @@ -108,6 +109,9 @@ There are 3 different sets of dividers rendered: One single divider spanning acr self.argparser.add_argument( "--bottom", type=boolarg, default=False, help="generate wall on the bottom", ) + self.argparser.add_argument( + "--handle", type=boolarg, default=False, help="add handle to the bottom", + ) def render(self): @@ -145,7 +149,7 @@ There are 3 different sets of dividers rendered: One single divider spanning acr # Facing walls (outer) with finger holes to support side walls facing_wall_length = sum(self.sx) + self.thickness * (len(self.sx) - 1) side_edge = lambda with_wall: "F" if with_wall else "e" - bottom_edge = lambda with_wall: "F" if with_wall else "e" + bottom_edge = lambda with_wall, with_handle: ("f" if with_handle else "F") if with_wall else "e" upper_edge = ( DividerNotchesEdge( self, @@ -159,7 +163,7 @@ There are 3 different sets of dividers rendered: One single divider spanning acr facing_wall_length, self.h, [ - bottom_edge(self.bottom), + bottom_edge(self.bottom, _ and self.handle), side_edge(self.right_wall), upper_edge, side_edge(self.left_wall), @@ -194,7 +198,7 @@ There are 3 different sets of dividers rendered: One single divider spanning acr [ "f", "f" if self.right_wall else "e", - "f", + "Y" if self.handle else "f", "f" if self.left_wall else "e", ], callback=[partial(self.generate_finger_holes, side_wall_length)], diff --git a/boxes/generators/typetray.py b/boxes/generators/typetray.py index ce25e71..8cc4162 100644 --- a/boxes/generators/typetray.py +++ b/boxes/generators/typetray.py @@ -40,6 +40,9 @@ class TypeTray(_TopEdge): self.argparser.add_argument( "--gripwidth", action="store", type=float, default=70, dest="gw", help="width of th grip hole in mm (zero for no hole)") + self.argparser.add_argument( + "--handle", type=boolarg, default=False, help="add handle to the bottom (changes bottom edge in the front)", + ) def xSlots(self): posx = -0.5 * self.thickness @@ -112,7 +115,7 @@ class TypeTray(_TopEdge): callback=[self.xHoles, None, self.gripHole], ignore_widths=[], move="up") - self.rectangularWall(x, h, [b, "f", t3, "f"], + self.rectangularWall(x, h, ["f" if self.handle else b, "f", t3, "f"], callback=[self.mirrorX(self.xHoles, x), ], move="up") else: @@ -120,14 +123,17 @@ class TypeTray(_TopEdge): callback=[self.xHoles, None, self.gripHole], ignore_widths=[1, 6], move="up") - self.rectangularWall(x, h, [b, "F", t3, "F"], + self.rectangularWall(x, h, ["f" if self.handle else b, "F", t3, "F"], callback=[self.mirrorX(self.xHoles, x), ], - ignore_widths=[1, 6], move="up") + ignore_widths=[] if self.handle else [1, 6], + move="up") # floor if b != "e": - self.rectangularWall(x, y, "ffff", callback=[ - self.xSlots, self.ySlots], move="up") + if self.handle: + self.rectangularWall(x, y, "ffYf", callback=[self.xSlots, self.ySlots], move="up") + else: + self.rectangularWall(x, y, "ffff", callback=[self.xSlots, self.ySlots], move="up") # Inner walls @@ -167,11 +173,13 @@ class TypeTray(_TopEdge): else: self.rectangularWall( y, h, [b, "f", t2, "f"], callback=[self.yHoles, ], - ignore_widths=[1, 6], move="up") + ignore_widths=[6] if self.handle else [1, 6], + move="up") self.rectangularWall( y, h, [b, "f", t4, "f"], callback=[self.mirrorX(self.yHoles, y), ], - ignore_widths=[1, 6], move="up") + ignore_widths=[1] if self.handle else [1, 6], + move="up") # inner walls for i in range(len(self.sx) - 1):