diff --git a/CFTubes.scad b/CFTubes.scad index 5e81aea..1557ddb 100644 --- a/CFTubes.scad +++ b/CFTubes.scad @@ -17,6 +17,18 @@ shumbucker_l = 23.1; shumbucker_lu = 17.1; // Upper shumbucker_w1 = 66.4; shumbucker_w2 = 82.9; // 1.6mm in, a 2.0mm hole on each side + +module Shumbucker(y_align="center", z_align="positive") { + y_offset = (y_align == "center") ? -shumbucker_l/2 : + (y_align == "negative") ? -shumbucker_l : + (y_align == "positive") ? 0 : 0; + z_offset = (y_align == "center") ? -shumbucker_h/2 : + (y_align == "negative") ? -shumbucker_h : + (y_align == "positive") ? 0 : 0; + translate([-shumbucker_w1/2, y_offset, z_offset]) cube([shumbucker_w1, shumbucker_l, shumbucker_h]); + translate([-shumbucker_w2/2, y_offset, z_offset]) cube([shumbucker_w2, shumbucker_l, 4]); +} + relay_coil_housing_w = 15.2; relay_coil_housing_l = 18.8; relay_coil_housing_h = 15.5; @@ -720,20 +732,28 @@ module Steel6String(include_colours=[0,1], segment=-1, reference=false) { $string_margin = 3; // +6 $neck_width_nut = default_neck_width_nut(); $neck_width_bridge = default_neck_width_bridge(); - body_width = 96; + body_width = 90; + body_width_tapered = 70; $scallop_depth = 2.0; $fret_widths = default_fret_widths(3.6, 2.4); $fret_angle = 50; $target_neck_thickness = 16; + // Clownfish idea: make inlay-marked frets a different colour + // Clownfish scheme is 0 Orange/1 White/2-4 Black + $fret_colours = [ + 1, 4, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, // 0-11 + 1, 4, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, // 12-23 + ]; + // Artist Strat has about 18cm of headstock and 10cm past bridge on body - y0 = -160; + y0 = -175; headstock_length = 36; y_end = behind_fret(0) + headstock_length; y_fretboard_end = get_end_of_fretboard(); - $segment_cuts = [y0, 0, after_fret(22), after_fret(8), behind_fret(0), y_end]; + $segment_cuts = [y0, 0, get_end_of_fretboard(), after_fret(8), behind_fret(0), y_end]; echo("Segment cuts:", $segment_cuts, "have lengths", [ for (i=[1:len($segment_cuts)-1]) $segment_cuts[i]-$segment_cuts[i-1]]); target_neck_thickness_additional_points = []; @@ -749,10 +769,10 @@ module Steel6String(include_colours=[0,1], segment=-1, reference=false) { [ 9, $segment_cuts[4], -10], [ -8, $segment_cuts[3], -11], [ 8, $segment_cuts[3], -11], - [-44, $segment_cuts[2], -22], - [ 44, $segment_cuts[2], -22], - [-44, $segment_cuts[2], -6], - [ 44, $segment_cuts[2], -6], + [-39, $segment_cuts[2], -6], + [ 39, $segment_cuts[2], -6], + [-37, $segment_cuts[2], -25], + [ 37, $segment_cuts[2], -25], [-10, $segment_cuts[1], -4], [ 10, $segment_cuts[1], -4], [-17, $segment_cuts[1], -16], @@ -761,22 +781,36 @@ module Steel6String(include_colours=[0,1], segment=-1, reference=false) { $reinforcing_tube_positions = [ [-17, y_end-25-CF_Tube_Len, -4.5], [ 17, y_end-25-CF_Tube_Len, -4.5], - [ 0, y0, -24], + [ 0, y0+5, -24], ]; $reinforcing_square_positions = [ - [-12, y0, -34], - [ 12, y0, -34], - [-12, y0, -24], - [ 12, y0, -24], - [-24, y0, -24], - [ 24, y0, -24], + [-12, y0+5, -34], + [ 12, y0+5, -34], + [-12, y0+5, -24.5], + [ 12, y0+5, -24.5], + [-24, y0+5, -24.5], + [ 24, y0+5, -24.5], ]; + module MyBody() { + hull() { + r = 5; + $fn=72; + for (m=[0:1]) mirror([m,0,0]) { + translate([r-30, after_fret(15)-r, -r]) sphere(r); + translate([r-32, after_fret(16)-r, r-40]) sphere(r); + translate([r-body_width/2, after_fret(20)-r, r-40]) sphere(r); + translate([r-body_width/2, after_fret(20)-r, -r]) sphere(r); + translate([r-body_width/2, y0+r, r-40]) sphere(r); + translate([r-body_width/2, y0+r, -r]) sphere(r); + } + } + } module MyNeck() { - render() TaperNeck(target_neck_thickness_additional_points = target_neck_thickness_additional_points); + render() TaperNeck(target_neck_thickness_additional_points = target_neck_thickness_additional_points) MyBody(); } - module HeadPiece(label=true) { + module HeadPiece() { string_offsets = [-2.4, 0, 2.4, -2.4, 0, 2.4]; y0 = behind_fret(0); end_radius = 12; @@ -800,21 +834,30 @@ module Steel6String(include_colours=[0,1], segment=-1, reference=false) { } } module Label() { - translate([0, lerp(y0, y_end, 0.55), z2-0.5]) linear_extrude(0.5) scale(1.0) import(file = "svgs/Ichthys.plain.svg", center=true); + translate([0, lerp(y0, y_end, 0.60), z2-0.5]) linear_extrude(0.5) scale(1.33) import(file = "svgs/Ichthys.plain.svg", center=true); } - render() difference(){ - hull() { - translate([0,y0,0]) scale([neck_width(y0)/2, 0.01, $target_neck_thickness]) sphere(r=1, $fn=360); - translate([0,y1-end_radius,0]) scale([neck_width(y1)/2, end_radius, $target_neck_thickness*1.0]) sphere(r=1, $fn=360); + module Stock() { + render() difference(){ + hull() { + translate([0,y0,0]) scale([neck_width(y0)/2, 0.01, $target_neck_thickness]) sphere(r=1, $fn=360); + translate([0,y1-end_radius,0]) scale([neck_width(y1)/2, end_radius, $target_neck_thickness*1.0]) sphere(r=1, $fn=360); + } + // Chop excess + translate([-500, y0, z2]) cube([1000, 1000, 1000]); + translate([-500, y0, z0]) rotate([10,0,0]) cube([1000, 1000, 1000]); + translate([-500, y0 - 1000, -500]) cube([1000, 1000, 1000]); } - // Chop excess - translate([-500, y0, z2]) cube([1000, 1000, 1000]); - translate([-500, y0, z0]) rotate([10,0,0]) cube([1000, 1000, 1000]); + } - translate([-500, y0 - 1000, -500]) cube([1000, 1000, 1000]); + if (list_has($include_colours, 0)) render() difference() { + Stock(); StringHoles(); Label(); } + if (list_has($include_colours, 1)) render() intersection() { + Stock(); + Label(); + } } module TunerPlacement(cutout = false, ear_extra_diameter = 0, ear_extra_height = 0, plate_clearance = 0, shaft_clearance = 0, shaft_tolerance = 0) { @@ -885,9 +928,9 @@ module Steel6String(include_colours=[0,1], segment=-1, reference=false) { } } - module Shumbucker() { - translate([-shumbucker_w1/2, -shumbucker_l/2, 0]) cube([shumbucker_w1, shumbucker_l, shumbucker_h]); - translate([-shumbucker_w2/2, -shumbucker_l/2, 0]) cube([shumbucker_w2, shumbucker_l, 4]); + module Full() { + MyNeck(); + HeadPiece(); } bridge_channel_width = 5; @@ -896,19 +939,8 @@ module Steel6String(include_colours=[0,1], segment=-1, reference=false) { if (reference) { c_cf = [0.4, 0.5, 0.5]; %MyNeck(); - %hull() { - r = 5; - $fn=72; - for (m=[0:1]) mirror([m,0,0]) { - translate([r-30, after_fret(15)-5, -r]) sphere(r); - translate([r-45, after_fret(16)-5, r-40]) sphere(r); - translate([r-45, after_fret(20)-5, -r]) sphere(r); - translate([r-45, y0+r, r-40]) sphere(r); - translate([r-45, y0+r, -r]) sphere(r); - } - } color(c_cf) Reinforcements(); - translate([0, fret_scale_length(24), 1-shumbucker_h]) Shumbucker(); + translate([0, $segment_cuts[2], -0.8]) Shumbucker(y_align="negative", z_align="negative"); // Approximate tuner placement // TunerPlacement(); // Render strings above for spacing reference @@ -919,13 +951,12 @@ module Steel6String(include_colours=[0,1], segment=-1, reference=false) { translate([string_x(i, $fsl_mm+5), $fsl_mm+5, 5]) sphere(d=$string_diameters_mm[i], $fn=cyl_ld_fn); } } - %HeadPiece(false); + %HeadPiece(); } else if (segment >= 0) { - // + Full(); } else if (segment == -1) { // String holding headpiece - echo("Making a headpiece"); - HeadPiece(); + Full(); } else if (segment == -2) { echo("Making a filler belt loop"); LoopOrTunerBlock(false); @@ -1037,12 +1068,14 @@ 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_ABS_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]); -// color(colour_scheme[2]) rotate([90,0,0]) Steel6String(from_fret=0, to_fret=23, include_colours=[2]); -// color(colour_scheme[3]) rotate([90,0,0]) Steel6String(from_fret=0, to_fret=23, include_colours=[3]); +segment = -1; +color(colour_scheme[0]) Steel6String(segment=segment, include_colours=[0]); +color(colour_scheme[1]) Steel6String(segment=segment, include_colours=[1]); +color(colour_scheme[2]) Steel6String(segment=segment, include_colours=[2]); +color(colour_scheme[3]) Steel6String(segment=segment, include_colours=[3]); +color(colour_scheme[2]) Steel6String(segment=segment, include_colours=[4]); // rotate([90,0,0]) // Steel6String(reference=true); @@ -1385,11 +1418,11 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { } // colour_scheme = COLOURSCHEME_ABS_BLUE; -colour_scheme = COLOURSCHEME_ABS_CLOWNFISH; +// colour_scheme = COLOURSCHEME_ABS_CLOWNFISH; // // TwoBangerMk2(preview=true); -segment = "pickup"; -color(colour_scheme[0]) TwoBangerMk2([0], segment); -color(colour_scheme[1]) TwoBangerMk2([1], segment); +// segment = "pickup"; +// 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);