$fn = 64; // --- Parameters --- stand_width = 60; // Total width of the stand cutout_width = 34; // Width of the center cutout (leaves 13mm wide prongs) corner_radius = 3; // Radius for the smooth rounded edges // --- 2D Profiles --- module stand_profile() { // Main side profile of the stand offset(r=corner_radius) polygon([ [3, 0], // Front bottom [85, 0], // Back bottom [75, 75], // Top back [65, 75], // Top front [32, 18], // Cradle inner corner (supports controller body) [15, 30], // Front lip top (prevents sliding) [3, 15] // Front lip outer ]); } module cutout_profile() { // Profile for the center cutout to clear the battery pack // and create a sleek dual-prong design offset(r=2) polygon([ [40, 26], // Inner bottom of the cutout [73, 83], // Top front (overshoots the main body to leave open top) [95, 83], // Top back (overshoots) [95, 26] // Back bottom (overshoots back edge) ]); } // --- Main 3D Assembly --- // Designed to be 100% support-free when printed in its upright default orientation. difference() { // Main solid body translate([0, 0, corner_radius]) rotate([-90, 0, 0]) linear_extrude(height=stand_width, center=true) stand_profile(); // Subtract the center to form the resting prongs // Extends slightly via 2D overshoot to prevent Z-fighting translate([0, 0, corner_radius]) rotate([-90, 0, 0]) linear_extrude(height=cutout_width, center=true) cutout_profile(); }