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