$fn=64; // Parameters unit_height = 20; // Height of a single unit in mm units = 2; // Number of units high hex_outer_radius = 18; // Outer radius of each hexagon wall_thickness = 1.6; // Thickness of the bin walls floor_thickness = 1.6; // Thickness of the bottom floor // Calculated values total_height = unit_height * units; // Adjust inner radius so walls have uniform thickness // r_inner = r_outer - (wall_thickness / cos(30)) hex_inner_radius = hex_outer_radius - (wall_thickness / 0.866025); // Offsets for the surrounding hexagons dx = 1.5 * hex_outer_radius; dy = sqrt(3) * hex_outer_radius / 2; // Center coordinates for the 7 hexagons positions = [ [0, 0], // Center [0, 2*dy], // Top [0, -2*dy], // Bottom [dx, dy], // Top Right [dx, -dy], // Bottom Right [-dx, dy], // Top Left [-dx, -dy] // Bottom Left ]; // Module to generate the cluster shape module hex_cluster(r, h) { for (pos = positions) { translate([pos[0], pos[1], 0]) cylinder(r=r, h=h, $fn=6); } } // Main object difference() { // Solid outer shell hex_cluster(hex_outer_radius, total_height); // Hollow inner cutouts // Added +1 to height to prevent Z-fighting at the top edge translate([0, 0, floor_thickness]) hex_cluster(hex_inner_radius, total_height + 1); }