add filets
This commit is contained in:
@ -0,0 +1,42 @@
|
|||||||
|
include <./halfspace.scad>
|
||||||
|
include <./math.scad>
|
||||||
|
|
||||||
|
// Some modules for simple subtractive filets
|
||||||
|
|
||||||
|
module cylindricalFiletNegative(p0, p1, n, r) {
|
||||||
|
l = norm(p1-p0);
|
||||||
|
|
||||||
|
align_to(p0=p0, p1=p1, p2=p0-n)
|
||||||
|
rotate(a=[45,0,0])
|
||||||
|
rotate(a=[0,90,0])
|
||||||
|
zFiletNegative(length = l, r = r);
|
||||||
|
}
|
||||||
|
|
||||||
|
module zFiletNegative(length, r) {
|
||||||
|
|
||||||
|
p1 = [0,0,0];
|
||||||
|
p2 = [0,0,length];
|
||||||
|
n1 = [-1,-1,0] / norm([-1,-1,0]);
|
||||||
|
dr = sqrt(2*r^2);
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
|
||||||
|
hull() {
|
||||||
|
translate(v=[0,0,0])
|
||||||
|
cube(size=[r,r,r]);
|
||||||
|
|
||||||
|
translate(v = p2-[0,0,0.1])
|
||||||
|
cube(size=[r,r,0.1]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hull() {
|
||||||
|
translate(v = p1-n1*dr)
|
||||||
|
cylinder(r = r, h=0.0001, $fn = 32);
|
||||||
|
|
||||||
|
|
||||||
|
translate(v = p2-n1*dr)
|
||||||
|
cylinder(r = r, h=0.0001, $fn = 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -10,16 +10,17 @@ module halfspace(vpos, p) {
|
|||||||
cube(size=[inf, inf, inf], center=true);
|
cube(size=[inf, inf, inf], center=true);
|
||||||
} else {
|
} else {
|
||||||
translate(p)
|
translate(p)
|
||||||
align(a=ref, b = vpos)
|
alignPlanar(a=ref, b = vpos)
|
||||||
translate(v = [0, 0, -inf/2])
|
translate(v = [0, 0, -inf/2])
|
||||||
cube(size = [inf, inf, inf], center = true);
|
cube(size = [inf, inf, inf], center = true);
|
||||||
}
|
}
|
||||||
|
|
||||||
module align(a,b) {
|
}
|
||||||
|
|
||||||
|
module alignPlanar(a,b) {
|
||||||
rot_axis = cross(a,b);
|
rot_axis = cross(a,b);
|
||||||
angle = acos(a*b/(norm(a)*norm(b)));
|
angle = acos(a*b/(norm(a)*norm(b)));
|
||||||
|
|
||||||
rotate(v=rot_axis, a=angle)
|
rotate(v=rot_axis, a=angle)
|
||||||
children(0);
|
children(0);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -24,4 +24,28 @@ module mirror4XY(p, dx, dy) {
|
|||||||
children(0);
|
children(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generate a 4x4 matrix that causes a change of basis
|
||||||
|
// such that the origin is at point p0, the x axis is aligned
|
||||||
|
// from p0 to p1 and point p2 is in the first quadrant.
|
||||||
|
// Copied and pasted from https://trmm.net/Basis/
|
||||||
|
module align_to(p0,p1,p2) {
|
||||||
|
|
||||||
|
x = unit(p1-p0);
|
||||||
|
yp = unit(p2-p0);
|
||||||
|
z = unit(cross(x,yp));
|
||||||
|
y = unit(cross(z,x));
|
||||||
|
|
||||||
|
echo(p0,p1,p2);
|
||||||
|
echo(x,y,z);
|
||||||
|
|
||||||
|
multmatrix([
|
||||||
|
[x[0], y[0], z[0], p0[0]],
|
||||||
|
[x[1], y[1], z[1], p0[1]],
|
||||||
|
[x[2], y[2], z[2], p0[2]],
|
||||||
|
[ 0, 0, 0, 1]
|
||||||
|
])
|
||||||
|
children();
|
||||||
|
}
|
||||||
|
|
||||||
|
function unit(v) = v/norm(v);
|
||||||
function lerp(a, b, t) = (b * t + a * (1 - t));
|
function lerp(a, b, t) = (b * t + a * (1 - t));
|
||||||
|
|||||||
@ -40,7 +40,7 @@ module assemblyInstructions () {
|
|||||||
|
|
||||||
// Final builds:
|
// Final builds:
|
||||||
// render()
|
// render()
|
||||||
// finalSingle();
|
finalSingle();
|
||||||
// finalDouble();
|
// finalDouble();
|
||||||
|
|
||||||
// Features:
|
// Features:
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
include <./config.scad>
|
include <./config.scad>
|
||||||
include <../helper/screws.scad>
|
include <../helper/screws.scad>
|
||||||
|
include <../helper/filet.scad>
|
||||||
include <../helper/slack.scad>
|
include <../helper/slack.scad>
|
||||||
include <../helper/math.scad>
|
include <../helper/math.scad>
|
||||||
include <../helper/halfspace.scad>
|
include <../helper/halfspace.scad>
|
||||||
@ -8,7 +9,7 @@ include <../helper/matrix.scad>
|
|||||||
|
|
||||||
include <./connector/connectors.scad>
|
include <./connector/connectors.scad>
|
||||||
|
|
||||||
*mainRail();
|
mainRail();
|
||||||
|
|
||||||
module mainRail() {
|
module mainRail() {
|
||||||
|
|
||||||
@ -18,6 +19,8 @@ module mainRail() {
|
|||||||
mainRailBase();
|
mainRailBase();
|
||||||
|
|
||||||
module mainRailBase() {
|
module mainRailBase() {
|
||||||
|
|
||||||
|
difference() {
|
||||||
union() {
|
union() {
|
||||||
frontRailSegment();
|
frontRailSegment();
|
||||||
|
|
||||||
@ -25,13 +28,14 @@ module mainRail() {
|
|||||||
rotate(a = [0, 0, 90])
|
rotate(a = [0, 0, 90])
|
||||||
sideSupportSegment();
|
sideSupportSegment();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module frontRailSegment() {
|
module frontRailSegment() {
|
||||||
difference() {
|
difference() {
|
||||||
cube(size = [frontFaceWidth, railFrontThickness, railTotalHeight]);
|
cube(size = [frontFaceWidth, railFrontThickness, railTotalHeight]);
|
||||||
|
|
||||||
for (i = [1:numRailScrews]) {
|
for (i = [1:numRailScrews]) {
|
||||||
translate(v = [railScrewHoleToOuterEdge, railFrontThickness / 2, i * screwDiff + railFootThickness])
|
translate(v = [railScrewHoleToOuterEdge, railFrontThickness/2, i*screwDiff+railFootThickness])
|
||||||
rotate(a = [90, 0, 0])
|
rotate(a = [90, 0, 0])
|
||||||
hexNutPocket_N(mainRailScrewType);
|
hexNutPocket_N(mainRailScrewType);
|
||||||
}
|
}
|
||||||
@ -61,6 +65,9 @@ module mainRail() {
|
|||||||
halfspace(vpos = [-1, -1, 0], p = [b, b, 0]);
|
halfspace(vpos = [-1, -1, 0], p = [b, b, 0]);
|
||||||
halfspace(vpos = [-1, 0, -1], p = [b, 0, b]);
|
halfspace(vpos = [-1, 0, -1], p = [b, 0, b]);
|
||||||
halfspace(vpos = [-1, 0, 1], p = [b, 0, railTotalHeight-b]);
|
halfspace(vpos = [-1, 0, 1], p = [b, 0, railTotalHeight-b]);
|
||||||
|
|
||||||
|
cylindricalFiletNegative(p0=[frontFaceWidth, 0, 0], p1=[frontFaceWidth, 0, railTotalHeight], n=[1,-1,0], r=1);
|
||||||
|
cylindricalFiletNegative(p0=[frontFaceWidth, railFrontThickness, railFootThickness+4], p1=[frontFaceWidth, railFrontThickness, railTotalHeight-(railFootThickness+4)], n=[1,1,0], r=1);
|
||||||
}
|
}
|
||||||
|
|
||||||
children(0);
|
children(0);
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
include <../helper/cylindricalFilet.scad>
|
include <../helper/cylindricalFilet.scad>
|
||||||
|
include <../helper/filet.scad>
|
||||||
include <../helper/screws.scad>
|
include <../helper/screws.scad>
|
||||||
include <../helper/matrix.scad>
|
include <../helper/matrix.scad>
|
||||||
|
|
||||||
@ -20,14 +21,31 @@ module xBar() {
|
|||||||
difference() {
|
difference() {
|
||||||
cylindricalFiletEdge(xBarY, xBarX, xBarHeight, xBarRoundness);
|
cylindricalFiletEdge(xBarY, xBarX, xBarHeight, xBarRoundness);
|
||||||
|
|
||||||
|
union() {
|
||||||
translate(v = [xBarWallThickness, xBarSideThickness, xBarWallThickness])
|
translate(v = [xBarWallThickness, xBarSideThickness, xBarWallThickness])
|
||||||
cylindricalFiletEdge(xBarY, xBarX-2*xBarSideThickness, xBarHeight, xBarRoundness-xBarWallThickness);
|
cylindricalFiletEdge(xBarY, xBarX-2*xBarSideThickness, xBarHeight, xBarRoundness-xBarWallThickness);
|
||||||
|
|
||||||
|
connectorWallFiletNegative();
|
||||||
|
|
||||||
|
multmatrix(xBarMirrorOtherCornerTrans)
|
||||||
|
connectorWallFiletNegative();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shave off bottom corners to reduce elephant's foot at where xBar and YBar join
|
// Shave off bottom corners to reduce elephant's foot at where xBar and YBar join
|
||||||
halfspace(vpos = [0, 1, 1], p = [0, 0.75, 0]);
|
halfspace(vpos = [0, 1, 1], p = [0, 0.75, 0]);
|
||||||
halfspace(vpos = [0, -1, 1], p = [0, xBarX-0.75, 0]);
|
halfspace(vpos = [0, -1, 1], p = [0, xBarX-0.75, 0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module connectorWallFiletNegative() {
|
||||||
|
cylindricalFiletNegative(
|
||||||
|
p0=[xBarWallThickness, xBarSideThickness, xBarHeight],
|
||||||
|
p1=[xBarY, xBarSideThickness, xBarHeight],
|
||||||
|
n=[0, 1, 1], r=2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user