diff --git a/CFTubes.scad b/CFTubes.scad index f3d36d4..30dfda2 100644 --- a/CFTubes.scad +++ b/CFTubes.scad @@ -1116,7 +1116,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_lines = ["Zweisaiten", "250213"]; + $id_lines = ["Zweisaiten", "250213-1"]; $fsl_mm = fret_scale_length(0); $string_diameters_thous = [80, 105]; // Artist BST45130 @@ -1162,7 +1162,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { // mirror([i,0,0]) translate([15, (i*32)-66, -26]) rotate([0, -90, 0]) UBassTuner(from_side=false, from_below=true); // Tuners to the top, knobs pointing out the back for (i=[0:1]) - mirror([i,0,0]) translate([-3.5, -78, -32]) rotate([0, 0, -90]) UBassTuner(from_side=false, from_below=true); + mirror([i,0,0]) translate([-3.5, -78, -32]) rotate([0, 0, -90]) UBassTuner(from_side=false, from_below=true, hole_tolerance=0.5); // rotate([180, -90, 0]) UBassTuner(from_side=false, from_below=true); } @@ -1344,7 +1344,9 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { color("#FF000080") MyBody(); strings_reference(30); } else render() { - if (segment < 0) { + if (segment == "bridge") { + FlatBridge(); + } else if (segment < 0) { MyBody(); } else { difference() { @@ -1363,7 +1365,7 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) { colour_scheme = COLOURSCHEME_ABS_BLUE; // TwoBangerMk2(preview=true); -segment = 0; +segment = "bridge"; color(colour_scheme[0]) TwoBangerMk2([0], segment); color(colour_scheme[1]) TwoBangerMk2([1], segment); color(colour_scheme[2]) TwoBangerMk2([2], segment); diff --git a/CFTubes/common.scad b/CFTubes/common.scad index f2d3819..0c0ff15 100644 --- a/CFTubes/common.scad +++ b/CFTubes/common.scad @@ -213,7 +213,7 @@ module TrussRod(length = 630, tolerance = 0, taper_l = 3.0, taper_extra = 1.0, t ]; TrussRodGeneric(length=length, tolerance=tolerance, stages=stages, taper_l=taper_l, taper_extra=taper_extra, taper_points=taper_points, extra=extra); } -module TrussRodSingleAction(length = 460, tolerance = 0, taper_l = 1.5, taper_extra = 1.0, taper_points=[], extra=false) { +module TrussRodSingleAction(length = 460, tolerance = 0, taper_l = 3.0, taper_extra = 1.0, taper_points=[], extra=false) { // base profile base_d = 4.6 + tolerance; base_w = 6.1 + tolerance; diff --git a/EllipticalNeck.scad b/EllipticalNeck.scad index 4bd6e20..7c22026 100644 --- a/EllipticalNeck.scad +++ b/EllipticalNeck.scad @@ -346,3 +346,38 @@ module TaperNeck( } } } + +module FlatBridge(saddle_height = 10, base_height = 6, y_len = 15) { + // A bridge with no channel notch or piezo strip notch, to be printed more easily for coil-only guitars + // Base + render() difference() { + // Flatten off a rounded cube + r = 0.6; + translate([-neck_width()/2, 0, -r]) round_cube([neck_width(), y_len, base_height+r], r=r); + translate([-neck_width()/2, 0, -r]) cube([neck_width(), y_len, r]); + // screw hole just in case + translate([0, y_len/2, 0]) cylinder_outer(d=2.25, h=base_height); + countersink = 3; + translate([0, y_len/2, base_height-countersink]) cylinder_outer(d=5, h=countersink); + } + // String saddles - rule of thumb: string diameter multiplied by 4 + // Make the thinnest string sit right at the front + m = 4; + saddle_y0 = 2.5; //1.2; + saddle_y1 = -3.7; + r0 = 0.85; + y_start = y_len + min($string_diameters_mm)*m - (r0+saddle_y0); + for (i = [0:$num_strings-1]) translate([($num_strings-i-1)*string_spacing(0) - neck_width()/2 + $string_margin, y_start - $string_diameters_mm[i]*m, base_height]) { + step = ($preview) ? 9 : 3; + r1 = r0 + $string_diameters_mm[i]*1.2; + r2 = r0 + $string_diameters_mm[i]*1.1; + translate([0, 0, saddle_height]) for (a=[90:step:270-step]) hull() { + translate([-sin(a)*r1, 0, cos(a)*r2]) sphere(r=r0, $fn=cyl_ld_fn); + translate([-sin(a+step)*r1, 0, cos(a+step)*r2]) sphere(r=r0, $fn=cyl_ld_fn); + translate([-sin(a)*r1, saddle_y0, -saddle_height-r0]) sphere(r=r0, $fn=cyl_ld_fn); + translate([-sin(a+step)*r1, saddle_y0, -saddle_height-r0]) sphere(r=r0, $fn=cyl_ld_fn); + translate([-sin(a)*r1, saddle_y1, -saddle_height-r0]) sphere(r=r0, $fn=cyl_ld_fn); + translate([-sin(a+step)*r1, saddle_y1, -saddle_height-r0]) sphere(r=r0, $fn=cyl_ld_fn); + } + } +} \ No newline at end of file diff --git a/UBassTuner.scad b/UBassTuner.scad index fc63d96..11bc194 100644 --- a/UBassTuner.scad +++ b/UBassTuner.scad @@ -1,11 +1,11 @@ -module UBassTuner(from_below=false, from_side=true) { +module UBassTuner(from_below=false, from_side=true, hole_tolerance=0) { t_base = 11; - d_thread = 11.0 + 0.25; - d_collar = 13.8 + 0.2; // Add some tolerance + d_thread = 11.0 + 0.25 + hole_tolerance; + d_collar = 13.8 + 0.2 + hole_tolerance; // Add some tolerance l_collar = 8; // doesn't include hex l_collarnut_to_top_of_peg = 19; //22; - d_top_of_peg = 16+2; + d_top_of_peg = 16+2 + hole_tolerance; max_thread = 5.0; // thread to cover without the collar w_tag = 19; l_tag = 32.5; @@ -29,7 +29,7 @@ module UBassTuner(from_below=false, from_side=true) { module tuner_footprint() { hull() { translate([-w_tag/2, -l_tag+d_screw_tab/2]) square([w_tag, l_tag_rect]); - circle(d=d_screw_tab, $fn=72); + translate([0, 1.0]) circle(d=d_screw_tab, $fn=72); } } module tuner_footprint_extrude(h) { @@ -37,7 +37,7 @@ module UBassTuner(from_below=false, from_side=true) { // src/openscad/src/geometry/linear_extrude.cc:409: std::unique_ptr extrudePolygon(const LinearExtrudeNode&, const Polygon2d&): Assertion `poly.isSanitized()' failed. hull() { translate([-w_tag/2, -l_tag+d_screw_tab/2, 0]) cube([w_tag, l_tag_rect, h]); - cylinder(h=h, d=d_screw_tab, $fn=72); + translate([0, 0.75, 0]) cylinder(h=h, d=d_screw_tab, $fn=72); } } module holes() {