133 lines
2.6 KiB
OpenSCAD
133 lines
2.6 KiB
OpenSCAD
include <./common.scad>
|
|
include <./rack/screws.scad>
|
|
|
|
vU = 2;
|
|
uHeight = 10;
|
|
|
|
plateScrewDiffV = uHeight*vU;
|
|
plateScrewDiffH = 180;
|
|
|
|
plateScrewToHEdge = 4.5;
|
|
plateScrewToVEdge = 5.5;
|
|
|
|
frontPlateThickness = 3;
|
|
|
|
frontPlateV = plateScrewDiffV + 2*plateScrewToHEdge;
|
|
frontPlateH = plateScrewDiffH + 2*plateScrewToVEdge;
|
|
|
|
|
|
plateScrewToBoxMin = 6;
|
|
|
|
module _frontPlateBody() {
|
|
translate(v=[-plateScrewToVEdge,0,-plateScrewToHEdge])
|
|
cube(size=[frontPlateH,frontPlateThickness,frontPlateV]);
|
|
}
|
|
|
|
module _plateHole() {
|
|
rotate(a=[90,0,0])
|
|
cylinder(r=m4RadiusSlacked, h=inf, center=true);
|
|
}
|
|
|
|
|
|
module frontPlate() {
|
|
|
|
difference() {
|
|
_frontPlateBody();
|
|
|
|
union() {
|
|
// TODO: introduce helper modules for this pattern
|
|
_plateHole();
|
|
|
|
translate(v=[plateScrewDiffH,0,0])
|
|
_plateHole();
|
|
|
|
translate(v=[0,0,plateScrewDiffV])
|
|
_plateHole();
|
|
|
|
translate(v=[plateScrewDiffH,0,plateScrewDiffV])
|
|
_plateHole();
|
|
}
|
|
}
|
|
}
|
|
|
|
// keystone stuff
|
|
|
|
// a lot of these variables are useless, after a couple of design iterations
|
|
|
|
keystoneMainBodyWidth = 15.0;
|
|
keystoneMainBodyHeight = 16.90;
|
|
keystoneMainBodyDepth = 32.90;
|
|
|
|
|
|
heightWithHookBody = 20.2;
|
|
heightWithHookCatch = 21.30;
|
|
|
|
widthWithSideLugs = 15.96;
|
|
|
|
sideLugWidth = (widthWithSideLugs - keystoneMainBodyWidth) / 2.0;
|
|
|
|
|
|
heightWithBottomLug = 17.5;
|
|
|
|
frontToHookCatch = 8.35; // not sure about this
|
|
frontToBottomLugBack = 8.23;
|
|
frontToSideLugFront = 10.63;
|
|
|
|
|
|
module keystoneSlot_N() {
|
|
// main keystone body (no hooks or lugs)
|
|
cube(size=[keystoneMainBodyWidth, keystoneMainBodyDepth, keystoneMainBodyHeight]);
|
|
|
|
|
|
// slot for top hook
|
|
translate(v=[0,frontToHookCatch,0])
|
|
cube(size=[keystoneMainBodyWidth, keystoneMainBodyDepth -frontToHookCatch, heightWithHookBody]);
|
|
cube(size=[keystoneMainBodyWidth, frontToHookCatch, heightWithHookCatch]);
|
|
|
|
|
|
// slots for side lugs
|
|
translate(v=[-sideLugWidth, frontToSideLugFront,0])
|
|
cube(size=[widthWithSideLugs, keystoneMainBodyDepth-frontToSideLugFront, keystoneMainBodyHeight]);
|
|
|
|
// slots for bottom lugs
|
|
translate(v=[0,0,-(heightWithBottomLug-keystoneMainBodyHeight)])
|
|
cube(size=[keystoneMainBodyWidth, frontToBottomLugBack, keystoneMainBodyHeight]);
|
|
|
|
}
|
|
|
|
|
|
module keystoneJack_N() {
|
|
translate(v=[0,-4,0.5])
|
|
intersection() {
|
|
translate(v=[-2.5,4,-4])
|
|
cube(size=[20,6,28]);
|
|
keystoneSlot_N();
|
|
}
|
|
}
|
|
|
|
//keystoneJack_N();
|
|
|
|
module patchPanel_P() {
|
|
|
|
frontPlate();
|
|
for (i = [0:7]) {
|
|
translate(v=[(i*20+12.5)-2.5,0,-3.5])
|
|
cube(size=[20,6,28]);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
module patchPanel() {
|
|
difference() {
|
|
patchPanel_P();
|
|
|
|
for (i = [0:7]) {
|
|
translate(v=[i*20 + 12.5,0,0])
|
|
keystoneJack_N();
|
|
}
|
|
}
|
|
}
|
|
|
|
patchPanel();
|