diff --git a/CFTubes.scad b/CFTubes.scad index 0a54851..fa4b021 100644 --- a/CFTubes.scad +++ b/CFTubes.scad @@ -19,18 +19,25 @@ shumbucker_w2 = 82.9; // 1.6mm in, a 2.0mm hole on each side relay_coil_housing_w = 15.2; relay_coil_housing_l = 18.8; relay_coil_housing_h = 15.5; +// relay_coil_leg_cavity_h = 5; +relay_coil_leg_cavity_l = 5; -module relay_coil_placeholder() translate([-relay_coil_housing_w/2, -relay_coil_housing_l/2]) cube([relay_coil_housing_w, relay_coil_housing_l, relay_coil_housing_h]); +module relay_coil_placeholder(top_clearance=0, bottom_leg_clearance=5) { + translate([-relay_coil_housing_w/2, -relay_coil_housing_l/2]) cube([relay_coil_housing_w, relay_coil_housing_l, relay_coil_housing_h+top_clearance]); + translate([-relay_coil_housing_w/2, -relay_coil_housing_l/2, -bottom_leg_clearance]) cube([relay_coil_housing_w, relay_coil_leg_cavity_l, bottom_leg_clearance]); +} output_socket_plate_thickness = 3; // The bit with the hole to screw onto output_socket_cutout_d = 10.4 + 0.5; +output_socket_washer_d = 17.0 + 0.5; output_socket_l = 25; output_socket_w = 20; -output_socket_h = 16; +output_socket_h = 15.7 + 0.3; output_socket_protrude = 9.5; -module output_socket_placeholder() { - translate([-output_socket_w/2, 0, 0]) cube([output_socket_w, output_socket_l, output_socket_h]); +module output_socket_placeholder(rear_clearance=0) { + translate([-output_socket_w/2, 0, 0]) cube([output_socket_w, output_socket_l+rear_clearance, output_socket_h]); translate([0, 0, output_socket_h/2]) rotate([90,0,0]) cylinder_outer(d=output_socket_cutout_d, h=output_socket_protrude, $fn=72); + translate([0, -output_socket_plate_thickness, output_socket_h/2]) rotate([90,0,0]) cylinder_outer(d=output_socket_washer_d, h=output_socket_protrude-output_socket_plate_thickness, $fn=72); } // Philippians 4:8 @@ -1136,6 +1143,19 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { echo(segment_cuts); echo([ for (i=[1:len(segment_cuts)-1]) segment_cuts[i]-segment_cuts[i-1]]); + pickup_y = fret_scale_length(36); + module ElectronicsCavities(diff=false) { + // Directly under the strings would hit the second truss rod :( + //for (i=[0,1]) translate([string_x(i, pickup_y), pickup_y, -10]) relay_coil_placeholder(); + z_pickup = -10; + for (i=[0,1]) mirror([i, 0, 0]) translate([12, pickup_y, z_pickup]) relay_coil_placeholder(top_clearance = diff ? 40 : 0); + // translate([0, pickup_y-8, -20]) rotate([0, 90, 0]) cylinder_outer(d=6, h=neck_width()+10, center=true); + // translate([5, pickup_y-38, -10]) rotate([0, 90, 0]) output_socket_placeholder(); + output_socket_y = pickup_y-26; + translate([output_socket_l/2, output_socket_y, -10]) rotate([0, 0, 90]) output_socket_placeholder(rear_clearance = diff ? 40 : 0); + translate([output_socket_l/2 - 100, output_socket_y + output_socket_w/2 - 2, -10-1]) cube([100, 9, 2]); + } + module MyBodySegment() { body_height = 24; epsilon = 0.000001; @@ -1162,6 +1182,15 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { translate([0, 490+y0, 50]) cube([100, 100, 100], center=true); } } + + // Electronics bulge + hull() { + bulge_w = 42.5; + bulge_l = 55; + bulge_y = pickup_y-40; + translate([-neck_width()/2, bulge_y-15, -body_height]) round_cube([neck_width(), bulge_l+30, body_height+$extra_thickness_above_center], r = radius); + translate([-bulge_w/2, pickup_y-40, $extra_thickness_above_center-body_height]) round_cube([bulge_w, bulge_l, body_height], r = radius); + } } module HeadPiece() { @@ -1231,6 +1260,10 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { [ 9, segment_cuts[2], -17], [-10.25, segment_cuts[2], 2.5], [ 10.25, segment_cuts[2], 2.5], + [-10, segment_cuts[1], 0], + [ 10, segment_cuts[1], 0], + [-10, segment_cuts[1], -17], + [ 10, segment_cuts[1], -17], ]; module Dowels() { for (v=dowel_positions) translate(v) Dowel(); @@ -1243,6 +1276,8 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { TrussRods(extra=20); Dowels(); + ElectronicsCavities(diff=true); + // Add a belt hole arc = arc_points([[23, -13], [-23, -13], [0, -3]], 1); belthole_r = 3; @@ -1284,9 +1319,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { if (preview) { // TrussRods(); // CFs(); - pickup_y = fret_scale_length(36); - for (i=[0,1]) translate([string_x(i, pickup_y), pickup_y, -10]) relay_coil_placeholder(); - translate([9, pickup_y-40, -10]) rotate([0, 90, 0]) output_socket_placeholder(); + ElectronicsCavities(); color("#FF000080") MyBody(); strings_reference(); } else render() { @@ -1309,7 +1342,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { colour_scheme = COLOURSCHEME_ABS_BLUE; // TwoBangerMk2(preview=true); -segment = 2; +segment = 1; color(colour_scheme[0]) TwoBangerMk2([0], segment); color(colour_scheme[1]) TwoBangerMk2([1], segment); color(colour_scheme[2]) TwoBangerMk2([2], segment); diff --git a/EllipticalNeck.scad b/EllipticalNeck.scad index 9d50c3b..4bd6e20 100644 --- a/EllipticalNeck.scad +++ b/EllipticalNeck.scad @@ -8,7 +8,8 @@ function neck_width(mm=0, fret=-9999) = lerp($neck_width_bridge, $neck_width_nut function get_fret_width(fret) = $fret_widths[clamp(0, fret, len($fret_widths)-1)]; function get_fret_height(fret) = sin($fret_angle) * get_fret_width(fret)/2; function get_max_fret_width() = max($fret_widths); -function get_max_fret_height() = ((1-cos($fret_angle))/(sin($fret_angle))) * get_max_fret_width()/2; +function arc_starting_angle_to_height_ratio(angle) = ((1-cos(angle))/(sin(angle))); +function get_max_fret_height() = arc_starting_angle_to_height_ratio($fret_angle) * get_max_fret_width()/2; function behind_fret(fret) = fret_scale_length(fret) + get_fret_width(fret)/2; function after_fret(fret) = fret_scale_length(fret) - get_fret_width(fret)/2; @@ -175,6 +176,10 @@ module TaperNeck( z1 = z0 + $scallop_depth; // Frets protrude from here z2 = z1 + get_max_fret_height(); // Nothing above this => thickest top of neck + y2 = fret_scale_length($num_frets) - get_fret_width($num_frets)/2; // bridge-side edge of final fret + final_scallop_length = $scallop_depth / arc_starting_angle_to_height_ratio(max_scallop_angle); + y1 = y2 - final_scallop_length; + module neck_stock() { angle_excess = asin(z2/$target_neck_thickness); a0 = 90-angle_excess; @@ -206,8 +211,9 @@ module TaperNeck( children(); } module scallop(fret) { - x0 = fret_scale_length(fret-1) - get_fret_width(fret-1)/2; - x1 = fret_scale_length(fret) + get_fret_width(fret)/2; + x0 = fret_scale_length(fret) - get_fret_width(fret)/2; + x_fret = fret_scale_length(fret+1) + get_fret_width(fret+1)/2; + x1 = (fret < $num_frets) ? x_fret : (x0 - final_scallop_length*2); xmid = lerp(x0, x1, 0.5); xdelta = x0-x1; @@ -295,11 +301,10 @@ module TaperNeck( render() difference() { neck_stock() children(); scallops(); - scallop($num_frets+1); // Chop off anything above the frets translate([-$neck_width_bridge, 0, z1]) cube([$neck_width_bridge*2, $guitar_scale_length_mm*3, $target_neck_thickness*3]); // Reduce rest of the body to 0 - translate([-$neck_width_bridge, 0, z0]) cube([$neck_width_bridge*2, (fret_scale_length($num_frets)+fret_scale_length($num_frets+1))/2, $target_neck_thickness*3]); + translate([-$neck_width_bridge, 0, z0]) cube([$neck_width_bridge*2, y1, $target_neck_thickness*3]); } intersection() { fret_bumps();