$fn = 64; /* Parametric Dimensions */ // Label Plate plate_width = 45; // Width of the front label plate plate_height = 15; // Height of the front label plate plate_thickness = 2.5; // Total thickness of the plate border_width = 2; // Width of the border around the label recess_depth = 1; // Depth of the recess for the sticker/paper // Snap Fit Legs leg_spacing = 20; // Distance between the centers of the snap legs leg_width = 8; // Width of the legs (Y-axis) leg_thickness = 1.8; // Thickness of the legs (X-axis, flexing direction) leg_length = 8; // Length extending from the back of the plate catch_size = 1.5; // Protrusion distance of the snap catch union() { // Base plate with recess for paper label // Designed to print face-down (recess prints as a simple bridge) difference() { // Main body translate([0, 0, plate_thickness/2]) cube([plate_width, plate_height, plate_thickness], center=true); // Label recess translate([0, 0, recess_depth/2 - 0.01]) cube([plate_width - border_width*2, plate_height - border_width*2, recess_depth + 0.02], center=true); } // Snap-in flexible legs for (i = [-1, 1]) { // Overlap with base plate by 0.1mm to ensure manifold geometry translate([i * leg_spacing/2, 0, plate_thickness - 0.1]) { // Flexible leg shaft translate([0, 0, (leg_length + 0.1)/2]) cube([leg_thickness, leg_width, leg_length + 0.1], center=true); // Snap catch (angled 60+ degrees for support-free 3D printing) translate([i * leg_thickness/2, 0, leg_length + 0.1 - catch_size]) { hull() { // Base of the catch against the leg shaft translate([0, 0, 0]) cube([0.01, leg_width, catch_size*2], center=true); // Point of the catch (creates a flat top, angled bottom) translate([i * catch_size, 0, catch_size]) cube([0.01, leg_width, 0.01], center=true); } } } } }