Skip to content

Commit 43195ca

Browse files
committed
Hobbycase with single vertical wall
1 parent cb8c4d9 commit 43195ca

1 file changed

Lines changed: 31 additions & 11 deletions

File tree

boxes/generators/hobbycase.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,23 @@ def __init__(self) -> None:
4444
self.argparser.add_argument("--add_rails", action="store", type=boolarg, default=True, help="Should rails be generated for slots unpopulated by shelves?")
4545
self.argparser.add_argument("--add_cover", action="store", type=boolarg, default=True, help="Should cover for the case be generated?")
4646
self.argparser.add_argument("--inset_shelves", action="store", type=boolarg, default=True, help="Should the inner dividers and shelves be inset from the front edge?")
47+
self.argparser.add_argument("--double_vertical_wall", action="store", type=boolarg, default=True, help="Use double vertical walls")
4748
self.addSettingsArgs(boxes.edges.StackableSettings, angle=90, width=0.0, height=2.0)
4849

4950

5051
def prepare(self):
52+
# derive double_vertical_wall parameters
53+
if self.double_vertical_wall:
54+
self.wall_factor = 2
55+
self.shelve_edge = "f"
56+
else:
57+
self.wall_factor = 1
58+
self.shelve_edge = "ƒ"
59+
5160
self.cols = len(self.unit_w)
5261

5362
self.sum_w = sum(self.unit_w)
54-
self.inside_w = self.sum_w + 2 * (self.cols - 1) * self.thickness
63+
self.inside_w = self.sum_w + self.wall_factor * (self.cols - 1) * self.thickness
5564
self.outside_w = self.inside_w + 2 * self.thickness
5665

5766
self.sum_h = self.rows * self.unit_h
@@ -86,7 +95,7 @@ def vertical_walls(self, move="up"):
8695

8796
self.verticalWall(self.outside_depth, self.inside_h, label="left")
8897

89-
for i in range(2 * (self.cols - 1)):
98+
for i in range(self.wall_factor * (self.cols - 1)):
9099
self.verticalWall(self.inside_depth, self.inside_h, label="vertical wall")
91100

92101
self.verticalWall(self.outside_depth, self.inside_h, move="up", label="right")
@@ -98,7 +107,7 @@ def verticalWall(self, x, y, edges="feff", move="right", label=None):
98107
self.rectangularWall(x, y, edges, callback=[self.slotsHolesCallback], move=move, label=label)
99108

100109
def slotsHolesCallback(self):
101-
self.cut_shelve_holes_in_single_column(self.inside_depth, 0)
110+
self.cut_shelve_side_holes_in_single_column(self.inside_depth, 0)
102111

103112
# Cover
104113
def cover(self, move="up"):
@@ -120,7 +129,7 @@ def shelves(self, move="up"):
120129
y = self.inside_depth
121130
self.partsMatrix(self.shelves_n[columnIndex], 0, move,
122131
self.rectangularWall,
123-
x, y, "efff", label=f"shelf (column {columnIndex})\n({x}x{y})")
132+
x, y, "e" + self.shelve_edge + "f" + self.shelve_edge, label=f"shelf (column {columnIndex})\n({x}x{y})")
124133

125134
# Rails
126135
def rails(self, move="up"):
@@ -130,9 +139,9 @@ def rails(self, move="up"):
130139

131140
def railSet(self, sideLength, backLength, move=None):
132141
self.ctx.save()
133-
self.rectangularWall( sideLength,0, "feSe", move="right")
142+
self.rectangularWall( sideLength,0, self.shelve_edge + "eSe", move="right")
134143
self.rectangularWall( backLength - 8*self.thickness,0, "feSe", move="right")
135-
self.rectangularWall( sideLength,0, "feSe", move="right")
144+
self.rectangularWall( sideLength,0, self.shelve_edge + "eSe", move="right")
136145
self.move(2*sideLength+backLength, 3 * self.thickness, move)
137146

138147
# Base plate
@@ -143,8 +152,8 @@ def base_plate(self, move="up"):
143152

144153
def baseplate_callback(self):
145154
for col in range(self.cols):
146-
posx = sum(self.unit_w[:col]) + col * 2 * self.thickness
147-
self.cut_shelve_holes_in_single_column(self.unit_w[col], posx)
155+
posx = sum(self.unit_w[:col]) + col * self.wall_factor * self.thickness
156+
self.cut_shelve_back_holes_in_single_column(self.unit_w[col], posx)
148157
self.cut_double_wall_holes(self.inside_h)
149158

150159
# Render
@@ -162,10 +171,21 @@ def render(self):
162171
# Helper functions
163172
def cut_double_wall_holes(self, length):
164173
for col in range(1, self.cols):
165-
posx = self.thickness + sum(self.unit_w[:col]) + (col-1) * 2 * self.thickness
166-
self.doubleFingerHolesAt(posx, 0, length, angle=90)
174+
posx = 0.5 * self.wall_factor * self.thickness + sum(self.unit_w[:col]) + (col-1) * self.wall_factor * self.thickness
175+
if self.double_vertical_wall:
176+
self.doubleFingerHolesAt(posx, 0, length, angle=90)
177+
else:
178+
self.fingerHolesAt(posx, 0, length, angle=90)
167179

168-
def cut_shelve_holes_in_single_column(self, length, posx = 0):
180+
def cut_shelve_back_holes_in_single_column(self, length, posx = 0):
169181
for row in range(1, self.rows):
170182
posy = 0.5 * self.thickness + row * self.unit_h + (row-1) * self.thickness
171183
self.fingerHolesAt(posx, posy, length, angle=0)
184+
185+
def cut_shelve_side_holes_in_single_column(self, length, posx = 0):
186+
for row in range(1, self.rows):
187+
posy = 0.5 * self.thickness + row * self.unit_h + (row-1) * self.thickness
188+
if self.double_vertical_wall:
189+
self.fingerHolesAt(posx, posy, length, angle=0)
190+
else:
191+
self.triFingerHolesAt(posx, posy, length, angle=0)

0 commit comments

Comments
 (0)