$fn=64; /* [Dimensions] */ // Length of the LED channel length = 150; // [50:5:300] // Width of the LED strip (standard is 10mm or 12mm) led_width = 12.5; // [8:0.1:20] // Depth of the LED channel recess led_depth = 4.0; // [2:0.1:10] // Thickness of the baseplate to clip onto (e.g., acrylic or glass) plate_thickness = 5.0; // [2:0.1:10] // How deep the clip goes onto the baseplate clip_depth = 12.0; // [5:0.5:25] // Thickness of the plastic walls wall = 2.0; // [1:0.1:5] // Tilt angle of the LED channel (degrees, 0 = straight up, 45 = angled inward) angle = 45; // [-45:5:75] module led_channel_profile() { difference() { union() { // Support structure (hulls the clip and the base of the LED channel) hull() { // Main clip bounding box square([clip_depth + wall, plate_thickness + 2 * wall]); // Base of the LED channel to ensure a solid manifold connection translate([wall, plate_thickness + 2 * wall]) rotate([0, 0, angle]) translate([-wall, 0]) square([led_width + 2 * wall, 0.1]); } // LED Channel Body translate([wall, plate_thickness + 2 * wall]) rotate([0, 0, angle]) translate([-wall, 0]) square([led_width + 2 * wall, led_depth + wall]); } // 1. Baseplate Clip Cutout translate([wall, wall]) square([clip_depth + wall + 1, plate_thickness]); // Insertion flare for easy clipping onto the baseplate translate([clip_depth + wall - 1.5, wall]) polygon([ [0, 0], [2.5, -wall/2], [2.5, plate_thickness + wall/2], [0, plate_thickness] ]); // 2. LED Strip Cutout translate([wall, plate_thickness + 2 * wall]) rotate([0, 0, angle]) translate([0, wall]) square([led_width, led_depth + wall + 1]); } } // Orient for optimal 3D printing (strong layer lines, printed lying flat) // The clip bridge is easily printable, and layer orientation prevents snapping. rotate([-90, 0, 0]) linear_extrude(height = length) led_channel_profile();