$fn=64; /* * Wet Palette and Lid Holder * * A parametric, support-free desktop stand for a wet palette and its lid. * The slots are tilted backward for stability, and the back wall acts as a buttress. */ // --- Parameters --- holder_width = 140; // Total width of the stand palette_slot = 32; // Thickness of the main wet palette (adjust as needed) lid_slot = 18; // Thickness of the lid wall = 6; // Thickness of the walls base = 6; // Thickness of the base plate front_h = 30; // Height of the front retaining lip mid_h = 60; // Height of the middle divider back_h = 90; // Height of the back support tilt = 12; // Tilt angle in degrees for stability side_border = 25; // Width of the side brackets // --- Calculated Values --- depth = wall * 3 + palette_slot + lid_slot; function tx(y) = y * tan(tilt); // --- Geometry --- module profile() { polygon([ [0, 0], // Front bottom [depth + tx(back_h), 0], // Back bottom (extended buttress) [depth + tx(back_h), back_h], // Back top outer [depth - wall + tx(back_h), back_h], // Back top inner [depth - wall + tx(base), base], // Back slot bottom [depth - wall - lid_slot + tx(base), base], // Lid slot bottom [depth - wall - lid_slot + tx(mid_h), mid_h], // Mid wall back top [wall + palette_slot + tx(mid_h), mid_h], // Mid wall front top [wall + palette_slot + tx(base), base], // Palette slot bottom [wall + tx(base), base], // Front slot bottom [wall + tx(front_h), front_h], // Front wall inner top [tx(front_h), front_h] // Front wall outer top ]); } difference() { // Main extruded body rotate([90, 0, 90]) linear_extrude(height = holder_width) profile(); // Center cutout to save material and improve aesthetics // Leaves 'side_border' on each side, and a solid lip at the bottom translate([side_border, -1, base + 8]) cube([ holder_width - side_border * 2, depth + tx(back_h) + 2, back_h + 2 ]); }