WIP on sideWall and sideWallConnector

This commit is contained in:
zhao
2023-02-04 18:30:45 -05:00
parent 49c627b133
commit 7b19db8153
6 changed files with 149 additions and 91 deletions

View File

@ -9,7 +9,8 @@
- Start working on actual cases
### Ideas
- Clean up `sharedVariables.scad`!!!
- Start using matrices for transformations. Enforce strict local/global hierarchy of matrix transformations.
- Instead of using names like 'mainRailSlotToInnerYZFace', experiment with a central distance/dimension directory. Like:
```openscad
// Define identifiers:

View File

@ -2,33 +2,7 @@ include <./config.scad>
include <../helper/screws.scad>
include <../helper/math.scad>
include <../helper/halfspace.scad>
/* Small horizontal planes at the top and bottom of the main rails. Used so we can fasten the rail to the frame
Note that this value is also used for a depression at the bottom/top of the frame for aligning the rail */
railFootThickness = 3;
railTotalHeight = screwDiff * (numRailScrews + 1) + 2 * railFootThickness;
railFrontThickness = 6; // Make sure that the nuts for the chosen screw type can slot within the front face
railSideMountThickness = 2.5;
// Distance between the middle of a screw mount and the rail's vertical edges
railScrewHoleToInnerEdge = 5;
railScrewHoleToOuterEdge = 7;
// Distance between the midpoint of the rail screw holes.
rackMountScrewWidth = maxUnitWidth + 2 * railScrewHoleToInnerEdge;
// Extra spacing for screws.
frontScrewSpacing = 15;
sideSupportScrewHoleToBackEdge = 4;
sideSupportDepth = sideSupportScrewHoleToBackEdge + frontScrewSpacing;
frontFaceWidth = railScrewHoleToInnerEdge + railScrewHoleToOuterEdge;
railTotalWidth = frontFaceWidth;
railTotalDepth = railFrontThickness+sideSupportDepth;
include <./sharedVariables.scad>
*mainRail();

View File

@ -1,4 +1,53 @@
// Main rail variables:
/* Small horizontal planes at the top and bottom of the main rails. Used so we can fasten the rail to the frame
Note that this value is also used for a depression at the bottom/top of the frame for aligning the rail */
railFootThickness = 3;
railTotalHeight = screwDiff * (numRailScrews + 1) + 2 * railFootThickness;
railFrontThickness = 6; // Make sure that the nuts for the chosen screw type can slot within the front face
railSideMountThickness = 2.5;
// Distance between the middle of a screw mount and the rail's vertical edges
railScrewHoleToInnerEdge = 5;
railScrewHoleToOuterEdge = 7;
// Distance between the midpoint of the rail screw holes.
rackMountScrewWidth = maxUnitWidth + 2 * railScrewHoleToInnerEdge;
// Extra spacing for screws.
frontScrewSpacing = 15;
sideSupportScrewHoleToBackEdge = 4;
sideSupportDepth = sideSupportScrewHoleToBackEdge + frontScrewSpacing;
frontFaceWidth = railScrewHoleToInnerEdge + railScrewHoleToOuterEdge;
railTotalWidth = frontFaceWidth;
railTotalDepth = railFrontThickness+sideSupportDepth;
// Side Wall variables:
sideWallThickness = 2.5;
sideWallSlotToOuterYEdge = 3;
sideWallSlotToOuterXEdge = 3; // TODO rename to variables found in ybar;
sideWallConnectorSlotWidth = 7;
// Y Bar variables:
railSlotToXZ = 3;
sideWallSlotToXZ = 3;
railSlotToInnerYEdge = 2;
railSlotToSideWallSlot = 2;
yBarWidth = railSlotToInnerYEdge + railTotalWidth+ railSlotToSideWallSlot
+ sideWallSlotToOuterYEdge + sideWallConnectorSlotWidth;
yBarDepth = maxUnitDepth + 2*railSlotToInnerYEdge;
yBarHeight = 15;
yBarWallThickness = 3;
yBarRoundness = baseRoundness;
joinCornerDepth = 32;

View File

@ -2,30 +2,35 @@ include <../helper/math.scad>
include <../helper/halfspace.scad>
include <../misc/magnet.scad>
include <./config.scad>
include <./yBar.scad>
include <./sideWallConnector.scad>
include <./mainRail.scad>
include <./sharedVariables.scad>
include <./sideWallConnector.scad>
sideWallZ = 110;
sideWallY = 110;
sideWallX = 12;
sideWallZGapClearance = 0.2;
sideWallZ = railTotalHeight - 2*(railFootThickness + sideWallZGapClearance);
sideWallY = yBarDepth;
// make these global
hingePoleToInnerSideWallX = (hingePoleToConnectorOuterYZFace + sideWallSlotToOuterYEdge) - sideWallThickness;
hingePoleToInnerSideWallY = (hingePoleToConnectorOuterXZFace + sideWallSlotToOuterXEdge) - sideWallThickness;
sideWallXGapClearance = 0.2;
sideWallX = (yBarWidth-(railTotalWidth+railSlotToInnerYEdge)) - sideWallXGapClearance;
hingePoleDx = hingePoleToConnectorOuterYZFace + sideWallSlotToOuterYEdge;
hingePoleDy = hingePoleToConnectorOuterXZFace + sideWallSlotToOuterXEdge;
echo("Side Wall Height", sideWallZ);
echo("Side Wall Depth", sideWallY);
module sideWall() {
applyHingeConnector()
applyMagnetConnector()
applyEpicVentilation()
applyHingeHandle()
sideWallBase();
module sideWallBase() {
module roundThingHelper(x,y,z,r) {
@ -50,54 +55,80 @@ module sideWall() {
}
}
module applyHingeConnector() {
hingeHolePositiveRad = hingeHoleR+1;
module hingeProjectConstructionPlane() {
translate(v=[sideWallX-(sideWallThickness+hingePoleToInnerSideWallX) - hingeHolePositiveRad,sideWallY,0])
cube(size=[2*hingeHolePositiveRad, eps, sideWallZ]);
}
hingeHoleShellR = hingeHoleR+1;
apply_pn() {
hull() {
translate(v = [sideWallX-(sideWallThickness+hingePoleToInnerSideWallX), sideWallY-(sideWallThickness+
hingePoleToInnerSideWallY), 0])
cylinder(r = hingeHoleR+1, h = sideWallZ);
hingeProjectConstructionPlane();
hingeShell();
hingeBacksideProjectionPlane();
}
union() {
translate(v = [sideWallX-(sideWallThickness+hingePoleToInnerSideWallX), sideWallY-(sideWallThickness+
hingePoleToInnerSideWallY), 0])
cylinder(r = hingeHoleR, h = sideWallZ);
// TODO annoying constant
halfspace(p=[sideWallX-3.3, sideWallY, 0], vpos=[1,1,0]);
hingeHole();
// Trim parts of the wall for rotational clearance
halfspace(p=[sideWallX-5, sideWallY, 0], vpos=[1,1.5,0]);
}
children(0);
}
module hingeShell() {
translate(v = [sideWallX-hingePoleDx, sideWallY-(sideWallThickness+hingePoleDy), 0])
cylinder(r = hingeHoleShellR, h = sideWallZ);
}
// XZ plane in line with the back of the case. Project the hinge pole shell onto this to fill any weird
// geometries from the curves of the side wall
module hingeBacksideProjectionPlane() {
translate(v=[sideWallX-hingePoleDx - hingeHoleShellR,sideWallY,0])
cube(size=[2*hingeHoleShellR, eps, sideWallZ]);
}
module hingeHole() {
translate(v = [sideWallX-hingePoleDx, sideWallY-(sideWallThickness+hingePoleDy), 0])
cylinder(r = hingeHoleR, h = sideWallZ);
}
}
// TODO: add correct magnet translations, also remove random variables
module applyMagnetConnector() {
apply_p() {
union() {
translate(v = [sideWallThickness, magnetMountToYBarFront + 2, magnetMountToYBarTop+1])
sideMagnetMount();
translate(v=[sideWallThickness,10,10])
rotate(a=[0,90,0])
sideWallConnectorMagnetSide();
translate(v = [sideWallThickness, magnetMountToYBarFront + 2, sideWallZ - (magnetMountToYBarTop + 1)])
sideMagnetMount();
}
children(0);
}
module sideMagnetMount() {
rotate(a=[0,90,0])
sideWallConnectorMagnetSide();
}
}
module applyEpicVentilation() {
children(0);
}
module applyHingeHandle() {
children(0);
}
}
sideWall();
translate(v=[10,sideWallSlotToXZ,-2])
mirror(v=[1,0,0])
sideWallConnectorMagnet();
translate(v=[3,100,0])
mirror(v=[0,1,0])
sideWallConnectorHinge();

View File

@ -4,7 +4,6 @@ include <../helper/halfspace.scad>
include <../misc/magnet.scad>
include <./sharedVariables.scad>
sideWallConnectorSlotWidth = 7;
sideWallConnW = 7;
sideWallConnD = 20;
@ -15,10 +14,13 @@ yBarScrewHoleToOuterYEdge = 3.5;
yBarScrewHoleToFrontXEdge = 16;
magnetFaceToSideWallConnOuterYEdge = 2;
magnetMountExtraRadius = magnetRSlacked + 1;
magnetMountShellRadius = magnetRSlacked + 1;
innerSideWallToYBarMagnetConn = magnetFaceToSideWallConnOuterYEdge + sideWallSlotToOuterYEdge - sideWallThickness;
magnetMountToYBarTop = magnetMountShellRadius;
magnetMountToYBarFront = magnetMountShellRadius + sideWallSlotToXZ;
hingePoleR = 2;
hingePoleH = 5;
hingeHoleR = hingePoleR + 0.2;
@ -67,27 +69,40 @@ module sideWallConnectorMagnet() {
}
}
// TODO: clean up
module applyMagnetMount() {
apply_p() {
difference() {
hull() {
translate(v = [0, 4, magnetMountExtraRadius+sideWallConnH])
rotate(a = [0, 90, 0])
cylinder(r = magnetMountExtraRadius, h = sideWallConnW-magnetFaceToSideWallConnOuterYEdge);
translate(v = [0, 0, sideWallConnH])
cube(size = [sideWallConnW-magnetFaceToSideWallConnOuterYEdge, 2*magnetMountExtraRadius, eps]);
module applyMagnetMount() {
magnetMountDx = magnetMountShellRadius;
magnetMountDy = magnetMountShellRadius + 2;
magnetMountDz = magnetMountShellRadius + sideWallConnLugDepression +1;
apply_pn() {
magnetMountShell();
magnetMountHole();
children(0);
}
translate(v = [sideWallConnW-(magnetFaceToSideWallConnOuterYEdge+magnetHSlacked), 4, 6])
module magnetMountShell() {
hull() {
translate(v = [0, magnetMountDy, magnetMountDz])
rotate(a = [0, 90, 0])
cylinder(r = magnetMountShellRadius, h = sideWallConnW-magnetFaceToSideWallConnOuterYEdge);
translate(v = [0, 2, sideWallConnH])
cube(size = [sideWallConnW-magnetFaceToSideWallConnOuterYEdge, 2*magnetMountShellRadius, eps]);
}
}
module magnetMountHole() {
translate(v = [sideWallConnW-(magnetFaceToSideWallConnOuterYEdge+magnetHSlacked),
magnetMountDy,
magnetMountDz])
rotate(a = [0, 90, 0])
cylinder(r = magnetRSlacked, h = magnetHSlacked);
}
}
children(0);
}
}
}
module sideWallConnectorHinge() {
@ -134,7 +149,7 @@ module sideWallConnectorHinge() {
module sideWallConnectorMagnetSide() {
// oriented so that the xy face is the side wall's inner face
difference() {
cylinder(r1=magnetMountExtraRadius+2 ,r2 = magnetMountExtraRadius, h = innerSideWallToYBarMagnetConn);
cylinder(r1=magnetMountShellRadius + 0.5,r2 = magnetMountShellRadius, h = innerSideWallToYBarMagnetConn);
translate(v=[0, 0, innerSideWallToYBarMagnetConn-magnetHSlacked])
cylinder(r = magnetRSlacked, h = magnetHSlacked);

View File

@ -3,7 +3,6 @@ include <../helper/sphericalFilet.scad>
include <../helper/cylindricalFilet.scad>
include <../helper/screws.scad>
include <../misc/magnet.scad>
include <./config.scad>
include <./mainRail.scad>
@ -13,19 +12,8 @@ include <./xyBarConnector.scad>
include <./sideWallConnector.scad>
include <./yBarBasePlateConnector.scad>
railSlotToInnerYEdge = 2;
railSlotToXZ = 3;
railSlotToSideWallSlot = 2;
sideWallSlotToXZ = 3;
include <./sharedVariables.scad>
yBarDepth = maxUnitDepth + 2*railSlotToInnerYEdge;
yBarWidth = railSlotToInnerYEdge + railTotalWidth+ railSlotToSideWallSlot
+ sideWallSlotToOuterYEdge + sideWallConnectorSlotWidth;
yBarHeight = 15;
yBarWallThickness = 3;
yBarRoundness = baseRoundness;
joinCornerDepth = 32;
echo("Bar total depth: ", yBarDepth);
echo("Bar total width: ", yBarWidth);