GuitarModels/AluTCommon.scad

88 lines
2.4 KiB
OpenSCAD

include <common.scad>
use <skin.scad>
L_minor = 1/2 * 25.4;
L_major = 3/4 * 25.4;
L_thick = 1.8; //9/128 * 25.4; //1/16 * 25.4;
T_flat_top = L_minor * 2; // 1"
T_spine = L_major; // 3/4"
T_tolerance = 0.285;
// Cap_Length = 150;
Cap_Thick = 3;
Cap_Spine = T_spine + Cap_Thick;
points = [[-T_spine, 0], [0, -L_minor], [0, L_minor]];
function tri_circumcenter(pts) =
let(
v0 = pts[1] - pts[0],
v1 = pts[2] - pts[1],
d0 = (pts[1] + pts[0])/2 * v0,
d1 = (pts[2] + pts[1])/2 * v1,
det = -cross(v0, v1)
)
[cross([d1, d0], [v1.y, v0.y]), cross([d0, d1], [v0.x, v1.x])] / det;
T_circumcenter = tri_circumcenter(points);
tube_radius = Cap_Spine + T_circumcenter[0];
module cap_outline(radius = 1.5, fingerboard_min_thick = 2.5, fingerboard_max_thick = 5) {
minkowski($fn = mink_fn_2d) {
circle(r = radius);
difference() {
translate(T_circumcenter) circle(r = tube_radius - radius);
translate([fingerboard_max_thick - radius, -50]) square([100,100]);
}
}
}
module cap_outline_bridge(radius = 1.5, fingerboard_min_thick = 2.5, fingerboard_max_thick = 5) {
minkowski($fn = mink_fn_2d) {
circle(r = radius);
difference() {
translate(T_circumcenter) hull() {
circle(r = tube_radius - radius);
translate([50,0]) square([1,(tube_radius - radius)*2], true);
}
translate([fingerboard_max_thick - radius, -50]) square([100,100]);
}
}
}
function T_hole_points(r = 4, a_step = 5, offset = 0) =
let(
x0 = T_tolerance + offset,
x1 = x0 - L_thick - (T_tolerance*2) - (offset*2),
x2 = -T_spine - T_tolerance - offset,
y_out = L_minor + T_tolerance + offset,
y_in = L_thick + T_tolerance + offset,
top_points = [
[x1, -y_out],
[x0, -y_out],
[x0, y_out],
[x1, y_out]
],
bottom_points = [
[x2, y_in],
[x2, -y_in],
],
joint_corner_left = [x1, -y_in],
joint_corner_right = [x1, y_in],
join_points_left = [for (a = [0:a_step:90]) joint_corner_left + [-r * (1-sin(a)), -r * (1-cos(a))]],
join_points_right = [for (a = [0:a_step:90]) joint_corner_right + [-r * (1-cos(a)), r * (1-sin(a))]]
)
concat(top_points, join_points_right, bottom_points, join_points_left);
module T_hole(r = 4, a_step = 5, offset = 0)
polygon(T_hole_points(r=r, a_step=a_step, offset=offset));
module tapered_T_hole(z0 = 0, z1 = 4, o0 = 1, o1 = 0) {
// z1 must > z0 for faces to work
pts0 = [for (pt = T_hole_points(offset = o0)) concat(pt, z0)];
pts1 = [for (pt = T_hole_points(offset = o1)) concat(pt, z1)];
skin([pts0, pts1]);
}