First 0.08mm print attempt - sadly overtight tolerances
This commit is contained in:
parent
56c70c68e5
commit
f723e8c730
101
CFTubes.scad
101
CFTubes.scad
|
@ -641,15 +641,21 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
// 56mm wide neck
|
// 56mm wide neck
|
||||||
string_spacing_nut = 10; // 50mm E to e
|
string_spacing_nut = 10; // 50mm E to e
|
||||||
string_spacing_bridge = 11.2; // 56mm E to e
|
string_spacing_bridge = 11.2; // 56mm E to e
|
||||||
|
function string_spacing(y) = lerp(string_spacing_bridge, string_spacing_nut, y/fret_scale_length(0));
|
||||||
string_margin = 3; // +6
|
string_margin = 3; // +6
|
||||||
neck_width = string_spacing_bridge*(num_strings-1) + string_margin*2;
|
neck_width_nut = (num_strings-1)*string_spacing_nut + string_margin*2;
|
||||||
|
neck_width_bridge = (num_strings-1)*string_spacing_bridge + string_margin*2;
|
||||||
|
function neck_width_mm(y) = lerp(neck_width_bridge, neck_width_nut, y/fret_scale_length(0));
|
||||||
body_width = 96;
|
body_width = 96;
|
||||||
scallop_depth = 2.5;
|
scallop_depth = 2.0;
|
||||||
_zero_fret_width = 3.0;
|
_zero_fret_width = 3.6;
|
||||||
_fret_width = 2.4;
|
_fret_width = 2.4;
|
||||||
fret_widths = flatten([[_zero_fret_width], [ for (i = [1:num_frets]) _fret_width ]]);
|
fret_widths = flatten([[_zero_fret_width], [ for (i = [1:num_frets]) _fret_width ]]);
|
||||||
function get_fret_width(fret) = fret_widths[clamp(0, fret, num_frets)];
|
function get_fret_width(fret) = fret_widths[clamp(0, fret, num_frets)];
|
||||||
target_neck_thickness = 16; //22;
|
fret_angle = 60;
|
||||||
|
max_fret_width = max(fret_widths);
|
||||||
|
max_fret_height = sin(fret_angle) * max_fret_width/2;
|
||||||
|
target_neck_thickness = 16;
|
||||||
// echo(fret_scale_length(8));
|
// echo(fret_scale_length(8));
|
||||||
// echo(fret_scale_length(9));
|
// echo(fret_scale_length(9));
|
||||||
rx0 = -40; // Reinforcing rods start
|
rx0 = -40; // Reinforcing rods start
|
||||||
|
@ -658,7 +664,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
target_neck_thickness_additional_points = [];
|
target_neck_thickness_additional_points = [];
|
||||||
// target_neck_thickness_additional_points = [[rx0+CF_Tube_Len+20, 22], [0, 22]];
|
// 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, "mm"));
|
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
|
assert(fsl_mm == Fender_Scale_mm); // Make sure the function correctly uses our changed global
|
||||||
|
|
||||||
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]];
|
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]];
|
||||||
|
@ -670,6 +676,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
render() TaperNeck(
|
render() TaperNeck(
|
||||||
num_frets = num_frets,
|
num_frets = num_frets,
|
||||||
fret_widths = fret_widths,
|
fret_widths = fret_widths,
|
||||||
|
fret_angle = fret_angle,
|
||||||
num_strings = num_strings,
|
num_strings = num_strings,
|
||||||
string_margin = string_margin,
|
string_margin = string_margin,
|
||||||
string_spacing_nut = string_spacing_nut,
|
string_spacing_nut = string_spacing_nut,
|
||||||
|
@ -681,22 +688,40 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 ? (fret_scale_length(from_fret) - get_fret_width(from_fret)/2) : x0; // hacky fix for included headpiece
|
||||||
|
tolerance = reference ? 0 : 0.24;
|
||||||
|
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([
|
reinforcing_tube_positions = flatten([
|
||||||
[
|
[
|
||||||
for (i=[-1,1]) each [
|
for (i=[-1,1]) each [
|
||||||
// Headside reinforcement
|
// Headside reinforcement
|
||||||
[i*21.5, rx1, -4],
|
[i*20.5, rx1, -4],
|
||||||
// Bridgeside reinforcement
|
// Bridgeside reinforcement
|
||||||
// [i*21.5, rx0, -4],
|
[i*20.5, rx0, -4],
|
||||||
[i*17.25, rx0, -10],
|
// [i*17.25, rx0, -10],
|
||||||
// [i*17, rx0, -12],
|
// [i*17, rx0, -12],
|
||||||
[i*3.95, rx0, -16.5],
|
// [i*3.95, rx0, -16.5],
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
// Headside reinforcement
|
// Headside reinforcement
|
||||||
[0, rx1, -4],
|
// [0, rx1, -4],
|
||||||
[0, rx1, -11],
|
// [0, rx1, -11],
|
||||||
// Bridgeside reinforcement
|
// Bridgeside reinforcement
|
||||||
// [0, rx0, -11],
|
// [0, rx0, -11],
|
||||||
]]);
|
]]);
|
||||||
|
@ -704,7 +729,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
// Through span construction
|
// Through span construction
|
||||||
span_coords = CF_Span_Coords(ply=2);
|
span_coords = CF_Span_Coords(ply=2);
|
||||||
reinforcing_square_positions = [
|
reinforcing_square_positions = [
|
||||||
for (i=[-1,1]) each [ for (v = span_coords) [i*10, rx0, -10] + v ]
|
// for (i=[-1,1]) each [ for (v = span_coords) [i*10, rx0, -10] + v ]
|
||||||
];
|
];
|
||||||
echo(reinforcing_square_positions);
|
echo(reinforcing_square_positions);
|
||||||
|
|
||||||
|
@ -723,6 +748,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
translate([-100, x1, -100]) cube([200, xn-x1, 200]);
|
translate([-100, x1, -100]) cube([200, xn-x1, 200]);
|
||||||
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
|
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
|
||||||
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
|
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
|
||||||
|
truss_rods();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -749,33 +775,44 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module HeadPiece() {
|
function string_x(i, y) = (num_strings-i-1)*string_spacing(y) - neck_width_mm(y)/2 + string_margin;
|
||||||
x0 = fret_scale_length(0) + fret_width/2;
|
|
||||||
|
module HeadPiece(label=true) {
|
||||||
|
string_offsets = [-2, 0, 2.5, -2.5, 0, 2];
|
||||||
|
x0 = fret_scale_length(0) + fret_widths[0]/2;
|
||||||
end_radius = 12;
|
end_radius = 12;
|
||||||
x1 = x0 - rx0 + end_radius;
|
x1 = x0 - rx0 + end_radius;
|
||||||
|
z1 = scallop_depth + max_fret_height;
|
||||||
module StringHoles() {
|
module StringHoles() {
|
||||||
for (i = [0:num_strings-1]) translate([(num_strings-i-1)*string_spacing - neck_width/2 + string_margin,0,0]) {
|
for (i = [0:num_strings-1]) translate([string_x(i, x0),0,0]) {
|
||||||
translate([0,0,scallop_depth+fret_width/2+string_diameters_mm[i]]) rotate([-105,0,0]) cylinder(h=30, d=string_diameters_mm[i]*2, $fn=cyl_ld_fn);
|
// 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);
|
||||||
// translate([0,23,-4]) rotate([-150,0,0]) translate([0,0,0]) cylinder(h=20, d=4, $fn=cyl_ld_fn);
|
|
||||||
hull() {
|
hull() {
|
||||||
translate([0,29,-3.5]) sphere(d=5.5, $fn=360);
|
translate([0,0,z1+string_diameters_mm[i]]) sphere(d=string_diameters_mm[i]*2, $fn=360);
|
||||||
translate([0,29+11,-17]) sphere(d=7, $fn=360);
|
translate([string_offsets[i],27,-3.5]) sphere(d=min(string_diameters_mm[i]*2.2, 2.7), $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+24,-17]) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true, $fn=360);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fw2 = fret_widths[0]/2;
|
||||||
render() difference(){
|
render() difference(){
|
||||||
hull() {
|
hull() {
|
||||||
translate([0,fret_width/2,0]) scale([neck_width/2, 0.01, target_neck_thickness]) sphere(r=1, $fn=360);
|
translate([0,fw2,0]) scale([neck_width_mm(x0)/2, 0.01, target_neck_thickness]) sphere(r=1, $fn=360);
|
||||||
translate([0,-rx0-end_radius,0]) scale([neck_width/2, end_radius, target_neck_thickness*0.93]) sphere(r=1, $fn=360);
|
translate([0,-rx0-end_radius,0]) scale([neck_width_mm(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, 0, scallop_depth]) cube([1000, 1000, 1000]);
|
||||||
translate([-500, fret_width/2 - 1000, -500]) cube([1000, 1000, 1000]);
|
translate([-500, fw2 - 1000, -500]) cube([1000, 1000, 1000]);
|
||||||
translate([0, -fret_scale_length(0), 0]) {
|
translate([0, -fret_scale_length(0), 0]) {
|
||||||
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
|
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
|
||||||
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
|
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
|
||||||
}
|
}
|
||||||
StringHoles();
|
StringHoles();
|
||||||
translate([-10,fret_width/2+1,-10]) rotate([90,0,0]) linear_extrude(10) {
|
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);
|
text(str(id_line_0, id_line_1), size=2.9, halign="center", valign="center", $fn=100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -853,22 +890,34 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
||||||
bridge_channel_depth = 7;
|
bridge_channel_depth = 7;
|
||||||
|
|
||||||
if (reference) {
|
if (reference) {
|
||||||
union() {
|
translate([0, -fsl_mm, 0]) union() {
|
||||||
c_cf = [0.4, 0.5, 0.5];
|
c_cf = [0.4, 0.5, 0.5];
|
||||||
%MyNeck();
|
%MyNeck();
|
||||||
// CF square stacks
|
// CF square stacks
|
||||||
|
truss_rods();
|
||||||
for (v = reinforcing_tube_positions) color(c_cf) translate(v) CFTube();
|
for (v = reinforcing_tube_positions) color(c_cf) translate(v) CFTube();
|
||||||
for (v = reinforcing_square_positions) color(c_cf) translate(v) CFSquare();
|
for (v = reinforcing_square_positions) color(c_cf) translate(v) CFSquare();
|
||||||
// Approximate tuner placement
|
// Approximate tuner placement
|
||||||
TunerPlacement();
|
// TunerPlacement();
|
||||||
// Render strings above for spacing reference
|
// Render strings above for spacing reference
|
||||||
string_excess = 80;
|
string_excess = 80;
|
||||||
for (i = [0:num_strings-1]) {
|
for (i = [0:num_strings-1]) {
|
||||||
translate([(num_strings-i-1)*string_spacing - neck_width/2 + string_margin,0,5]) rotate([-90,0,0]) translate([0,0,-string_excess/2]) cylinder(h=fsl_mm+string_excess, d=string_diameters_mm[i], $fn=cyl_ld_fn);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
%HeadPiece(false);
|
||||||
} else if (from_fret >= 0) {
|
} else if (from_fret >= 0) {
|
||||||
RealPiece(from_fret, to_fret, include_from_fret = (from_fret==0));
|
RealPiece(from_fret, to_fret, include_from_fret = (from_fret==0));
|
||||||
|
if ((from_fret == 0) && list_has(include_colours, 0)) {
|
||||||
|
echo("Making a headpiece");
|
||||||
|
render() difference() {
|
||||||
|
translate([0, fret_scale_length(0), 0]) HeadPiece(false);
|
||||||
|
truss_rods();
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (from_fret == -1) {
|
} else if (from_fret == -1) {
|
||||||
// String holding headpiece
|
// String holding headpiece
|
||||||
echo("Making a headpiece");
|
echo("Making a headpiece");
|
||||||
|
|
|
@ -273,10 +273,18 @@ module TaperNeck(
|
||||||
translate([-neck_width_bridge, 0, 0]) cube([neck_width_bridge*2, (fret_scale_length(25)+fret_scale_length(24))/2, target_neck_thickness*3]);
|
translate([-neck_width_bridge, 0, 0]) cube([neck_width_bridge*2, (fret_scale_length(25)+fret_scale_length(24))/2, target_neck_thickness*3]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
has0 = list_has(include_colours, 0);
|
||||||
has1 = list_has(include_colours, 1);
|
has1 = list_has(include_colours, 1);
|
||||||
has2 = list_has(include_colours, 2);
|
has2 = list_has(include_colours, 2);
|
||||||
has3 = list_has(include_colours, 3);
|
has3 = list_has(include_colours, 3);
|
||||||
render() intersection() {
|
if (has0) {
|
||||||
|
render() difference() {
|
||||||
|
carved_stock();
|
||||||
|
if (!has1) intersect_fret_layers();
|
||||||
|
if (!has2) fret_inlays();
|
||||||
|
if (!has3) fret_side_markers();
|
||||||
|
}
|
||||||
|
} else render() intersection() {
|
||||||
difference() {
|
difference() {
|
||||||
carved_stock();
|
carved_stock();
|
||||||
if (!has1) intersect_fret_layers();
|
if (!has1) intersect_fret_layers();
|
||||||
|
|
Loading…
Reference in New Issue