$fn=64; // --- Parameters --- hex_flat_to_flat = 30; // Flat-to-flat width of a single hex cell (mm) divider_height = 25; // Overall height of the divider (mm) wall_thickness = 1.2; // Thickness of the divider walls (mm) snap_bump_depth = 0.6; // Protrusion of the snap-fit retention bumps (mm) tolerance = 0.2; // Clearance tolerance for easy insertion (mm) // --- Calculated Dimensions --- hex_radius = hex_flat_to_flat / sqrt(3); // Radius of a 7-hex cluster (center of middle hex to outer point of outer hex) total_radius = hex_flat_to_flat + hex_radius - tolerance; module divider_blade() { union() { // Main dividing wall translate([0, -wall_thickness/2, 0]) cube([total_radius, wall_thickness, divider_height]); // Snap-in friction bump on the outer edge translate([total_radius - snap_bump_depth - 0.5, 0, divider_height/2]) cylinder( r = wall_thickness/2 + snap_bump_depth, h = divider_height * 0.5, center = true ); // Chamfered top/bottom for the snap bump to allow easy insertion translate([total_radius - snap_bump_depth - 0.5, 0, divider_height * 0.25]) sphere(r = wall_thickness/2 + snap_bump_depth); translate([total_radius - snap_bump_depth - 0.5, 0, divider_height * 0.75]) sphere(r = wall_thickness/2 + snap_bump_depth); } } module snap_in_divider() { union() { // Generate the 6 radiating walls for (i = [0:5]) { rotate([0, 0, i * 60]) divider_blade(); } // Central reinforcement hub to ensure manifold geometry at the intersection cylinder(r = wall_thickness, h = divider_height); } } // Render the divider snap_in_divider();