$fn = 64; // --- PARAMETERS --- // Flat-to-flat inner diameter of the hex bin (minus tolerance) hex_flat_to_flat = 33.5; // Depth of the snap-in plug insert_depth = 12.0; // Wall thickness of the flexible plug wall_thickness = 1.6; // Thickness of the bin wall (determines snap ridge placement) bin_wall_thickness = 3.0; // Size of the snap ridge protrusion snap_ridge = 0.6; // Label plate dimensions label_width = 45.0; label_height = 20.0; label_thickness = 2.0; label_corner_radius = 2.0; // --- CALCULATIONS --- r_outer = hex_flat_to_flat / sqrt(3); r_inner = (hex_flat_to_flat - 2 * wall_thickness) / sqrt(3); // --- MAIN GEOMETRY --- union() { // 1. Front Label Plate translate([0, 0, -label_thickness]) label_plate(); // 2. Hexagonal Snap-in Plug difference() { union() { // Base hex body cylinder(h = insert_depth - 1.5, r = r_outer, $fn = 6); // Tapered tip for easy insertion translate([0, 0, insert_depth - 1.5]) cylinder(h = 1.5, r1 = r_outer, r2 = r_outer - 1.5, $fn = 6); // Snap fit ridge translate([0, 0, bin_wall_thickness]) cylinder(h = 1.5, r1 = r_outer, r2 = r_outer + snap_ridge, $fn = 6); translate([0, 0, bin_wall_thickness + 1.5]) cylinder(h = 1.5, r1 = r_outer + snap_ridge, r2 = r_outer, $fn = 6); } // Hollow center for flexibility translate([0, 0, -0.1]) cylinder(h = insert_depth + 0.2, r = r_inner, $fn = 6); // Slits at the corners to create flexible tabs for(i = [0 : 60 : 359]) { rotate([0, 0, i]) translate([r_inner * 0.7, -0.75, 1.0]) // Start 1mm above base for strength cube([r_outer, 1.5, insert_depth + 1]); } } } // --- MODULES --- module label_plate() { hull() { for(x = [-label_width/2 + label_corner_radius, label_width/2 - label_corner_radius]) { for(y = [-label_height/2 + label_corner_radius, label_height/2 - label_corner_radius]) { translate([x, y, 0]) cylinder(h = label_thickness, r = label_corner_radius); } } } }