[WIP] Revising Steel6String
This commit is contained in:
parent
4a351ec4a0
commit
31aff13e42
269
CFTubes.scad
269
CFTubes.scad
|
@ -14,6 +14,7 @@ include <EllipticalNeck.scad>
|
|||
|
||||
shumbucker_h = 20.3;
|
||||
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
|
||||
relay_coil_housing_w = 15.2;
|
||||
|
@ -661,10 +662,11 @@ module Nylon6String(render_colour_0=true, render_colour_1=true, render_colour_2=
|
|||
|
||||
|
||||
|
||||
module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||
module Steel6String(include_colours, segment=-1, reference=false) {
|
||||
// Artist Strat clone has a neck thickness of about 20mm at the 12th fret, where we want to overlap the truss rods
|
||||
// We will probably have to overlap them horizontally, far from ideal, to achieve the desired thinness.
|
||||
$include_colours = include_colours;
|
||||
$id_line_0 = "ABS";
|
||||
$id_line_1 = "2";
|
||||
$id_lines = ["ABS", "2"];
|
||||
$guitar_scale_length_mm = Fender_Scale_mm;
|
||||
$fsl_mm = fret_scale_length(0);
|
||||
|
||||
|
@ -674,7 +676,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
$num_frets = 22;
|
||||
$num_strings = 6;
|
||||
// 56mm wide neck
|
||||
$string_spacing_nut = 10; // 50mm E to e
|
||||
$string_spacing_nut = 9; // 45mm E to e
|
||||
$string_spacing_bridge = 11.2; // 56mm E to e
|
||||
$string_margin = 3; // +6
|
||||
$neck_width_nut = default_neck_width_nut();
|
||||
|
@ -682,113 +684,68 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
body_width = 96;
|
||||
$scallop_depth = 2.0;
|
||||
$fret_widths = default_fret_widths(3.6, 2.4);
|
||||
$fret_angle = 60;
|
||||
$fret_angle = 50;
|
||||
$target_neck_thickness = 16;
|
||||
// echo(fret_scale_length(8));
|
||||
// echo(fret_scale_length(9));
|
||||
rx0 = -40; // Reinforcing rods start
|
||||
rx1 = rx0+280;
|
||||
// rx0 = -40; // Reinforcing rods start
|
||||
// rx1 = rx0+280;
|
||||
|
||||
|
||||
// Artist Strat has about 18cm of headstock and 10cm past bridge on body
|
||||
y0 = -160;
|
||||
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];
|
||||
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 = [];
|
||||
// target_neck_thickness_additional_points = [[rx0+CF_Tube_Len+20, 22], [0, 22]];
|
||||
|
||||
echo(str("Making a Steel 6 String with scale length ", fsl_mm, "mm = ", fsl_mm/25.4, "in and neck width ", neck_width_nut, "mm"));
|
||||
assert(fsl_mm == Fender_Scale_mm); // Make sure the function correctly uses our changed global
|
||||
// trussrod_y = 265;
|
||||
$trussrod_positions = [
|
||||
[[0, y_end-3, -9.5], [0, 0, 180], "TrussRodSingleAction"],
|
||||
// [[-8, y0, -32], [1.3, 0, 0], "TrussRod"],
|
||||
];
|
||||
$trussrods_extra = 0;
|
||||
$dowel_positions = [
|
||||
[ -9, $segment_cuts[4], -10],
|
||||
[ 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],
|
||||
[-10, $segment_cuts[1], -4],
|
||||
[ 10, $segment_cuts[1], -4],
|
||||
[-17, $segment_cuts[1], -16],
|
||||
[ 17, $segment_cuts[1], -16],
|
||||
];
|
||||
$reinforcing_tube_positions = [
|
||||
[-17, y_end-25-CF_Tube_Len, -4.5],
|
||||
[ 17, y_end-25-CF_Tube_Len, -4.5],
|
||||
[ 0, y0, -24],
|
||||
];
|
||||
$reinforcing_square_positions = [
|
||||
[-12, y0, -34],
|
||||
[ 12, y0, -34],
|
||||
[-12, y0, -24],
|
||||
[ 12, y0, -24],
|
||||
[-24, y0, -24],
|
||||
[ 24, y0, -24],
|
||||
];
|
||||
|
||||
function CF_Span_Coords(full_length = 700, ply = 3) = [for (i=[0:ply-1]) [0, lerp(0, full_length-CF_Tube_Len, i/(ply-1)), CF_Square_Width*i]];
|
||||
module CF_Span(full_length = 700, ply = 3, hole = true) {
|
||||
for (v = CF_Span_Coords(full_length, ply))
|
||||
translate(v) CFSquare(hole=hole);
|
||||
}
|
||||
module MyNeck(inlays_only=false, side_markers_only=false, fret_layers_only=false, engrave_markers=false, remove_fret_layers=false) {
|
||||
render() TaperNeck(target_neck_thickness_additional_points = target_neck_thickness_additional_points);
|
||||
}
|
||||
|
||||
module truss_rods() {
|
||||
include_from_fret = (from_fret==0);
|
||||
x0 = fret_scale_length(to_fret) - get_fret_width(to_fret)/2;
|
||||
//x1 = fret_scale_length(from_fret) + ((include_from_fret)?1:(-1)) * get_fret_width(from_fret)/2;
|
||||
x1 = include_from_fret ? x0 : (fret_scale_length(from_fret) - get_fret_width(from_fret)/2); // hacky fix for included headpiece
|
||||
tolerance = reference ? 0 : 0.6;
|
||||
rod_mm = 630;
|
||||
v = [0, 40, -9];
|
||||
// Nut facing bridge
|
||||
// o = v[1];
|
||||
// taper_points = reference ? [] : [x0-o, x1-o];
|
||||
// translate(v) TrussRod(taper_points = taper_points, tolerance = tolerance, extra = !reference);
|
||||
// Nut facing headstock
|
||||
o = v[1];
|
||||
taper_points = reference ? [] : [rod_mm-(x0-o), rod_mm-(x1-o)];
|
||||
translate(v + [0, rod_mm, 0]) rotate([0, 0, 180]) TrussRod(taper_points = taper_points, tolerance = tolerance, extra = !reference);
|
||||
}
|
||||
|
||||
reinforcing_tube_positions = flatten([
|
||||
[
|
||||
for (i=[-1,1]) each [
|
||||
// Headside reinforcement
|
||||
[i*20.5, rx1, -4],
|
||||
// Bridgeside reinforcement
|
||||
[i*20.5, rx0, -4],
|
||||
// [i*17.25, rx0, -10],
|
||||
// [i*17, rx0, -12],
|
||||
// [i*3.95, rx0, -16.5],
|
||||
]
|
||||
],
|
||||
[
|
||||
// Headside reinforcement
|
||||
// [0, rx1, -4],
|
||||
// [0, rx1, -11],
|
||||
// Bridgeside reinforcement
|
||||
// [0, rx0, -11],
|
||||
]]);
|
||||
echo(reinforcing_tube_positions);
|
||||
// Through span construction
|
||||
rx2 = fret_scale_length(15) - CF_Tube_Len;
|
||||
reinforcing_square_positions = flatten([
|
||||
[
|
||||
for (i=[-1,1]) each [
|
||||
// Headside reinforcement
|
||||
// [i*20.5, rx1, -4],
|
||||
// Bridgeside reinforcement
|
||||
[i*12, rx2, -6],
|
||||
// [i*17.25, rx2, -10],
|
||||
// [i*17, rx0, -12],
|
||||
// [i*3.95, rx0, -16.5],
|
||||
]
|
||||
],
|
||||
[
|
||||
// Headside reinforcement
|
||||
// [0, rx1, -4],
|
||||
// [0, rx1, -11],
|
||||
// Bridgeside reinforcement
|
||||
// [0, rx0, -11],
|
||||
]]);
|
||||
echo(reinforcing_square_positions);
|
||||
|
||||
|
||||
// neck(num_frets=num_frets, num_strings=num_strings, string_margin=string_margin, string_spacing=string_spacing);
|
||||
// %neck(num_frets=num_frets, num_strings=num_strings, string_margin=string_margin, string_spacing=string_spacing, scallop_depth=scallop_depth, target_neck_thickness=target_neck_thickness);
|
||||
module NeckFragment(from_fret, to_fret, to_origin=true, include_from_fret=false) {
|
||||
x0 = fret_scale_length(to_fret) - get_fret_width(to_fret)/2;
|
||||
x1 = fret_scale_length(from_fret) + ((include_from_fret)?1:(-1)) * get_fret_width(from_fret)/2;
|
||||
xn = fsl_mm + fret_widths[0];
|
||||
|
||||
//translate([0,to_origin ? -x0 : 0,0])
|
||||
render() difference() {
|
||||
MyNeck();
|
||||
translate([-100, 0, -100]) cube([200, x0, 200]);
|
||||
translate([-100, x1, -100]) cube([200, xn-x1, 200]);
|
||||
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
|
||||
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
|
||||
truss_rods();
|
||||
}
|
||||
}
|
||||
|
||||
module RealPiece(from_fret, to_fret, include_from_fret=false) {
|
||||
// midpoint = (fret_scale_length(from_fret) - fret_scale_length(to_fret) + (include_from_fret ? fret_width : 0))/2;
|
||||
module IDText(thickness = 0.2, inset = 0, extra_line=str("F", to_fret)) {
|
||||
translate([0,0,-8]) rotate([-90,180,180]) translate([0,0,-thickness-inset]) linear_extrude(thickness) {
|
||||
text(str(id_line_0, id_line_1), size=2.25, halign="center", valign="center", $fn=100);
|
||||
text(str($id_lines[0], $id_lines[1]), size=2.25, halign="center", valign="center", $fn=100);
|
||||
translate([0,-3]) text(extra_line, size=2.25, halign="center", valign="center", $fn=100);
|
||||
}
|
||||
}
|
||||
|
@ -807,46 +764,44 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
}
|
||||
}
|
||||
|
||||
function string_x(i, y) = (num_strings-i-1)*string_spacing(y) - neck_width(y)/2 + string_margin;
|
||||
|
||||
module HeadPiece(label=true) {
|
||||
string_offsets = [-2.5, 0, 2.5, -2.5, 0, 2.5];
|
||||
x0 = fret_scale_length(0) + fret_widths[0]/2;
|
||||
string_offsets = [-2.4, 0, 2.4, -2.4, 0, 2.4];
|
||||
y0 = behind_fret(0);
|
||||
end_radius = 12;
|
||||
x1 = x0 - rx0 + end_radius;
|
||||
z1 = scallop_depth + max_fret_height;
|
||||
y1 = y0 + headstock_length;
|
||||
z0 = $scallop_depth;
|
||||
z1 = z0 + get_max_fret_height();
|
||||
z2 = z0 + 2.5; //get_max_fret_height();
|
||||
module StringHoles() {
|
||||
for (i = [0:num_strings-1]) translate([string_x(i, x0),0,0]) {
|
||||
// translate([0,0,z1+string_diameters_mm[i]]) rotate([-105,0,0]) cylinder(h=30, d=string_diameters_mm[i]*2, $fn=cyl_ld_fn);
|
||||
for (i = [0:$num_strings-1]) translate([string_x(i, y0),y0,0]) {
|
||||
string_v = [0,0,z1+$string_diameters_mm[i]];
|
||||
ballend_v = [string_offsets[i],27,-3.5];
|
||||
hull() {
|
||||
translate([0,0,z1+string_diameters_mm[i]]) sphere(d=min(2.6, string_diameters_mm[i]*1.2 + 1), $fn=360);
|
||||
translate([string_offsets[i],27,-3.5]) sphere(d=2.6, $fn=360);
|
||||
translate(string_v) sphere(d=min(2.6, $string_diameters_mm[i]*1.2 + 1), $fn=360);
|
||||
translate(ballend_v) sphere(d=2.6, $fn=360);
|
||||
}
|
||||
hull() {
|
||||
// String ball ends are roughly 3mm by 4mm cylinder(d=4, h=3)
|
||||
// translate([string_offsets[i],29,-3.5]) sphere(d=5.5, $fn=360);
|
||||
// translate([string_offsets[i],29+11,-17]) sphere(d=7, $fn=360);
|
||||
translate([string_offsets[i],27,-3.5]) rotate([0, 90, 0]) cylinder(d=4.5, h=3.5, center=true, $fn=360);
|
||||
translate([string_offsets[i],27+27,-17]) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true, $fn=360);
|
||||
translate(ballend_v) rotate([0, 90, 0]) cylinder(d=4.5, h=3.5, center=true, $fn=360);
|
||||
translate(ballend_v+ballend_v-string_v) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true, $fn=360);
|
||||
}
|
||||
}
|
||||
}
|
||||
fw2 = fret_widths[0]/2;
|
||||
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);
|
||||
}
|
||||
render() difference(){
|
||||
hull() {
|
||||
translate([0,fw2,0]) scale([neck_width(x0)/2, 0.01, target_neck_thickness]) sphere(r=1, $fn=360);
|
||||
translate([0,-rx0-end_radius,0]) scale([neck_width(x1)/2, end_radius, target_neck_thickness*1.0]) sphere(r=1, $fn=360);
|
||||
}
|
||||
translate([-500, 0, scallop_depth]) cube([1000, 1000, 1000]);
|
||||
translate([-500, fw2 - 1000, -500]) cube([1000, 1000, 1000]);
|
||||
translate([0, -fret_scale_length(0), 0]) {
|
||||
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
|
||||
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
|
||||
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]);
|
||||
StringHoles();
|
||||
if (label) translate([-10,fw2+1,-10]) rotate([90,0,0]) linear_extrude(10) {
|
||||
text(str(id_line_0, id_line_1), size=2.9, halign="center", valign="center", $fn=100);
|
||||
}
|
||||
Label();
|
||||
}
|
||||
// StringHoles();
|
||||
}
|
||||
|
@ -918,25 +873,29 @@ module Steel6String(include_colours, from_fret=0, to_fret=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]);
|
||||
}
|
||||
|
||||
bridge_channel_width = 5;
|
||||
bridge_channel_depth = 7;
|
||||
|
||||
if (reference) {
|
||||
/*translate([0, -fsl_mm, 0]) */union() {
|
||||
/*translate([0, -$fsl_mm, 0]) */union() {
|
||||
c_cf = [0.4, 0.5, 0.5];
|
||||
%MyNeck();
|
||||
// CF square stacks
|
||||
truss_rods();
|
||||
for (v = reinforcing_tube_positions) color(c_cf) translate(v) CFTube();
|
||||
for (v = reinforcing_square_positions) color(c_cf) translate(v) CFSquare();
|
||||
color(c_cf) Reinforcements();
|
||||
translate([0, fret_scale_length(24), 1-shumbucker_h]) Shumbucker();
|
||||
// Approximate tuner placement
|
||||
// TunerPlacement();
|
||||
// Render strings above for spacing reference
|
||||
string_excess = 80;
|
||||
for (i = [0:num_strings-1]) {
|
||||
for (i = [0:$num_strings-1]) {
|
||||
hull() {
|
||||
translate([string_x(i, -string_excess), -string_excess, 5]) sphere(d=string_diameters_mm[i], $fn=cyl_ld_fn);
|
||||
translate([string_x(i, fsl_mm+5), fsl_mm+5, 5]) sphere(d=string_diameters_mm[i], $fn=cyl_ld_fn);
|
||||
translate([string_x(i, -string_excess), -string_excess, 5]) sphere(d=$string_diameters_mm[i], $fn=cyl_ld_fn);
|
||||
translate([string_x(i, $fsl_mm+5), $fsl_mm+5, 5]) sphere(d=$string_diameters_mm[i], $fn=cyl_ld_fn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1054,35 +1013,6 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
}
|
||||
}
|
||||
|
||||
// echo(fret_scale_length(0) - fret_scale_length(8)); // 225.724
|
||||
// echo(fret_scale_length(8) - fret_scale_length(24)); // 240.335
|
||||
// fret_tube(0, 8);
|
||||
// //translate([30, 0, 0])
|
||||
// fret_tube(8, 24);
|
||||
|
||||
// headpiece();
|
||||
// UBassTuner();
|
||||
|
||||
// fret_tube_filler(24, 100);
|
||||
// tailpiece();
|
||||
// bridge();
|
||||
|
||||
// Guitar_Scale_Length_mm = Classical_Short_Scale_mm;
|
||||
// Nylon6String(reference=true);
|
||||
// translate([0, fret_scale_length(22), 0]) Nylon6String(from_fret=0, to_fret=22);
|
||||
// translate([0, Guitar_Scale_Length_mm, 0]) rotate([0,0,180]) Nylon6String(reference=true);
|
||||
// rotate([0,0,180]) Nylon6String(from_fret=-1);
|
||||
// Nylon6String(from_fret=-2);
|
||||
// Nylon6String(from_fret=-3);
|
||||
// Nylon6String(from_fret=-4);
|
||||
// %Nylon6String(from_fret=-5);
|
||||
|
||||
// difference() {
|
||||
// translate([-15, -60, 0]) cube([50, 120, 8]);
|
||||
// translate([0, 55, 3]) rotate([180,0,0]) NylonTuner();
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// Colour schemes
|
||||
include <BambuColours.scad>
|
||||
|
@ -1095,12 +1025,13 @@ COLOURSCHEME_ABS_BLUE = [BAMBU_ABS_NAVY_BLUE, 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_BLUE;
|
||||
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]);
|
||||
// rotate([90,0,0]) Steel6String(include_colours=[0,1,2,3], reference=true);
|
||||
// rotate([90,0,0])
|
||||
Steel6String(include_colours=[0,1,2,3], reference=true);
|
||||
|
||||
// TrussRodSingleAction();
|
||||
// translate([20, 0]) TrussRod();
|
||||
|
@ -1374,11 +1305,11 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) {
|
|||
}
|
||||
|
||||
// colour_scheme = COLOURSCHEME_ABS_BLUE;
|
||||
colour_scheme = COLOURSCHEME_ABS_CLOWNFISH;
|
||||
// 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);
|
||||
// colour_scheme = COLOURSCHEME_ABS_CLOWNFISH;
|
||||
// // 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);
|
||||
|
|
|
@ -250,12 +250,12 @@ module TrussRods(extra=0, tolerance=0.6) {
|
|||
}
|
||||
}
|
||||
}
|
||||
module CFs(taper_length = 2, taper_mul = 1.1, tolerance = CF_Tube_OD_tolerance) {
|
||||
module CFs(taper_length = 2, taper_mul = 1.1, tolerance = CF_Tube_OD_tolerance, tolerance_length = CF_Square_Width_tolerance) {
|
||||
d = CF_Tube_OD + tolerance;
|
||||
taper_OD = (CF_Tube_OD*taper_mul) + tolerance;
|
||||
l = CF_Tube_Len;
|
||||
l = CF_Tube_Len;// + tolerance_length*2;
|
||||
$fn = 90;
|
||||
for (v = $reinforcing_tube_positions) {
|
||||
if (!is_undef($reinforcing_tube_positions)) for (v = $reinforcing_tube_positions) {
|
||||
y0 = v[1];
|
||||
y1 = y0+l;
|
||||
translate(v = v) rotate([-90, 0, 0]) cylinder_beak(d=d, h=l);
|
||||
|
@ -272,6 +272,37 @@ module CFs(taper_length = 2, taper_mul = 1.1, tolerance = CF_Tube_OD_tolerance)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
w = CF_Square_Width + tolerance;
|
||||
taper_w = (CF_Square_Width * taper_mul) + tolerance;
|
||||
taper_epsilon = 0.00001;
|
||||
if (!is_undef($reinforcing_square_positions)) for (v = $reinforcing_square_positions) {
|
||||
y0 = v[1];
|
||||
y1 = y0+l;
|
||||
// Full square rod, unconditional
|
||||
translate([v[0]-w/2, v[1], v[2]-w/2]) cube([w, l, w]);
|
||||
for (cut_y = $segment_cuts) {
|
||||
if (cut_y == y0) {
|
||||
// Taper in only (beginning of segment)
|
||||
hull() {
|
||||
translate([v[0], cut_y+taper_epsilon/2, v[2]]) cube([taper_w, taper_epsilon, taper_w], center=true);
|
||||
translate([v[0], cut_y+taper_length/2, v[2]]) cube([w, taper_length, w], center=true);
|
||||
}
|
||||
} else if (cut_y == y1) {
|
||||
// Taper out only (end of segment)
|
||||
hull() {
|
||||
translate([v[0], cut_y-taper_epsilon/2, v[2]]) cube([taper_w, taper_epsilon, taper_w], center=true);
|
||||
translate([v[0], cut_y-taper_length/2, v[2]]) cube([w, taper_length, w], center=true);
|
||||
}
|
||||
} else if ((y1 > cut_y) && (cut_y > y0)) {
|
||||
// Taper in and out (tube spans multiple segments)
|
||||
hull() {
|
||||
translate([v[0], cut_y, v[2]]) cube([taper_w, taper_epsilon, taper_w], center=true);
|
||||
translate([v[0], cut_y, v[2]]) cube([w, taper_length*2, w], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
module Dowels() {
|
||||
for (v = $dowel_positions) translate(v) Dowel();
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// Include after common.scad
|
||||
$extra_thickness_above_center = is_undef($extra_thickness_above_center) ? 0 : $extra_thickness_above_center;
|
||||
|
||||
function default_fret_widths(zero_fret_width, other_fret_width) = flatten([[zero_fret_width], [ for (i = [1:$num_frets]) other_fret_width ]]);
|
||||
function default_neck_width_nut() = ($num_strings-1)*$string_spacing_nut + $string_margin*2;
|
||||
|
@ -276,6 +277,7 @@ module TaperNeck(
|
|||
desired_fontsize = min(fontsize_from_max_height, fontsize_from_max_width);
|
||||
fontsize = clamp(2, desired_fontsize, 10);
|
||||
t = num_text[1];
|
||||
// TODO: account for shallow scallops
|
||||
translate([0, y_mid, z0-0.5]) linear_extrude(30) {
|
||||
if (t == ".") {
|
||||
circle(d=fontsize*0.9, $fn=72);
|
||||
|
|
Loading…
Reference in New Issue