$fn=64; // --- Parameters --- strip_width = 16.5; // Width of the LED strip or aluminum channel strip_thickness = 10.0; // Height/thickness of the strip wall_thickness = 3.0; // Thickness of the mount's walls and base length = 15.0; // Length of the mount lip_radius = 1.0; // Size of the snap-fit retention lip screw_dia = 3.5; // Diameter of the mounting screw (e.g., M3 or #6) screw_head_dia = 7.0; // Diameter of the screw head countersink_depth = 1.8; // Depth of the screw countersink // --- Calculated Variables --- outer_w = strip_width + (wall_thickness * 2); outer_h = strip_thickness + wall_thickness; // --- Model --- difference() { // Main Body with Lips union() { // Base and walls difference() { // Outer block translate([0, 0, outer_h/2]) cube([outer_w, length, outer_h], center=true); // Inner channel cutout translate([0, 0, wall_thickness + strip_thickness/2 + 0.1]) cube([strip_width, length + 0.2, strip_thickness + 0.2], center=true); } // Left snap-fit lip translate([-strip_width/2, 0, outer_h - lip_radius]) rotate([90, 0, 0]) cylinder(r=lip_radius, h=length, center=true); // Right snap-fit lip translate([strip_width/2, 0, outer_h - lip_radius]) rotate([90, 0, 0]) cylinder(r=lip_radius, h=length, center=true); } // Screw hole (shaft) translate([0, 0, -0.1]) cylinder(h=wall_thickness + 0.2, d=screw_dia); // Screw hole (countersink from the inside) translate([0, 0, wall_thickness + 0.1]) rotate([180, 0, 0]) cylinder(h=countersink_depth + 0.1, d1=screw_head_dia, d2=screw_dia); }