Special Variables refactoring, Pt2
This commit is contained in:
parent
24e7ec255c
commit
27f7af976d
164
CFTubes.scad
164
CFTubes.scad
|
@ -636,33 +636,28 @@ 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) {
|
||||
id_line_0 = "ABS";
|
||||
id_line_1 = "2";
|
||||
fsl_mm = fret_scale_length(0);
|
||||
$include_colours = include_colours;
|
||||
$id_line_0 = "ABS";
|
||||
$id_line_1 = "2";
|
||||
$guitar_scale_length_mm = Fender_Scale_mm;
|
||||
$fsl_mm = fret_scale_length(0);
|
||||
|
||||
string_diameters_thous = [9, 11, 16, 24, 32, 42]; // Artist ELST942
|
||||
string_diameters_mm = string_diameters_thous * 0.0254;
|
||||
$string_diameters_thous = [9, 11, 16, 24, 32, 42]; // Artist ELST942
|
||||
$string_diameters_mm = $string_diameters_thous * 0.0254;
|
||||
|
||||
num_frets = 22;
|
||||
num_strings = 6;
|
||||
$num_frets = 22;
|
||||
$num_strings = 6;
|
||||
// 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_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));
|
||||
$string_spacing_nut = 10; // 50mm E to e
|
||||
$string_spacing_bridge = 11.2; // 56mm E to e
|
||||
$string_margin = 3; // +6
|
||||
$neck_width_nut = default_neck_width_nut();
|
||||
$neck_width_bridge = default_neck_width_bridge();
|
||||
body_width = 96;
|
||||
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)];
|
||||
fret_angle = 60;
|
||||
max_fret_width = max(fret_widths);
|
||||
max_fret_height = sin(fret_angle) * max_fret_width/2;
|
||||
target_neck_thickness = 16;
|
||||
$scallop_depth = 2.0;
|
||||
$fret_widths = default_fret_widths(3.6, 2.4);
|
||||
$fret_angle = 60;
|
||||
$target_neck_thickness = 16;
|
||||
// echo(fret_scale_length(8));
|
||||
// echo(fret_scale_length(9));
|
||||
rx0 = -40; // Reinforcing rods start
|
||||
|
@ -680,19 +675,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
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(
|
||||
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,
|
||||
string_spacing_bridge = string_spacing_bridge,
|
||||
scallop_depth = scallop_depth,
|
||||
target_neck_thickness = target_neck_thickness,
|
||||
target_neck_thickness_additional_points = target_neck_thickness_additional_points,
|
||||
include_colours = include_colours,
|
||||
);
|
||||
render() TaperNeck(target_neck_thickness_additional_points = target_neck_thickness_additional_points);
|
||||
}
|
||||
|
||||
module truss_rods() {
|
||||
|
@ -798,7 +781,7 @@ 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_mm(y)/2 + string_margin;
|
||||
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];
|
||||
|
@ -825,8 +808,8 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
|
|||
fw2 = fret_widths[0]/2;
|
||||
render() difference(){
|
||||
hull() {
|
||||
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([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]);
|
||||
|
@ -1105,41 +1088,31 @@ 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_line_0 = "ABS";
|
||||
id_line_1 = "2";
|
||||
fsl_mm = fret_scale_length(0);
|
||||
$id_line_0 = "ABS";
|
||||
$id_line_1 = "2";
|
||||
$fsl_mm = fret_scale_length(0);
|
||||
|
||||
string_diameters_thous = [80, 105]; // Artist BST45130
|
||||
string_diameters_mm = string_diameters_thous * 0.0254;
|
||||
$string_diameters_thous = [80, 105]; // Artist BST45130
|
||||
$string_diameters_mm = $string_diameters_thous * 0.0254;
|
||||
|
||||
neck_width_nut = 32; //(num_strings-1)*string_spacing_nut + string_margin*2;
|
||||
neck_width_bridge = 32; //(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));
|
||||
target_neck_thickness = 16;
|
||||
$neck_width_nut = 32;
|
||||
$neck_width_bridge = 32;
|
||||
$target_neck_thickness = 16;
|
||||
|
||||
num_strings = 2;
|
||||
string_spacing_nut = 20;
|
||||
string_spacing_bridge = 20;
|
||||
function string_spacing(y) = lerp(string_spacing_bridge, string_spacing_nut, y/fret_scale_length(0));
|
||||
string_margin = 6;
|
||||
function string_x(i, y) = (num_strings-i-1)*string_spacing(y) - neck_width_mm(y)/2 + string_margin;
|
||||
$num_strings = 2;
|
||||
$string_spacing_nut = 20;
|
||||
$string_spacing_bridge = 20;
|
||||
$string_margin = 6;
|
||||
|
||||
num_frets = 30;
|
||||
_zero_fret_width = 3.6;
|
||||
_fret_width = 2.4;
|
||||
fret_widths = flatten([[_zero_fret_width], [ for (i = [1:num_frets]) _fret_width ]]);
|
||||
fret_angle = 60;
|
||||
function get_fret_width(fret) = fret_widths[clamp(0, fret, num_frets)];
|
||||
function get_fret_height(fret) = sin(fret_angle) * get_fret_width(fret)/2;
|
||||
max_fret_width = max(fret_widths);
|
||||
max_fret_height = sin(fret_angle) * max_fret_width/2;
|
||||
scallop_depth = 2.5;
|
||||
extra_height = 6;
|
||||
$num_frets = 30;
|
||||
$fret_widths = default_fret_widths(3.6, 2.4);
|
||||
$fret_angle = 60;
|
||||
$scallop_depth = 2.5;
|
||||
$extra_thickness_above_center = 6;
|
||||
|
||||
function behind_fret(fret) = fret_scale_length(fret) + fret_widths[fret]/2;
|
||||
function after_fret(fret) = fret_scale_length(fret) - fret_widths[fret]/2;
|
||||
segment_cuts = [-100, after_fret(num_frets), after_fret(29), after_fret(13), after_fret(5), behind_fret(0)+35];
|
||||
segment_cuts = [-100, after_fret($num_frets), after_fret(29), after_fret(13), after_fret(5), behind_fret(0)+35];
|
||||
echo(segment_cuts);
|
||||
echo([ for (i=[1:len(segment_cuts)-1]) segment_cuts[i]-segment_cuts[i-1]]);
|
||||
|
||||
|
@ -1177,27 +1150,29 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) {
|
|||
end_radius = 25;
|
||||
x2 = x0 + 30;
|
||||
x1 = x2 - end_radius;
|
||||
z0 = scallop_depth + extra_height;
|
||||
z1 = scallop_depth + max_fret_height + extra_height;
|
||||
z0 = $scallop_depth + $extra_thickness_above_center;
|
||||
z1 = $scallop_depth + get_max_fret_height() + $extra_thickness_above_center;
|
||||
module StringHoles() {
|
||||
for (i = [0:num_strings-1]) translate([string_x(i, x0),0,0]) {
|
||||
$fn=360;
|
||||
for (i = [0:$num_strings-1]) translate([string_x(i, x0),0,0]) {
|
||||
ballend_v = [0,x1+10,-3];
|
||||
hull() {
|
||||
translate([0,fret_scale_length(0),z1+string_diameters_mm[i]/2]) sphere(d=min(2.6, string_diameters_mm[i]*1.2 + 1), $fn=360);
|
||||
translate(ballend_v) sphere(d=2.6, $fn=360);
|
||||
translate([0,fret_scale_length(0),z1+$string_diameters_mm[i]/2]) sphere(d=min(2.6, $string_diameters_mm[i]*1.2 + 1));
|
||||
translate(ballend_v) sphere(d=2.6);
|
||||
}
|
||||
hull() {
|
||||
// String ball ends are roughly 3mm by 4mm cylinder(d=4, h=3)
|
||||
// Bass string ball ends are roughly 3mm by 4mm cylinder(d=6, h=4.5)
|
||||
translate(ballend_v) rotate([0, 90, 0]) cylinder(d=4.5, h=3.5, center=true, $fn=360);
|
||||
translate([0,x2,-30]) 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);
|
||||
translate([0,x2,-30]) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (list_has(include_colours, 0)) render() difference(){
|
||||
$fn=360;
|
||||
hull() {
|
||||
translate([0,x0,0]) scale([neck_width_mm(x0)/2, 0.01, target_neck_thickness]) sphere(r=1, $fn=360);
|
||||
translate([0,x1,0]) scale([neck_width_mm(x1)/2, end_radius, target_neck_thickness*1.0]) sphere(r=1, $fn=360);
|
||||
translate([0,x0,0]) scale([neck_width(x0)/2, 0.01, $target_neck_thickness]) sphere(r=1);
|
||||
translate([0,x1,0]) scale([neck_width(x1)/2, end_radius, $target_neck_thickness*1.0]) sphere(r=1);
|
||||
}
|
||||
translate([-500, x0, z0]) cube([1000, 1000, 1000]);
|
||||
translate([-500, x0-1000, -500]) cube([1000, 1000, 1000]);
|
||||
|
@ -1211,37 +1186,13 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) {
|
|||
|
||||
module MyNeck() {
|
||||
HeadPiece();
|
||||
TaperNeck(
|
||||
string_spacing_bridge=20,
|
||||
string_spacing_nut=20,
|
||||
num_strings=num_strings,
|
||||
string_margin=5,
|
||||
target_neck_thickness=15,
|
||||
scallop_depth=scallop_depth,
|
||||
extra_height=extra_height,
|
||||
fret_widths=fret_widths,
|
||||
num_frets=num_frets,
|
||||
fret_side_marker_x_angle=-23,
|
||||
fret_side_marker_y_angle=5,
|
||||
include_colours=include_colours,
|
||||
) MyBodySegment();
|
||||
TaperNeck(fret_side_marker_x_angle=-23, fret_side_marker_y_angle=5) MyBodySegment();
|
||||
}
|
||||
|
||||
module TrussRods(taper_points=segment_cuts, extra=0) {
|
||||
translate([0, 630+270, -4]) rotate([0, 0, 180]) TrussRod(taper_points=taper_points, extra=extra);
|
||||
translate([0, -100, -16]) TrussRodSingleAction(taper_points=taper_points, extra=extra);
|
||||
}
|
||||
module Dowel() {
|
||||
h = 27;
|
||||
rotate([-90, 0, 0]) {
|
||||
$fn=72;
|
||||
translate([0, 0, -h/2]) cylinder_beak(d=5.25, h=h);
|
||||
hull() {
|
||||
cylinder(d=6, h=0.00001, center=true);
|
||||
cylinder(d=5.25, h=3, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
module Dowels() {
|
||||
translate([-10, segment_cuts[3], 0]) Dowel();
|
||||
translate([ 10, segment_cuts[3], 0]) Dowel();
|
||||
|
@ -1265,11 +1216,12 @@ module TwoBangerMk2(include_colours=[0,1], segment=-1, preview=false) {
|
|||
belthole_x0 = 130;
|
||||
belthole_x1 = 260;
|
||||
render() for (i = [0:len(arc)-2]) {
|
||||
$fn = belthole_fn;
|
||||
hull() {
|
||||
translate([arc[i][0], belthole_x0, arc[i][1]]) sphere(belthole_r, $fn=belthole_fn);
|
||||
translate([arc[i+1][0], belthole_x0, arc[i+1][1]]) sphere(belthole_r, $fn=belthole_fn);
|
||||
translate([arc[i][0], belthole_x1, arc[i][1]]) sphere(belthole_r, $fn=belthole_fn);
|
||||
translate([arc[i+1][0], belthole_x1, arc[i+1][1]]) sphere(belthole_r, $fn=belthole_fn);
|
||||
translate([arc[i][0], belthole_x0, arc[i][1]]) sphere(belthole_r);
|
||||
translate([arc[i+1][0], belthole_x0, arc[i+1][1]]) sphere(belthole_r);
|
||||
translate([arc[i][0], belthole_x1, arc[i][1]]) sphere(belthole_r);
|
||||
translate([arc[i+1][0], belthole_x1, arc[i+1][1]]) sphere(belthole_r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,19 @@ CF_Square_ID = 5.0; // Inner diameter, sadly doesn't fit the tubes
|
|||
|
||||
cyl_hd_fn = $preview ? 32 : 512;
|
||||
cyl_ld_fn = $preview ? 24 : 72;
|
||||
|
||||
module Dowel() {
|
||||
h = 27;
|
||||
rotate([-90, 0, 0]) {
|
||||
$fn=72;
|
||||
translate([0, 0, -h/2]) cylinder_beak(d=5.25, h=h);
|
||||
hull() {
|
||||
cylinder(d=6, h=0.00001, center=true);
|
||||
cylinder_outer(d=5.25, h=3, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module CFTube(hole=true) { // Align +y
|
||||
rotate([0, 0, 90]) render() difference() {
|
||||
rotate([0, 90, 0]) cylinder(h=CF_Tube_Len, d=CF_Tube_OD, $fn=cyl_hd_fn);
|
||||
|
|
|
@ -1,5 +1,21 @@
|
|||
// Include after common.scad
|
||||
|
||||
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;
|
||||
function default_neck_width_bridge() = ($num_strings-1)*$string_spacing_bridge + $string_margin*2;
|
||||
|
||||
function neck_width(mm=0, fret=-9999) = lerp($neck_width_bridge, $neck_width_nut, (fret>-9999) ? (2^(-fret/12)) : (mm/fret_scale_length(0)));
|
||||
function get_fret_width(fret) = $fret_widths[clamp(0, fret, len($fret_widths)-1)];
|
||||
function get_fret_height(fret) = sin($fret_angle) * get_fret_width(fret)/2;
|
||||
function get_max_fret_width() = max($fret_widths);
|
||||
function get_max_fret_height() = sin($fret_angle) * get_max_fret_width()/2;
|
||||
function behind_fret(fret) = fret_scale_length(fret) + get_fret_width(fret)/2;
|
||||
function after_fret(fret) = fret_scale_length(fret) - get_fret_width(fret)/2;
|
||||
|
||||
function string_spacing(y) = lerp($string_spacing_bridge, $string_spacing_nut, y/fret_scale_length(0));
|
||||
function string_x(i, y) = ($num_strings-i-1)*string_spacing(y) - neck_width(y)/2 + $string_margin;
|
||||
|
||||
|
||||
module neck(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_thickness=15, target_neck_thickness_additional_points=[], scallop_depth=3, num_frets=24, fret_width=2.4, filler=false, inlays_only=false, side_markers_only=false, fret_layers_only=false, remove_fret_layers=false, engrave_markers=true) {
|
||||
fw2 = fret_width/2;
|
||||
neck_length = fret_scale_length(0)+fw2;
|
||||
|
@ -130,50 +146,35 @@ module neck(string_spacing=18, string_margin=4.5, num_strings=3, target_neck_thi
|
|||
}
|
||||
|
||||
module TaperNeck(
|
||||
string_spacing_nut = 10.0,
|
||||
string_spacing_bridge = 11.6,
|
||||
num_strings = 6,
|
||||
string_margin = 4.5,
|
||||
target_neck_thickness = 15,
|
||||
target_neck_thickness_additional_points = [],
|
||||
scallop_depth = 2,
|
||||
extra_height = 0,
|
||||
num_frets = 24,
|
||||
fret_widths = [],
|
||||
fret_angle = 60, // 90 is semicircle
|
||||
max_scallop_angle = 60, // match this to fret_angle for a nice continuous look
|
||||
max_scallop_angle = $fret_angle, // match this to fret_angle for a nice continuous look
|
||||
filler = false,
|
||||
fret_side_marker_x_angle = -37,
|
||||
fret_side_marker_y_angle = -4,
|
||||
include_colours = [0, 1, 2, 3], // 0: Base neck/fretboard 1: Frets 2: Inlays 3: Side markers
|
||||
// $include_colours = [0, 1, 2, 3], // 0: Base neck/fretboard 1: Frets 2: Inlays 3: Side markers
|
||||
){
|
||||
neck_length = fret_scale_length(0) + fret_widths[0]/2;
|
||||
// neck_width = (num_strings-1)*string_spacing_nut + 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(fret) = lerp(neck_width_bridge, neck_width_nut, 2^(-fret/12));
|
||||
function neck_width_mm(mm) = lerp(neck_width_bridge, neck_width_nut, mm/fret_scale_length(0));
|
||||
function get_fret_width(fret) = fret_widths[clamp(0, fret, num_frets)];
|
||||
max_fret_width = max(fret_widths);
|
||||
max_fret_height = sin(fret_angle) * max_fret_width/2;
|
||||
z0 = extra_height; // Deepest scallops hit here, => thinnest top of neck
|
||||
z1 = z0 + scallop_depth; // Frets protrude from here
|
||||
z2 = z1 + max_fret_height; // Nothing above this => thickest top of neck
|
||||
neck_length = fret_scale_length(0) + get_fret_width(0)/2;
|
||||
|
||||
$max_fret_width = max($fret_widths);
|
||||
$max_fret_height = sin($fret_angle) * $max_fret_width/2;
|
||||
z0 = $extra_thickness_above_center; // Deepest scallops hit here, => thinnest top of neck
|
||||
z1 = z0 + $scallop_depth; // Frets protrude from here
|
||||
z2 = z1 + $max_fret_height; // Nothing above this => thickest top of neck
|
||||
|
||||
module neck_stock() {
|
||||
angle_excess = asin(z2/target_neck_thickness);
|
||||
angle_excess = asin(z2/$target_neck_thickness);
|
||||
a0 = 90-angle_excess;
|
||||
a1 = 270+angle_excess;
|
||||
rotate([-90, 0, 0])
|
||||
if (len(target_neck_thickness_additional_points) < 1) {
|
||||
render() hull() {
|
||||
translate([0,0,neck_length-0.0001]) linear_extrude(0.0001)
|
||||
polygon([for (i = [0:300]) let(a=lerp(a0, a1, i/300.0)) [neck_width_mm(neck_length)*0.5*sin(a), -target_neck_thickness*cos(a)]]); // Ellipse
|
||||
polygon([for (i = [0:300]) let(a=lerp(a0, a1, i/300.0)) [neck_width(neck_length)*0.5*sin(a), -$target_neck_thickness*cos(a)]]); // Ellipse
|
||||
translate([0,0,0]) linear_extrude(0.0001)
|
||||
polygon([for (i = [0:300]) let(a=lerp(a0, a1, i/300.0)) [neck_width_mm(0)*0.5*sin(a), -target_neck_thickness*cos(a)]]); // Ellipse
|
||||
polygon([for (i = [0:300]) let(a=lerp(a0, a1, i/300.0)) [neck_width(0)*0.5*sin(a), -$target_neck_thickness*cos(a)]]); // Ellipse
|
||||
}
|
||||
} else {
|
||||
pts = flatten([[[neck_length, target_neck_thickness]], target_neck_thickness_additional_points]);
|
||||
pts = flatten([[[neck_length, $target_neck_thickness]], target_neck_thickness_additional_points]);
|
||||
echo(pts);
|
||||
for (i = [0:len(pts)-2]) {
|
||||
pt0 = pts[i];
|
||||
|
@ -206,14 +207,14 @@ module TaperNeck(
|
|||
r = xdelta / (2*sa);
|
||||
arc = [ for (i = [-fn:fn]) [xmid+xdelta*i/fn2, z1-r*(sqrt(1 - ((sa*i/fn)^2))-ca)] ];
|
||||
// echo(arc);
|
||||
rotate([90, 0, 90]) linear_extrude(neck_width_bridge, center=true) polygon(arc);
|
||||
rotate([90, 0, 90]) linear_extrude($neck_width_bridge, center=true) polygon(arc);
|
||||
}
|
||||
module scallops() {
|
||||
for (fret = [0:num_frets]) {
|
||||
for (fret = [0:$num_frets]) {
|
||||
scallop(fret);
|
||||
}
|
||||
}
|
||||
module fret_bump(fw, a = fret_angle) {
|
||||
module fret_bump(fw, a = $fret_angle) {
|
||||
// a must be in range (0,90] for correct geometry
|
||||
fn = 50;
|
||||
fn2 = fn * 2;
|
||||
|
@ -222,15 +223,15 @@ module TaperNeck(
|
|||
r = fw / (2*sa);
|
||||
arc = [ for (i = [-fn:fn]) [fw*i/fn2, r*(sqrt(1 - ((sa*i/fn)^2))-ca)] ];
|
||||
// echo("fret_bump", a, ca, arc);
|
||||
rotate([90, 0, 90]) linear_extrude(neck_width_bridge, center=true) polygon(arc);
|
||||
rotate([90, 0, 90]) linear_extrude($neck_width_bridge, center=true) polygon(arc);
|
||||
}
|
||||
module fret_bumps() {
|
||||
for (fret = [0:num_frets])
|
||||
for (fret = [0:$num_frets])
|
||||
translate([0, fret_scale_length(fret), z1])
|
||||
fret_bump(get_fret_width(fret));
|
||||
}
|
||||
module intersect_fret_layers() {
|
||||
for (fret = [0:num_frets]) {
|
||||
for (fret = [0:$num_frets]) {
|
||||
translate([-500, fret_scale_length(fret)-get_fret_width(fret)/2, -500])
|
||||
cube([1000, get_fret_width(fret), 1000]);
|
||||
}
|
||||
|
@ -241,12 +242,12 @@ module TaperNeck(
|
|||
module fret_inlays() {
|
||||
for (num_text = fret_inlays) {
|
||||
fret = num_text[0];
|
||||
if (fret <= num_frets) {
|
||||
if (fret <= $num_frets) {
|
||||
x0 = fret_scale_length(fret-1)-get_fret_width(fret-1)/2;
|
||||
x1 = fret_scale_length(fret)+get_fret_width(fret)/2;
|
||||
x_mid = lerp(x0, x1, 0.5);
|
||||
max_height = x0 - x1 - 4;
|
||||
max_width = neck_width_mm(x_mid) * 0.8;
|
||||
max_width = neck_width(x_mid) * 0.8;
|
||||
estimated_width_chars = len(num_text[1])*7/5;
|
||||
fontsize_from_max_width = max_width/estimated_width_chars;
|
||||
fontsize_from_max_height = max_height;
|
||||
|
@ -261,14 +262,14 @@ module TaperNeck(
|
|||
module fret_side_markers() {
|
||||
for (num_text = fret_inlays) {
|
||||
fret = num_text[0];
|
||||
if (fret <= num_frets) {
|
||||
if (fret <= $num_frets) {
|
||||
x0 = fret_scale_length(fret-1)-get_fret_width(fret-1)/2;
|
||||
x1 = fret_scale_length(fret)+get_fret_width(fret)/2;
|
||||
diff = x0 - x1;
|
||||
mid = lerp(x0, x1, 0.67);
|
||||
fontsize = min(5, diff*0.6);
|
||||
rotate([0, fret_side_marker_y_angle-90, 0])
|
||||
translate([0, mid, neck_width_mm(mid)/2-3])
|
||||
translate([0, mid, neck_width(mid)/2-3])
|
||||
linear_extrude(50)
|
||||
rotate(fret_side_marker_x_angle)
|
||||
text(text = str(fret), font = JP_Serif_Font, halign = "right", valign = "center", size = fontsize);
|
||||
|
@ -280,11 +281,11 @@ module TaperNeck(
|
|||
render() difference() {
|
||||
neck_stock() children();
|
||||
scallops();
|
||||
scallop(num_frets+1);
|
||||
scallop($num_frets+1);
|
||||
// Chop off anything above the frets
|
||||
translate([-neck_width_bridge, 0, z1]) cube([neck_width_bridge*2, $guitar_scale_length_mm*3, target_neck_thickness*3]);
|
||||
translate([-$neck_width_bridge, 0, z1]) cube([$neck_width_bridge*2, $guitar_scale_length_mm*3, $target_neck_thickness*3]);
|
||||
// Reduce rest of the body to 0
|
||||
translate([-neck_width_bridge, 0, 0]) cube([neck_width_bridge*2, (fret_scale_length(num_frets)+fret_scale_length(num_frets+1))/2, target_neck_thickness*3]);
|
||||
translate([-$neck_width_bridge, 0, 0]) cube([$neck_width_bridge*2, (fret_scale_length($num_frets)+fret_scale_length($num_frets+1))/2, $target_neck_thickness*3]);
|
||||
}
|
||||
intersection() {
|
||||
fret_bumps();
|
||||
|
@ -296,14 +297,14 @@ module TaperNeck(
|
|||
difference() {
|
||||
neck_stock();
|
||||
scallop(25);
|
||||
translate([-neck_width_bridge, 0, scallop_depth]) cube([neck_width_bridge*2, $guitar_scale_length_mm*3, 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]);
|
||||
translate([-$neck_width_bridge, 0, scallop_depth]) cube([$neck_width_bridge*2, $guitar_scale_length_mm*3, 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 {
|
||||
has0 = list_has(include_colours, 0);
|
||||
has1 = list_has(include_colours, 1);
|
||||
has2 = list_has(include_colours, 2);
|
||||
has3 = list_has(include_colours, 3);
|
||||
has0 = list_has($include_colours, 0);
|
||||
has1 = list_has($include_colours, 1);
|
||||
has2 = list_has($include_colours, 2);
|
||||
has3 = list_has($include_colours, 3);
|
||||
if (has0) {
|
||||
render() difference() {
|
||||
carved_stock() children();
|
||||
|
|
|
@ -83,15 +83,16 @@ module screw_hole_lobe(ID, OD, lobes=3) {
|
|||
}
|
||||
}
|
||||
|
||||
module cylinder_outer(d, h) {
|
||||
module cylinder_outer(d, h, center=false) {
|
||||
// Regular circle inscribes, this circumscribes
|
||||
fudge = 1/cos(180/$fn);
|
||||
cylinder(d=d*fudge, h=h);
|
||||
cylinder(d=d*fudge, h=h, center=center);
|
||||
}
|
||||
|
||||
module cylinder_beak(d, h, beak=0.75) {
|
||||
// A cylinder with a beak to take seams. This helps improve tolerances as seams often expand a little bit and ruin the fit.
|
||||
cylinder(d=d, h=h);
|
||||
// Since we only use it for holes, it will be a cylinder_outer as well
|
||||
cylinder_outer(d=d, h=h);
|
||||
// beak notch for seams
|
||||
translate([0, d/2-beak*0.25, h/2]) rotate([0,0,45]) cube([beak, beak, h], center=true);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue