diff --git a/CFTubes.scad b/CFTubes.scad index 6dfe7aa..d7c5374 100644 --- a/CFTubes.scad +++ b/CFTubes.scad @@ -16,6 +16,12 @@ shumbucker_h = 20.3; shumbucker_l = 23.1; shumbucker_w1 = 66.4; 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; + +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]); + // Philippians 4:8 // Gideon (ShinKaiYaku07) 真実な, 尊ぶべき, 正しい, 清い, 愛すべき, 評判の良い, 徳とされる, 称賛に値する @@ -1147,7 +1153,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { module HeadPiece() { x0 = behind_fret(0); - end_radius = 24; + end_radius = 14; x2 = x0 + 25; x1 = x2 - end_radius; z0 = $scallop_depth + $extra_thickness_above_center; @@ -1157,14 +1163,14 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { for (i = [0:$num_strings-1]) translate([string_x(i, x0),0,0]) { ballend_v = [0,x0+15,2]; hull() { - translate([0,fret_scale_length(0),z1+$string_diameters_mm[i]/2]) sphere(d=min(2.6, $string_diameters_mm[i]*1.2 + 1)); + translate([0,fret_scale_length(0),z1+$string_diameters_mm[i]/2]) sphere(d=min(4, $string_diameters_mm[i]*1.25 + 1)); translate(ballend_v) sphere(d=2.6); } hull() { // String ball ends are roughly 3mm by 4mm cylinder(d=4, h=3) // Bass string ball ends are roughly 3mm by 4mm cylinder(d=6, h=4.5) - translate(ballend_v) rotate([0, 90, 0]) cylinder(d=4.5, h=3.5, center=true); - translate([0,x2,-10]) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true); + translate(ballend_v) rotate([0, 90, 0]) cylinder_outer(d=6.5, h=5.0, center=true); + translate([0,x2,-10]) rotate([0, 90, 0]) cylinder_outer(d=6.5, h=5.0, center=true); } } } @@ -1189,11 +1195,11 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { TaperNeck(fret_side_marker_x_angle=-23, fret_side_marker_y_angle=5) MyBodySegment(); } - module TrussRods(taper_points=segment_cuts, extra=0) { + module TrussRods(taper_points=segment_cuts, extra=0, tolerance=0.6) { y1 = 270; y2 = y1 + 630; - translate([0, y2, -4]) rotate([0, 0, 180]) TrussRod(taper_points=[ for (pt=taper_points) y2-pt ], extra=extra); - translate([0, y0, -16]) TrussRodSingleAction(taper_points=[ for (pt=taper_points) pt-y0 ], extra=extra); + translate([0, y2, -4]) rotate([0, 0, 180]) TrussRod(taper_points=[ for (pt=taper_points) y2-pt ], extra=extra, tolerance=tolerance); + translate([0, y0, -16]) TrussRodSingleAction(taper_points=[ for (pt=taper_points) pt-y0 ], extra=extra, tolerance=tolerance); } dowel_positions = [ [-10, segment_cuts[4], 0], @@ -1218,7 +1224,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { arc = arc_points([[16, -13], [-16, -13], [0, -3]], 1); belthole_r = 3; belthole_fn = 72; - belthole_x0 = 130; + belthole_x0 = 135; belthole_x1 = 260; render() for (i = [0:len(arc)-2]) { $fn = belthole_fn; @@ -1241,7 +1247,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1); } - module BottomLabel(depth=0.2) { + module BottomLabel(depth=0.8) { y0 = segment_cuts[segment]; size = 2.7; v_spacing = 0.3; @@ -1255,7 +1261,10 @@ 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(); color("#FF000080") MyBody(); + strings_reference(); } else { if (segment < 0) { MyBody(); @@ -1275,10 +1284,10 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { } colour_scheme = COLOURSCHEME_ABS_BLUE; -// TwoBangerMk2(preview=true); -segment = 4; -color(colour_scheme[0]) TwoBangerMk2([0], segment); -color(colour_scheme[1]) TwoBangerMk2([1], segment); -color(colour_scheme[2]) TwoBangerMk2([2], segment); -color(colour_scheme[3]) TwoBangerMk2([3], segment); -color("red") TwoBangerMk2([4], segment); +TwoBangerMk2(preview=true); +// segment = 1; +// color(colour_scheme[0]) TwoBangerMk2([0], segment); +// color(colour_scheme[1]) TwoBangerMk2([1], segment); +// color(colour_scheme[2]) TwoBangerMk2([2], segment); +// color(colour_scheme[3]) TwoBangerMk2([3], segment); +// color("red") TwoBangerMk2([4], segment); diff --git a/EllipticalNeck.scad b/EllipticalNeck.scad index 107c11b..5cf86cd 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() = sin($fret_angle) * get_max_fret_width()/2; +function get_max_fret_height() = ((1-cos($fret_angle))/(sin($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; @@ -16,6 +17,21 @@ function string_spacing(y) = lerp($string_spacing_bridge, $string_spacing_nut, y function string_x(i, y) = ($num_strings-i-1)*string_spacing(y) - neck_width(y)/2 + $string_margin; +module strings_reference(string_excess=80) { + z_nut = $extra_thickness_above_center + $scallop_depth + get_max_fret_height(); + y_nut = fret_scale_length(0); + z_bridge = z_nut + 4; + y_bridge = -string_excess; + + for (i = [0:$num_strings-1]) { + hull() { + d = $string_diameters_mm[i]; + translate([string_x(i, y_bridge), y_bridge, z_bridge + d/2]) sphere(d=d, $fn=cyl_ld_fn); + translate([string_x(i, y_nut), y_nut, z_nut + d/2]) sphere(d=d, $fn=cyl_ld_fn); + } + } +} + module neck(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_thickness=15, target_neck_thickness_additional_points=[], scallop_depth=3, num_frets=24, fret_width=2.4, filler=false, inlays_only=false, side_markers_only=false, fret_layers_only=false, remove_fret_layers=false, engrave_markers=true) { fw2 = fret_width/2; neck_length = fret_scale_length(0)+fw2; @@ -155,11 +171,9 @@ module TaperNeck( ){ neck_length = fret_scale_length(0) + get_fret_width(0)/2; - $max_fret_width = max($fret_widths); - $max_fret_height = sin($fret_angle) * $max_fret_width/2; z0 = $extra_thickness_above_center; // Deepest scallops hit here, => thinnest top of neck z1 = z0 + $scallop_depth; // Frets protrude from here - z2 = z1 + $max_fret_height; // Nothing above this => thickest top of neck + z2 = z1 + get_max_fret_height(); // Nothing above this => thickest top of neck module neck_stock() { angle_excess = asin(z2/$target_neck_thickness); @@ -253,7 +267,7 @@ module TaperNeck( fontsize_from_max_height = max_height; // echo(str(max_width, " ", estimated_width_chars, " ", fontsize_from_max_height, " ", fontsize_from_max_width)); desired_fontsize = min(fontsize_from_max_height, fontsize_from_max_width); - translate([0, x_mid, -0.5]) + translate([0, x_mid, z0-0.5]) linear_extrude(30) text(text = num_text[1], font = JP_Sans_Font, halign = "center", valign = "center", size = clamp(2, desired_fontsize, 10)); }