use <./threaded_insert.scad>; $fn=50; gap = 0.24; mgap = 1.5*gap; length = 40; guard_diameter = 430; thickness = 1.2; sdiameter = 40; screw_dia = 3; screw_gap = 0.6; screwhead_dia = 6; screwhead_hei = 3; screwhold_hei = 3.5; nutholder_dia = 5; nutholder_hei = 5; screwpos = 4; front = 4; devscrewhead_dia = 6; devscrew_dia = 4; function ease_in(v) = v^2; function ease_out(v) = 1 - v^2; function ease_inout(v) = (1-v^2)^4; module rotate_in( rot, pos) { translate( -pos) rotate( rot) translate( pos) children(); } module ledz( d=5, h=5) { /* tht_led_5mm(); translate([0,0,-screwhold_hei]) cylinder( d=6, h=screwhold_hei);*/ translate([0,0,-0.1]) cylinder( d=d+gap, h=h+0.1); translate([0,0,-h]) cylinder( d=d+gap+1, h=h); } module half_cylinder( d, h, f=0, v=undef) { g = is_undef(v) ? f : v; hull() { intersection() { rotate( [0, 90, 0]) cylinder( d=d, h=h); translate( [0, -d/2, g]) cube( [h, d, 100*d]); } translate( [0, -d/2, g]) cube( [h, d, 0.1]); } } L = length; // Länge der Lampe (Nur gekrümmter Teil) W = sdiameter+2*thickness+2*mgap; // Breite der Lampe D = guard_diameter+mgap; // Schutzblechkreisdurchmesser U = PI*D; // Umfang Schutzblech S = 0.001; function x(i) = i * L; function y(i) = (1-i^2) * W * (1-i) + i * ((1-i)^2) * W; function z(i) = y(i) + i*W/8; function o(i) = i*180*L/U; union() { l = front+screwhold_hei; difference() { //minkowski() { difference() { union() { resolution = 1/50; for( i = [0 : resolution : 1]) { hull() { rotate_in( [0, o(i), 0], [0, 0, D]) half_cylinder( y(i), S, v=-thickness-2*mgap); rotate_in( [0, o(i+resolution), 0], [0, 0, D]) half_cylinder( y(i+resolution), S, v=-thickness-2*mgap); } } translate( [-l, 0, 0]) half_cylinder( W, l, v=-thickness-2*mgap); } // Schraubloch translate( [9, 0, 0]) cylinder( d = devscrewhead_dia, h = 30); } //cube(1); //} translate( [-0.0001,0,screwpos]) rotate( [0, 90, 0]) threaded_insert( 3, gap=gap); translate( [-l, 0, 0]) translate( [-0.1,0]) half_cylinder( sdiameter+2*mgap, l+0.2, v=-mgap); // Schraubloch translate( [9, 0, 0]) { translate( [0,0,-3*thickness+0.1]) cylinder( d = devscrew_dia, h = 3*thickness); cylinder( d = devscrewhead_dia, h = 30); } } // Auflagestege *rotate( [0,-90,0]) { translate( [sdiameter/2-0.8, -6, 0]) cube( [1, 12, screwhold_hei]); for( i = [0, 1]) mirror( [0, i, 0]) translate( [-1, sdiameter/2 - 0.75, 0]) cube( [8, 1, screwhold_hei]); } } rotate( [0, 90, 0]) mirror( [0,0,1]) translate( [5*thickness,0,front+screwhold_hei-2*thickness]) //translate([-screwhold_hei,0,0]) rotate( [0,-90,0]) difference() { union() { intersection() { cylinder( d=sdiameter, h=2*thickness); translate( [0,-sdiameter/2,0]) cube( [sdiameter/2, sdiameter, 2*thickness]); } translate( [0,0,-screwhold_hei]) intersection() { cylinder( d=sdiameter, h=2*thickness+screwhold_hei); translate( [-thickness-gap,-sdiameter/2,0]) cube( [sdiameter/2+thickness+gap, sdiameter, 2*thickness+screwhold_hei]); hull() { translate( [screwpos, 0, 0]) cylinder( d=8, h=2*thickness+screwhold_hei); *translate( [-thickness-gap, -8/2]) cube( [2+gap, 8, 2*thickness+screwhold_hei]); } } } // Platz hinter den Leds müssen hinten frei bleiben translate( [1, 0, 0]) union() { for( i = [-15, -8, 8, 15]) if( 0 != i) translate( [3, i, 0]) ledz(); for( i = [-12, -4.5, 4.5, 12]) translate( [3+5.3, i, 0]) ledz(); for( i = [-7.5, 0, 7.5]) translate( [3+5.3+5.3, i, 0]) ledz(); } // screwhole mirror( [0, 0, 1]) translate( [screwpos, 0, -2*thickness]) { translate( [0, 0, -0.1]) cylinder( d=screw_dia+screw_gap, h=screwhold_hei+2*thickness+0.2); translate( [0, 0, -0.1]) cylinder( d=screwhead_dia+screw_gap, h=screwhead_hei+0.1); } }