$fn=64; // --- Parametric Variables --- skadis_pitch = 40; // Standard IKEA Skadis hole spacing board_thickness = 5.5; // Thickness of the pegboard material hook_width = 4.5; // Width of the hooks (fits 5mm holes) stem_height = 6; // Height of the horizontal stem catch_depth = 2.5; // Depth of the locking catch behind the board catch_height = 7; // Height of the downward locking catch base_width = 80; // Total width of the holder base_height = 50; // Total height of the back plate base_thickness = 4; // Thickness of the back plate shelf_depth = 35; // How far the shelf extends forward shelf_thickness = 12; // Thickness of the top shelf shelf_z = 38; // Z-height where the shelf begins num_holes = 5; // Number of screwdriver slots hole_diameter = 10; // Diameter of the screwdriver holes // --- Modules --- module skadis_hook() { // Main stem that sits in the hole translate([0, -0.1, 0]) cube([hook_width, board_thickness + 0.1, stem_height]); // Downward catch that locks behind the board translate([0, board_thickness - 0.1, -catch_height]) cube([hook_width, catch_depth, catch_height + stem_height]); } module skadis_peg() { // Lower resting peg to keep the holder vertically aligned translate([0, -0.1, 0]) cube([hook_width, board_thickness + 0.1, stem_height]); } // --- Main Assembly --- difference() { union() { // Base plate (rests flush against the front of the board) translate([-base_width/2, -base_thickness, 0]) cube([base_width, base_thickness, base_height]); // Screwdriver shelf (rounded front) hull() { translate([-base_width/2, -base_thickness - 0.1, shelf_z]) cube([base_width, 0.1, shelf_thickness]); translate([-base_width/2 + 5, -base_thickness - shelf_depth + 5, shelf_z]) cylinder(r=5, h=shelf_thickness); translate([ base_width/2 - 5, -base_thickness - shelf_depth + 5, shelf_z]) cylinder(r=5, h=shelf_thickness); } // Structural support wedge (allows printing without supports under the shelf) translate([-base_width/2, -base_thickness, 5]) rotate([0, 90, 0]) linear_extrude(base_width) polygon([ [0, 0.1], [shelf_z - 5 + 0.1, 0.1], [shelf_z - 5 + 0.1, -shelf_depth + 5] ]); // Upper locking hooks translate([-skadis_pitch/2 - hook_width/2, 0, 45]) skadis_hook(); translate([ skadis_pitch/2 - hook_width/2, 0, 45]) skadis_hook(); // Lower stabilizing pegs translate([-skadis_pitch/2 - hook_width/2, 0, 5]) skadis_peg(); translate([ skadis_pitch/2 - hook_width/2, 0, 5]) skadis_peg(); } // Cutouts for screwdrivers for (i = [1 : num_holes]) { x_pos = -base_width/2 + i * (base_width / (num_holes + 1)); translate([x_pos, -base_thickness - shelf_depth/2, -10]) cylinder(d=hole_diameter, h=base_height + 20); } }