overall_outer_diameter = 75; overall_thickness = 15; neopixel_holder_thickness = 7.5; translucent_disk_thickness = overall_thickness - neopixel_holder_thickness; ring_24_outer_diameter = 65.6 + 0.5; ring_24_inner_diameter = 52.3 - 0.5; ring_12_outer_diameter = 36.8 + 0.5; ring_12_inner_diameter = 23.3 - 0.5; ring_thickness = 6.7; ring_z_offset = neopixel_holder_thickness - ring_thickness; channel_length = overall_outer_diameter-3; alignment_pin_position = (-overall_outer_diameter/2) + 1.5; $fn = 200; module ring(h, od, id) { difference() { cylinder(h=h, d=od); cylinder(h=h, d=id); } }; module channel() { translate([-(channel_length/2), -2, ring_z_offset]) cube([channel_length, 4, ring_thickness+1]); translate([0, 0, -1]) cylinder(h=neopixel_holder_thickness+2, d=10); }; module neopixel_holder() { difference () { cylinder(h=neopixel_holder_thickness, d=overall_outer_diameter); for (d=[[ring_24_outer_diameter, ring_24_inner_diameter], [ring_12_outer_diameter, ring_12_inner_diameter]]) translate([0, 0, ring_z_offset]) ring(h=ring_thickness+1, od=d[0], id=d[1]); channel(); } }; module translucent_disk() { cylinder(h=translucent_disk_thickness, d=overall_outer_diameter); for (x=[0, 1]) mirror([x, 0, 0]) translate([alignment_pin_position, -(4-0.2)/2, translucent_disk_thickness]) cube([3, 4-0.2, neopixel_holder_thickness -ring_z_offset]); }; translate([-(overall_outer_diameter/2+1), 0, 0]) neopixel_holder(); translate([(overall_outer_diameter/2+1), 0, 0]) translucent_disk();