diff --git a/CFTubes.scad b/CFTubes.scad index 8c983e3..7246853 100644 --- a/CFTubes.scad +++ b/CFTubes.scad @@ -94,10 +94,10 @@ module neck(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_thi } } -module bridge(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_thickness=15, scallop_depth=3, fret_width=2.4*6) { +module tailpiece(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_thickness=15, scallop_depth=3, fret_width=2.4*6) { fw2 = fret_width/2; - neck_length = 120; - neck_width = (num_strings-1)*string_spacing + string_margin*2; + neck_length = 88; + neck_width = (num_strings-1)*string_spacing + string_margin*2 + 6; module neck_stock() { angle_excess = asin((scallop_depth+fw2)/target_neck_thickness); a0 = 90-angle_excess; @@ -120,18 +120,32 @@ module bridge(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_t } module differences() { - t_offset = 2.7; - t_z = -23; - mirror([1,0,0]) translate([t_offset, 80, t_z]) rotate([90, -90, 90]) UBassTuner(from_below=false, from_side=true); - translate([t_offset, 45, t_z]) rotate([90, -90, 90]) UBassTuner(from_below=false, from_side=true); - mirror([1,0,0]) translate([t_offset, 10, t_z]) rotate([90, -90, 90]) UBassTuner(from_below=false, from_side=true); + t_offset = -27; //2.7; + t_z = -21; //-23; + + module tuner() { + hole_r = 3; + bend_r = 24 + hole_r + 10; + fn=72; + rotate([90, -90, 90]) UBassTuner(from_below=true, from_side=true); + // translate([35,16,0]) cylinder(h=10-t_z, d=7, $fn=72); + translate([36-7,17,1]) for (a = [10:89]) { + hull() { + translate([a/9, bend_r-bend_r*sin(a), bend_r*cos(a)]) sphere(hole_r, $fn=fn); + translate([(a+1)/9, bend_r-bend_r*sin(a+1), bend_r*cos(a+1)]) sphere(hole_r, $fn=fn); + } + } + } + mirror([1,0,0]) translate([t_offset, 57, t_z]) tuner(); + translate([t_offset, 31, t_z]) tuner(); + mirror([1,0,0]) translate([t_offset, 5, t_z]) tuner(); for (i = [-1:2:1]) translate([i*15, 0, -4]) cf_tube(neck_length, 0, tolerance=0.4); translate([0, 0, -10]) cf_tube(neck_length, 0, tolerance=0.4); } - thick = 45; + thick = 32; render() difference() { color([1,1,1,0.3]) translate([-neck_width/2, 0, -thick+scallop_depth]) cube([neck_width, neck_length, thick]); differences(); @@ -296,6 +310,70 @@ module headpiece(string_spacing=18, string_margin=4.5, num_strings=3, target_nec } } +module bridge(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_thickness=15, scallop_depth=3, fret_width=2.4) { + piece_length = 16; + cf_square_length = 32; + fw2 = fret_width/2; + x0 = 0; + neck_width = (num_strings-1)*string_spacing + string_margin*2; + bend_radius = 24; + string_thicknesses = [4.9, 4.2, 3.0]; + + module stock() { + angle_excess = asin(scallop_depth/target_neck_thickness); + a0 = 90-angle_excess; + a1 = 270+angle_excess; + translate([0, x0, 0]) + rotate([-90, 0, 0]) + linear_extrude(piece_length) + polygon([for (i = [0:300]) let(a=lerp(a0, a1, i/300.0)) [neck_width*0.5*sin(a), -target_neck_thickness*cos(a)]]); + intersection() { + r = 14; + translate([0,8,scallop_depth]) rotate([18, -90, 0]) scale([1,0.2,1]) cylinder(r=r, h=neck_width*1.5, center=true, $fn=72); + a0 = -90; + a1 = 90; + translate([0, x0, 0]) + rotate([-90, 0, 0]) + linear_extrude(piece_length) + polygon([for (i = [0:300]) let(a=lerp(a0, a1, i/300.0)) [neck_width*0.5*sin(a), -target_neck_thickness*cos(a)*3]]); + } + } + module string_tubes(tolerance = 1.0) { + module string_tube(diameter, fn=36) { + hole_r = diameter/2; + bend_r = bend_radius + hole_r; + union() { + for (a = [0:89]) { + hull() { + translate([0, bend_r*sin(a), bend_r*cos(a)]) sphere(hole_r, $fn=fn); + translate([0, bend_r*sin(a+1), bend_r*cos(a+1)]) sphere(hole_r, $fn=fn); + } + } + hull() { + translate([0, bend_r*sin(90), bend_r*cos(90)]) sphere(hole_r, $fn=fn); + translate([0, bend_r*sin(90), -target_neck_thickness]) sphere(hole_r, $fn=fn); + } + } + }; + for (i = [0:num_strings-1]) { + string_diameter = string_thicknesses[i] + tolerance; + x = -neck_width/2 + string_margin + (i*string_spacing); + // translate([x, x0+2, -bend_radius+scallop_depth]) string_tube(string_diameter); + translate([x, 0, scallop_depth+string_diameter/2+8]) rotate([-90,0,0]) cylinder(d=string_diameter, h=20, $fn=72); + } + } + // string_tubes(); + difference() { + stock(); + string_tubes(); + for (i = [-1:1]) + translate([i*15, 0, (i==0)?(-10):(-4)]) + cf_tube(piece_length+0.1, x0-0.1, VLH=false); + // αβγδεζ + translate([0, x0+piece_length, -5]) rotate([90, 0, 180]) linear_extrude(0.3, center=true) text(text = "01β", font = "Deja Vu Sans", halign = "center", valign = "center", size = 4); + } +} + echo(fret_scale_length(0) - fret_scale_length(8)); // 225.724 echo(fret_scale_length(8) - fret_scale_length(24)); // 240.335 // fret_tube(0, 8); @@ -306,4 +384,5 @@ echo(fret_scale_length(8) - fret_scale_length(24)); // 240.335 // UBassTuner(); // fret_tube_filler(24, 100); -bridge(); +tailpiece(); +// bridge();