diff --git a/CFTubes.scad b/CFTubes.scad index a9ea2df..6dfe7aa 100644 --- a/CFTubes.scad +++ b/CFTubes.scad @@ -1090,8 +1090,7 @@ COLOURSCHEME_PETGHF_BLUE = [BAMBU_PETGHF_LAKE_BLUE, BAMBU_PETGHF_LAKE_BLUE, "", module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { $include_colours = include_colours; $guitar_scale_length_mm = PBass_Scale_mm; - $id_line_0 = "ABS"; - $id_line_1 = "2"; + $id_lines = ["Zweisaiten", "250210"]; $fsl_mm = fret_scale_length(0); $string_diameters_thous = [80, 105]; // Artist BST45130 @@ -1106,56 +1105,57 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { $string_spacing_bridge = 20; $string_margin = 6; - $num_frets = 30; + $num_frets = 29; $fret_widths = default_fret_widths(3.6, 2.4); $fret_angle = 60; $scallop_depth = 2.5; $extra_thickness_above_center = 6; - segment_cuts = [-100, after_fret($num_frets), after_fret(29), after_fret(13), after_fret(5), behind_fret(0)+35]; + y0 = -100; + + segment_cuts = [y0, 20, after_fret(29), after_fret(13), after_fret(5), behind_fret(0)+35]; echo(segment_cuts); echo([ for (i=[1:len(segment_cuts)-1]) segment_cuts[i]-segment_cuts[i-1]]); module MyBodySegment() { body_height = 24; - behind_bridge = 100; epsilon = 0.000001; radius = 4; + w = neck_width() - radius*2; curve_dist = 40; step = 0.08; steps = curve_dist/step; slope_start = 425; - translate([-w/2, -behind_bridge, -body_height]) round_cube([w, slope_start, body_height], radius); - w = 30 - radius*2; + translate([-neck_width()/2, y0, -body_height]) round_cube([neck_width(), slope_start, body_height+radius], radius); hull() { - // translate([-w/2, 475-behind_bridge-epsilon, -epsilon]) cube([30, epsilon, epsilon]); - // translate([-w/2, -behind_bridge, -body_height]) cube([30, 460, body_height]); + // translate([-w/2, 475+y0-epsilon, -epsilon]) cube([30, epsilon, epsilon]); + // translate([-w/2, +y0, -body_height]) cube([30, 460, body_height]); $fn = 64; for (i = [0,1]) mirror([i, 0, 0]) { - translate([w/2, radius-behind_bridge, radius-body_height]) sphere(radius); - translate([w/2, radius-behind_bridge, 0]) sphere(radius); - translate([w/2, slope_start-behind_bridge, radius-body_height]) sphere(radius); + translate([w/2, radius+y0, radius-body_height]) sphere(radius); + translate([w/2, radius+y0, 0]) sphere(radius); + translate([w/2, slope_start+y0, radius-body_height]) sphere(radius); } - // translate([+w/2, 495-behind_bridge, 0]) sphere(radius); - // translate([-w/2, 495-behind_bridge, 0]) sphere(radius); + // translate([+w/2, 495+y0, 0]) sphere(radius); + // translate([-w/2, 495+y0, 0]) sphere(radius); difference() { - translate([0, 490-behind_bridge, 0]) sphere(15, $fn=360); - translate([0, 490-behind_bridge, 50]) cube([100, 100, 100], center=true); + translate([0, 490+y0, 0]) sphere(d=neck_width(), $fn=360); + translate([0, 490+y0, 50]) cube([100, 100, 100], center=true); } } } module HeadPiece() { x0 = behind_fret(0); - end_radius = 25; - x2 = x0 + 30; + end_radius = 24; + x2 = x0 + 25; x1 = x2 - end_radius; z0 = $scallop_depth + $extra_thickness_above_center; z1 = $scallop_depth + get_max_fret_height() + $extra_thickness_above_center; module StringHoles() { $fn=360; for (i = [0:$num_strings-1]) translate([string_x(i, x0),0,0]) { - ballend_v = [0,x1+10,-3]; + 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(ballend_v) sphere(d=2.6); @@ -1164,7 +1164,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { // 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,-30]) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true); + translate([0,x2,-10]) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true); } } } @@ -1190,16 +1190,21 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { } module TrussRods(taper_points=segment_cuts, extra=0) { - translate([0, 630+270, -4]) rotate([0, 0, 180]) TrussRod(taper_points=taper_points, extra=extra); - translate([0, -100, -16]) TrussRodSingleAction(taper_points=taper_points, extra=extra); + 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); } + dowel_positions = [ + [-10, segment_cuts[4], 0], + [ 10, segment_cuts[4], 0], + [-10, segment_cuts[3], 0], + [ 10, segment_cuts[3], 0], + [ -9, segment_cuts[2], -17], + [ 9, segment_cuts[2], -17], + ]; module Dowels() { - translate([-10, segment_cuts[3], 0]) Dowel(); - translate([ 10, segment_cuts[3], 0]) Dowel(); - translate([-10, segment_cuts[2], 0]) Dowel(); - translate([ 10, segment_cuts[2], 0]) Dowel(); - translate([ -9, segment_cuts[1], 2.5]) Dowel(); - translate([ 9, segment_cuts[1], 2.5]) Dowel(); + for (v=dowel_positions) translate(v) Dowel(); } module MyBody() { @@ -1236,6 +1241,17 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1); } + module BottomLabel(depth=0.2) { + y0 = segment_cuts[segment]; + size = 2.7; + v_spacing = 0.3; + z0 = [-4, -4, 4.8, -10.8, -10.8][segment]; + for (i=[0:len($id_lines)-1]) { + z = z0 - (size+v_spacing)*i; + translate([0, y0+depth, z]) rotate([90,0,0]) linear_extrude(depth) text($id_lines[i], halign="center", size=size, font="Droid Sans"); + } + } + if (preview) { // TrussRods(); // CFs(); @@ -1244,20 +1260,25 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { if (segment < 0) { MyBody(); } else { - intersection() { - MyBody(); - y0 = segment_cuts[segment]; - y1 = segment_cuts[segment+1]; - translate([-500, y0, -500]) cube([1000, y1-y0, 1000]); + difference() { + intersection() { + MyBody(); + y0 = segment_cuts[segment]; + y1 = segment_cuts[segment+1]; + translate([-500, y0, -500]) cube([1000, y1-y0, 1000]); + } + if (!list_has($include_colours, 4)) BottomLabel(); } + if (list_has($include_colours, 4)) BottomLabel(); } } } colour_scheme = COLOURSCHEME_ABS_BLUE; // TwoBangerMk2(preview=true); -segment = -1; +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);