diff --git a/CFTubes.scad b/CFTubes.scad index 395ef72..61b8b3a 100644 --- a/CFTubes.scad +++ b/CFTubes.scad @@ -1084,7 +1084,7 @@ COLOURSCHEME_PETGHF_CLOWNFISH = [BAMBU_PETGHF_ORANGE, BAMBU_PETGHF_WHITE, BAMBU_ COLOURSCHEME_ABS_BLUE = [BAMBU_ABS_NAVY_BLUE, BAMBU_ABS_AZURE, BAMBU_ABS_AZURE, BAMBU_ABS_AZURE]; COLOURSCHEME_PETGHF_BLUE = [BAMBU_PETGHF_LAKE_BLUE, BAMBU_PETGHF_LAKE_BLUE, "", ""]; -colour_scheme = COLOURSCHEME_ABSGF_CLOWNFISH; +// colour_scheme = COLOURSCHEME_ABSGF_CLOWNFISH; // colour_scheme = COLOURSCHEME_ABS_BLUE; // color(colour_scheme[0]) rotate([90,0,0]) Steel6String(from_fret=0, to_fret=23, include_colours=[0]); // color(colour_scheme[1]) rotate([90,0,0]) Steel6String(from_fret=0, to_fret=23, include_colours=[1]); @@ -1102,5 +1102,14 @@ colour_scheme = COLOURSCHEME_ABSGF_CLOWNFISH; // // TrussRod(taper_points=[-extra, l], extra=true, tolerance = 0.24); // TrussRodSingleAction(taper_points=[-extra, l], extra=true, tolerance = 0.24); // } + +module TwoBangerMk2(include_colours=[0,1]) { + TaperNeck(string_spacing_bridge=20, string_spacing_nut=20, num_strings=2, extra_height=6, fret_widths=concat([3.6], [ for (i=[0:50]) 2.4 ]), num_frets=34, fret_side_marker_x_angle=-23, fret_side_marker_y_angle=5, include_colours=include_colours); +} Guitar_Scale_Length_mm = PBass_Scale_mm; -TaperNeck(string_spacing_bridge=20, string_spacing_nut=20, num_strings=2, fret_widths=concat([3.6], [ for (i=[0:50]) 2.4 ]), num_frets=34, include_colours=[0,1]); + +colour_scheme = COLOURSCHEME_ABS_BLUE; +color(colour_scheme[0]) TwoBangerMk2([0]); +color(colour_scheme[1]) TwoBangerMk2([1]); +color(colour_scheme[2]) TwoBangerMk2([2]); +color(colour_scheme[3]) TwoBangerMk2([3]); diff --git a/EllipticalNeck.scad b/EllipticalNeck.scad index dfb57d9..0024d92 100644 --- a/EllipticalNeck.scad +++ b/EllipticalNeck.scad @@ -137,11 +137,14 @@ module TaperNeck( target_neck_thickness = 15, target_neck_thickness_additional_points = [], scallop_depth = 2, + extra_height = 0, num_frets = 24, fret_widths = [], fret_angle = 60, // 90 is semicircle max_scallop_angle = 60, // match this to fret_angle for a nice continuous look filler = false, + fret_side_marker_x_angle = -37, + fret_side_marker_y_angle = -4, include_colours = [0, 1, 2, 3], // 0: Base neck/fretboard 1: Frets 2: Inlays 3: Side markers ){ neck_length = fret_scale_length(0) + fret_widths[0]/2; @@ -153,9 +156,12 @@ module TaperNeck( function get_fret_width(fret) = fret_widths[clamp(0, fret, num_frets)]; max_fret_width = max(fret_widths); max_fret_height = sin(fret_angle) * max_fret_width/2; + z0 = extra_height; // 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 module neck_stock() { - angle_excess = asin((scallop_depth + max_fret_height)/target_neck_thickness); + angle_excess = asin(z2/target_neck_thickness); a0 = 90-angle_excess; a1 = 270+angle_excess; rotate([-90, 0, 0]) @@ -188,7 +194,7 @@ module TaperNeck( xmid = lerp(x0, x1, 0.5); xdelta = x0-x1; - maxdepth_angle = 90+arc_points_angle([[x0, scallop_depth], [x1, scallop_depth], [xmid, 0]]); + maxdepth_angle = 90+arc_points_angle([[x0, z1], [x1, z1], [xmid, z0]]); // echo(str(maxdepth_angle)); a = min(max_scallop_angle, maxdepth_angle); fn = 50; @@ -196,7 +202,7 @@ module TaperNeck( ca = cos(a); sa = sin(a); r = xdelta / (2*sa); - arc = [ for (i = [-fn:fn]) [xmid+xdelta*i/fn2, scallop_depth-r*(sqrt(1 - ((sa*i/fn)^2))-ca)] ]; + arc = [ for (i = [-fn:fn]) [xmid+xdelta*i/fn2, z1-r*(sqrt(1 - ((sa*i/fn)^2))-ca)] ]; // echo(arc); rotate([90, 0, 90]) linear_extrude(neck_width_bridge, center=true) polygon(arc); } @@ -218,7 +224,7 @@ module TaperNeck( } module fret_bumps() { for (fret = [0:num_frets]) - translate([0, fret_scale_length(fret), scallop_depth]) + translate([0, fret_scale_length(fret), z1]) fret_bump(get_fret_width(fret)); } module intersect_fret_layers() { @@ -254,15 +260,16 @@ module TaperNeck( for (num_text = fret_inlays) { fret = num_text[0]; if (fret <= num_frets) { - x0 = fret_scale_length(fret-1); - x1 = fret_scale_length(fret); + x0 = fret_scale_length(fret-1)-get_fret_width(fret-1)/2; + x1 = fret_scale_length(fret)+get_fret_width(fret)/2; diff = x0 - x1; mid = lerp(x0, x1, 0.67); - rotate([0, -94, 0]) + fontsize = min(5, diff*0.6); + rotate([0, fret_side_marker_y_angle-90, 0]) translate([0, mid, neck_width_mm(mid)/2-3]) linear_extrude(50) - rotate(-37) - text(text = str(fret), font = JP_Serif_Font, halign = "right", valign = "center", size = 5); + rotate(fret_side_marker_x_angle) + text(text = str(fret), font = JP_Serif_Font, halign = "right", valign = "center", size = fontsize); } } } @@ -273,7 +280,7 @@ module TaperNeck( scallops(); scallop(num_frets+1); // Chop off anything above the frets - translate([-neck_width_bridge, 0, scallop_depth]) cube([neck_width_bridge*2, Guitar_Scale_Length_mm*3, target_neck_thickness*3]); + 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, 0]) cube([neck_width_bridge*2, (fret_scale_length(num_frets)+fret_scale_length(num_frets+1))/2, target_neck_thickness*3]); }