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
|
||||
string_spacing_nut = 10; // 50mm 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
|
||||
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;
|
||||
scallop_depth = 2.5;
|
||||
_zero_fret_width = 3.0;
|
||||
scallop_depth = 2.0;
|
||||
_zero_fret_width = 3.6;
|
||||
_fret_width = 2.4;
|
||||
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)];
|
||||
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(9));
|
||||
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 = [[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
|
||||
|
||||
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(
|
||||
num_frets = num_frets,
|
||||
fret_widths = fret_widths,
|
||||
fret_angle = fret_angle,
|
||||
num_strings = num_strings,
|
||||
string_margin = string_margin,
|
||||
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([
|
||||
[
|
||||
for (i=[-1,1]) each [
|
||||
// Headside reinforcement
|
||||
[i*21.5, rx1, -4],
|
||||
[i*20.5, rx1, -4],
|
||||
// Bridgeside reinforcement
|
||||
// [i*21.5, rx0, -4],
|
||||
[i*17.25, rx0, -10],
|
||||
[i*20.5, rx0, -4],
|
||||
// [i*17.25, rx0, -10],
|
||||
// [i*17, rx0, -12],
|
||||
[i*3.95, rx0, -16.5],
|
||||
// [i*3.95, rx0, -16.5],
|
||||
]
|
||||
],
|
||||
[
|
||||
// Headside reinforcement
|
||||
[0, rx1, -4],
|
||||
[0, rx1, -11],
|
||||
// [0, rx1, -4],
|
||||
// [0, rx1, -11],
|
||||
// Bridgeside reinforcement
|
||||
// [0, rx0, -11],
|
||||
]]);
|
||||
|
@ -704,7 +729,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
// Through span construction
|
||||
span_coords = CF_Span_Coords(ply=2);
|
||||
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);
|
||||
|
||||
|
@ -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]);
|
||||
for (v = reinforcing_tube_positions) CFTubeCutout2(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() {
|
||||
x0 = fret_scale_length(0) + fret_width/2;
|
||||
function string_x(i, y) = (num_strings-i-1)*string_spacing(y) - neck_width_mm(y)/2 + string_margin;
|
||||
|
||||
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;
|
||||
x1 = x0 - rx0 + end_radius;
|
||||
z1 = scallop_depth + max_fret_height;
|
||||
module StringHoles() {
|
||||
for (i = [0:num_strings-1]) translate([(num_strings-i-1)*string_spacing - neck_width/2 + string_margin,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,23,-4]) rotate([-150,0,0]) translate([0,0,0]) cylinder(h=20, d=4, $fn=cyl_ld_fn);
|
||||
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);
|
||||
hull() {
|
||||
translate([0,29,-3.5]) sphere(d=5.5, $fn=360);
|
||||
translate([0,29+11,-17]) sphere(d=7, $fn=360);
|
||||
translate([0,0,z1+string_diameters_mm[i]]) sphere(d=string_diameters_mm[i]*2, $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(){
|
||||
hull() {
|
||||
translate([0,fret_width/2,0]) scale([neck_width/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,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_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, 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]) {
|
||||
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
|
||||
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -853,22 +890,34 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
bridge_channel_depth = 7;
|
||||
|
||||
if (reference) {
|
||||
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();
|
||||
// Approximate tuner placement
|
||||
TunerPlacement();
|
||||
// TunerPlacement();
|
||||
// Render strings above for spacing reference
|
||||
string_excess = 80;
|
||||
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) {
|
||||
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) {
|
||||
// String holding 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]);
|
||||
}
|
||||
} else {
|
||||
has0 = list_has(include_colours, 0);
|
||||
has1 = list_has(include_colours, 1);
|
||||
has2 = list_has(include_colours, 2);
|
||||
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() {
|
||||
carved_stock();
|
||||
if (!has1) intersect_fret_layers();
|
||||
|
|
Loading…
Reference in New Issue