My Gridfinity models

Post-print tweaks to the pegboard shelf

First 1x1 test print showed the hooks and pegs were way too long, the
15° tilt was more aggressive than expected, and the baseplate was
colliding with the backplate after rotation. Shortened j-hooks and
bottom pegs by about half, dialed the tilt back to 10°, and added a
forward clearance offset so the baseplate clears the backplate wall.
Reworked the gusset geometry to follow the actual shelf underside angle
and tuck inside the baseplate radius.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+20 -15
+20 -15
pegboard-shelf.scad
··· 26 26 /* [Options] */ 27 27 enable_magnets = false; 28 28 // Tilt shelf forward for bin visibility 29 - shelf_angle = 15; // [0:5:20] 29 + shelf_angle = 10; // [0:5:20] 30 30 31 31 // === DERIVED === 32 32 ··· 49 49 gusset_depth = shelf_depth; 50 50 num_gussets = max(2, floor(grid_x / 2) + 1); 51 51 52 + bp_clearance = BASEPLATE_HEIGHT * sin(shelf_angle); 53 + 52 54 hole_options = enable_magnets 53 55 ? bundle_hole_options(magnet_hole=true, crush_ribs=true, chamfer=true) 54 56 : bundle_hole_options(); ··· 67 69 translate([0, -backplate_thick, -BASEPLATE_HEIGHT]) 68 70 { 69 71 // Gridfinity baseplate surface 70 - translate([shelf_width/2, backplate_thick + shelf_depth/2, 0]) 72 + translate([shelf_width/2, backplate_thick + bp_clearance + shelf_depth/2, 0]) 71 73 gridfinityBaseplate( 72 74 [grid_x, grid_y], l_grid, [0, 0], 73 75 0, hole_options, 0 74 76 ); 75 77 76 - // Fill the rounded baseplate corners at the backplate edge 78 + // Fill the clearance gap behind the baseplate 77 79 translate([0, backplate_thick, 0]) 78 - cube([shelf_width, BASEPLATE_OUTER_RADIUS, BASEPLATE_HEIGHT]); 80 + cube([shelf_width, bp_clearance, BASEPLATE_HEIGHT]); 79 81 } 80 82 81 83 // Gussets (in world coords, bridging tilted shelf to vertical backplate) ··· 98 100 // Bottom row pegs (anti-rotation) 99 101 for (i = [0 : num_pegs - 1]) 100 102 translate([peg_x_start + i * peg_spacing, 0, bottom_peg_z]) 101 - peg(board_thickness + 4); 103 + peg(board_thickness + 2); 102 104 } 103 105 104 106 // === MODULES === ··· 111 113 } 112 114 113 115 module j_hook() { 114 - shaft_behind = 6; 116 + shaft_behind = 3; 115 117 shaft_length = board_thickness + shaft_behind; 116 - tip_length = 5; 118 + tip_length = 3; 117 119 tip_angle = 20; 118 120 119 121 // Straight shaft through the board ··· 133 135 // Triangle in the Y-Z plane bridging tilted shelf to vertical backplate 134 136 // rotate([0,90,0]) maps: polygon_x → -world_z, polygon_y → world_y 135 137 136 - // Hinge point (top of backplate where shelf pivots) 137 - ay = backplate_thick; 138 - az = BASEPLATE_HEIGHT; 139 - 140 - // Front-bottom of tilted shelf 141 - by = backplate_thick 138 + // Front-bottom of tilted shelf (pulled back to not overshoot baseplate radius) 139 + by = backplate_thick + bp_clearance 142 140 + shelf_depth * cos(shelf_angle) 143 - - BASEPLATE_HEIGHT * sin(shelf_angle); 141 + - BASEPLATE_HEIGHT * sin(shelf_angle) 142 + - BASEPLATE_OUTER_RADIUS; 144 143 bz = BASEPLATE_HEIGHT * (1 - cos(shelf_angle)) 145 - - shelf_depth * sin(shelf_angle); 144 + - shelf_depth * sin(shelf_angle) 145 + + BASEPLATE_OUTER_RADIUS * sin(shelf_angle); 146 + 147 + // Shelf underside projected back to the backplate face 148 + ay = backplate_thick; 149 + az = bz + (by - backplate_thick) * tan(shelf_angle) 150 + + BASEPLATE_OUTER_RADIUS; 146 151 147 152 // Bottom of backplate 148 153 cy = backplate_thick;