// -*- C -*- include main_thick = 3.3; main_in_dia = 28.9; horn_ext_dia = 20 - 0.5; //? horn_c_x = -4.6; //? horn_c_dy= -4; //? blhook_start_ang = 45; //? blhook_str_len = 2.9; blhook_mid_rad = 3.5; //? width = 20; mc_mid_rad = main_in_dia/2 + main_thick/2; mc_bl = circle_point([0,0], mc_mid_rad, 270-blhook_start_ang); $fs=0.05; horn_thick = main_thick; module MainLoop(){ intersection(){ difference(){ circle(r= main_in_dia/2 + main_thick, $fn=50); circle(r= main_in_dia/2, $fn=50); } polygon([[0,0], 3*mc_bl, [0, -100], [100,-100], [100,100], [0,100]]); } translate(mc_bl) circle(main_thick/2); translate([horn_c_x, mc_mid_rad + horn_c_dy]) intersection(){ difference(){ circle(horn_ext_dia/2); intersection(){ circle(horn_ext_dia/2 - horn_thick); polygon([[-50,-50], [-50,-horn_c_dy], [50,-horn_c_dy], [50,-50]]); } } polygon([[0,0], [-50,0], [0,50]]); } translate([0,main_in_dia/2]) mirror([1,0]) square([-horn_c_x + horn_ext_dia/2 * 0.75, main_thick]); translate(mc_bl){ translate([-blhook_str_len/2, 0]) square(center=true, [blhook_str_len, main_thick]); translate([-blhook_str_len, blhook_mid_rad]){ intersection(){ difference(){ circle(r=blhook_mid_rad + main_thick/2); circle(r=blhook_mid_rad - main_thick/2); } mirror([1,1]) square(50); } } } } module MainLoopTest(){ linear_extrude(height=1.6) MainLoop(); } MainLoopTest();