bulk
This commit is contained in:
@@ -7,3 +7,8 @@ $fn=64;
|
||||
|
||||
|
||||
eps=0.01;
|
||||
|
||||
inf10 = 10;
|
||||
inf50 = 50;
|
||||
inf1000 = 1000;
|
||||
inf = inf1000;
|
||||
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
zhao@zhao-desktop.12132:1663410391
|
||||
+11
-18
@@ -1,29 +1,24 @@
|
||||
include <../common.scad>
|
||||
include <./screws.scad>
|
||||
|
||||
$fn=64;
|
||||
|
||||
eps=0.1;
|
||||
|
||||
slack = 0.5;
|
||||
m3Diameter = 3.0;
|
||||
m3Radius = m3Diameter/2.0;
|
||||
m3ptr = m3Radius + slack;
|
||||
|
||||
module baseFrame() {
|
||||
difference() {
|
||||
cube(size=[200,200,4], center=true);
|
||||
cube(size=[180,180,4], center=true);
|
||||
}
|
||||
|
||||
translate(v=[90,90,0])
|
||||
translate(v=[80,80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
|
||||
translate(v=[-90,90,0])
|
||||
translate(v=[-80,80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
|
||||
translate(v=[90,-90,0])
|
||||
translate(v=[80,-80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
|
||||
translate(v=[-90,-90,0])
|
||||
translate(v=[-80,-80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
}
|
||||
|
||||
@@ -31,7 +26,7 @@ module lugBottom() {
|
||||
difference() {
|
||||
cube(size=[9.7,9.7,6], center=true);
|
||||
|
||||
translate(v=[1,1,0])
|
||||
translate(v=[2,2,0])
|
||||
cube(size=[9.1,9.1,5+1], center=true);
|
||||
}
|
||||
|
||||
@@ -63,16 +58,16 @@ module base() {
|
||||
}
|
||||
|
||||
union() {
|
||||
translate(v=[90,90,0])
|
||||
translate(v=[80,80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[-90,90,0])
|
||||
translate(v=[-80,80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[90,-90,0])
|
||||
translate(v=[80,-80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[-90,-90,0])
|
||||
translate(v=[-80,-80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
}
|
||||
@@ -81,6 +76,4 @@ module base() {
|
||||
|
||||
base();
|
||||
|
||||
*lugBottom();
|
||||
|
||||
|
||||
|
||||
+4331
-4331
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,71 @@
|
||||
include <../common.scad>
|
||||
include <./screws.scad>
|
||||
include <../rpi/voronoi.scad>
|
||||
|
||||
vU = 2;
|
||||
uHeight = 10;
|
||||
|
||||
plateScrewDiffV = uHeight*vU;
|
||||
plateScrewDiffH = 180;
|
||||
|
||||
plateScrewToHEdge = 4.5;
|
||||
plateScrewToVEdge = 5.5;
|
||||
|
||||
frontPlateThickness = 2.5;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
difference() {
|
||||
difference () {
|
||||
rotate(a=[-90,0,0])
|
||||
frontPlate();
|
||||
translate(v=[0,0,-5])
|
||||
voronoi3u_N(10);
|
||||
}
|
||||
// lug holes
|
||||
union() {
|
||||
translate(v=[160,-3,-frontPlateThickness])
|
||||
cube(size=[5.2, 5.2, 3]);
|
||||
translate(v=[160-88,-3,-frontPlateThickness])
|
||||
cube(size=[5.2, 5.2, 3]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,158 @@
|
||||
include <../common.scad>
|
||||
include <./screws.scad>
|
||||
|
||||
|
||||
//slack = 0.5;
|
||||
//m3Diameter = 3.0;
|
||||
//m3Radius = m3Diameter/2.0;
|
||||
//m3ptr = m3Radius + slack;
|
||||
|
||||
legWidth = 16;
|
||||
legLength = 16;
|
||||
legHeight = 60;
|
||||
|
||||
legFrontThickness = 6;
|
||||
legSupportThickness = 4;
|
||||
|
||||
legWingThickness = 4;
|
||||
legWingLength = 9;
|
||||
|
||||
// 9.5 to account for space for inserting hex nuts at the top
|
||||
legWingWidth = 9.5+legSupportThickness;
|
||||
|
||||
|
||||
module legWing() {
|
||||
difference() {
|
||||
cube(size=[legWingLength, legWingThickness, legWingWidth]);
|
||||
|
||||
union() {
|
||||
translate(v=[4,0,10])
|
||||
rotate(a=[90,0,0])
|
||||
cylinder(r=m3RadiusSlacked, h=20, center=true);
|
||||
|
||||
translate(v=[14,0,10])
|
||||
rotate(a=[90,0,0])
|
||||
cylinder(r=m3RadiusSlacked, h=20, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module base() {
|
||||
difference() {
|
||||
cube(size=[25,25,legWingThickness]);
|
||||
|
||||
union() {
|
||||
translate(v=[20,20,0])
|
||||
cylinder(r=m3RadiusSlacked, h=100, center=true);
|
||||
|
||||
translate(v=[10,10,0])
|
||||
cylinder(r=m3RadiusSlacked, h=100, center=true);
|
||||
|
||||
translate(v=[20,10,0])
|
||||
cylinder(r=m3RadiusSlacked, h=100, center=true);
|
||||
|
||||
translate(v=[10,20,0])
|
||||
cylinder(r=m3RadiusSlacked, h=100, center=true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module baseLeg(legHeight) {
|
||||
union() {
|
||||
difference() {
|
||||
cube(size=[16,16, legHeight]);
|
||||
|
||||
union() {
|
||||
translate(v=[4,6,0])
|
||||
cube(size=[16, 16, legHeight]);
|
||||
|
||||
// compensate for differences between leg/wing thickness
|
||||
translate(v=[legSupportThickness,legSupportThickness,0])
|
||||
cube(size=[legWidth,legWidth,legSupportThickness+10]);
|
||||
|
||||
translate(v=[legSupportThickness,legSupportThickness,legHeight-legWingWidth])
|
||||
cube(size=[legWidth,legWidth,legSupportThickness+10]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
translate(v=[16,0,0])
|
||||
legWing();
|
||||
|
||||
|
||||
translate(v=[16,0,legHeight])
|
||||
mirror(v=[0,0,1]) {
|
||||
legWing();
|
||||
}
|
||||
|
||||
mirror(v=[1,-1,0]) {
|
||||
translate(v=[16,0,0])
|
||||
legWing();
|
||||
|
||||
|
||||
translate(v=[16,0,legHeight])
|
||||
mirror(v=[0,0,1]) {
|
||||
legWing();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
base();
|
||||
|
||||
translate(v=[0,0,legHeight-legWingThickness])
|
||||
base();
|
||||
}
|
||||
|
||||
*baseLeg(180);
|
||||
|
||||
module leg(ui) {
|
||||
assert(ui > 0);
|
||||
|
||||
legLength = 20 + (ui-1)*10;
|
||||
|
||||
difference() {
|
||||
baseLeg(legLength);
|
||||
|
||||
union() {
|
||||
|
||||
intersection() {
|
||||
union() {
|
||||
for (i = [1:ui-2]) {
|
||||
translate(v=[0,10,(i+1)*10])
|
||||
rotate(a=[0,90,0])
|
||||
*cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[10,3,(i+1)*10])
|
||||
rotate(a=[90,-10,0])
|
||||
m4HexNutPocketNegative();
|
||||
}
|
||||
}
|
||||
translate(v=[-1,-1,legWingWidth])
|
||||
cube(size=[1000,1000,legLength-2*legWingWidth]);
|
||||
}
|
||||
|
||||
translate(v=[0,10,10])
|
||||
rotate(a=[0,90,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[0,10,ui*10])
|
||||
rotate(a=[0,90,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
|
||||
translate(v=[10,0,10])
|
||||
rotate(a=[90,0,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[10,0,ui*10])
|
||||
rotate(a=[90,0,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//mirror(v=[1,0,0])
|
||||
leg(20);
|
||||
+54952
File diff suppressed because it is too large
Load Diff
+54952
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,133 @@
|
||||
include <../common.scad>
|
||||
include <./screws.scad>
|
||||
include <../rockpro/rockpro.scad>
|
||||
|
||||
vU = 4;
|
||||
uHeight = 10;
|
||||
|
||||
plateScrewDiffV = uHeight*vU;
|
||||
plateScrewDiffH = 180;
|
||||
|
||||
plateScrewToHEdge = 4.5;
|
||||
plateScrewToVEdge = 5.5;
|
||||
|
||||
frontPlateThickness = 2.5;
|
||||
|
||||
frontPlateV = plateScrewDiffV + 2*plateScrewToHEdge;
|
||||
frontPlateH = plateScrewDiffH + 2*plateScrewToVEdge;
|
||||
|
||||
|
||||
plateScrewToBoxMin = 6;
|
||||
|
||||
// BOX CONFIG
|
||||
|
||||
// box dimensions
|
||||
boxDepth = 135;
|
||||
boxWidth = 95;
|
||||
|
||||
boxBottomThickness = 1;
|
||||
boxSideThickness = 2;
|
||||
boxBackThickness = 2;
|
||||
// boxFrontThickness is just frontPlateThickness
|
||||
|
||||
|
||||
|
||||
boxTopSpace = 1; // meant for lids?
|
||||
boxBottomSpace = 1; // meant to be used for boxes that expect support rails
|
||||
|
||||
|
||||
boxHeight = vU * uHeight + 2*plateScrewToHEdge - (boxBottomSpace+boxTopSpace);
|
||||
|
||||
|
||||
|
||||
// all of these are defined on the xy plane with centered zLen height
|
||||
// 'rise' is meant model how raised a pcb is. More specifically, the distance between the top of
|
||||
// the pcb and the bottom of the inside of the case
|
||||
module frontFaceHoles(zLen, rise) {
|
||||
|
||||
//mirror(v=[0,1,0])
|
||||
// translate(v=[5,-eps,rise])
|
||||
//frontFaceIOCutouts_N();
|
||||
}
|
||||
|
||||
module backFaceHoles(zLen, rise) {
|
||||
}
|
||||
|
||||
module leftFaceHoles(zLen, rise) {
|
||||
}
|
||||
|
||||
module rightFaceHoles(zLen, rise) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
module boxBody() {
|
||||
// save this transformation...
|
||||
// translate(v=[(plateScrewDiffH-boxWidth)/2.0,0,boxBottomSpace -plateScrewToHEdge])
|
||||
|
||||
// convert to inside box space
|
||||
translate(v=[-boxSideThickness, -frontPlateThickness, -boxBottomThickness])
|
||||
difference() {
|
||||
cube(size=[boxWidth, boxDepth, boxHeight]);
|
||||
translate(v=[boxSideThickness, frontPlateThickness, boxBottomThickness])
|
||||
cube(size=[boxWidth-2*boxSideThickness, boxDepth-(boxBackThickness+frontPlateThickness), inf]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
*difference() {
|
||||
boxBody();
|
||||
|
||||
translate(v=[7,2,5])
|
||||
cutoutProfile_N();
|
||||
}
|
||||
|
||||
translate(v=[7,2,5])
|
||||
*cutoutProfile_N();
|
||||
|
||||
|
||||
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
// TODO REMOVE. Used to save on filament and print time
|
||||
scale(v=[0.8, 1+eps, 0.5])
|
||||
translate(v=[0,-eps,0])
|
||||
translate(v=[21,0,5])
|
||||
_frontPlateBody();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
frontPlate();
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,11 +8,12 @@ slack = 0.4;
|
||||
|
||||
boxWidth = 157.67;
|
||||
boxHeight = 27.0;
|
||||
boxLength = 101.5;
|
||||
boxLength = 101.5+1;
|
||||
|
||||
topThickness = 1.0;
|
||||
bottomThickness = 1.0;
|
||||
|
||||
faceThickness = 3.0;
|
||||
sideThickness = 2.0;
|
||||
sideSupportWidth = 10;
|
||||
|
||||
@@ -23,19 +24,21 @@ totalLength = boxLength+2*sideThickness;
|
||||
|
||||
|
||||
railMountWidthDiff = (200.0 - (boxWidth + 2*sideThickness)) / 2.0;
|
||||
|
||||
totalMountLength = 200.0 + 2*faceThickness + 1;
|
||||
|
||||
module sideHolder() {
|
||||
|
||||
|
||||
module frontLowerCaseSegment() {
|
||||
translate(v=[0,0,0])
|
||||
cube(size=[sideSupportWidth, sideThickness, bottomThickness]);
|
||||
cube(size=[sideSupportWidth, faceThickness, bottomThickness]);
|
||||
}
|
||||
|
||||
module frontUpperCaseSegment() {
|
||||
// no room for slack? :(
|
||||
translate(v=[0,0,boxHeight+bottomThickness])
|
||||
cube(size=[sideSupportWidth, sideThickness, topThickness]);
|
||||
cube(size=[sideSupportWidth, faceThickness, topThickness]);
|
||||
}
|
||||
|
||||
module backLowerCaseSegment() {
|
||||
@@ -49,25 +52,25 @@ module sideHolder() {
|
||||
}
|
||||
|
||||
module backLowerRailSegment() {
|
||||
translate(v=[0,198.0-sideThickness,0])
|
||||
cube(size=[sideSupportWidth, sideThickness, bottomThickness]);
|
||||
translate(v=[0,200.0+1,0])
|
||||
cube(size=[sideSupportWidth, faceThickness, bottomThickness]);
|
||||
}
|
||||
|
||||
|
||||
module backUpperRailSegment() {
|
||||
translate(v=[0,198.0-sideThickness,boxHeight+bottomThickness])
|
||||
cube(size=[sideSupportWidth, sideThickness, topThickness]);
|
||||
translate(v=[0,200.0+1,boxHeight+bottomThickness])
|
||||
cube(size=[sideSupportWidth, faceThickness, topThickness]);
|
||||
}
|
||||
|
||||
module frontRailMountSegment() {
|
||||
// +2 is slack
|
||||
translate(v=[-railMountWidthDiff+5,0,0])
|
||||
// should technically use different totalHeight, as current totalHeight is for case holder
|
||||
cube(size=[railWidth,sideThickness,totalHeight]);
|
||||
cube(size=[railWidth,faceThickness,totalHeight]);
|
||||
}
|
||||
|
||||
module backRailMountSegment() {
|
||||
translate(v=[0,198.0-sideThickness,0])
|
||||
translate(v=[0,200+1,0])
|
||||
// should technically use different totalHeight, as current totalHeight is for case holder
|
||||
frontRailMountSegment();
|
||||
}
|
||||
@@ -82,19 +85,19 @@ module sideHolder() {
|
||||
}
|
||||
|
||||
// screw holes
|
||||
translate(v=[-railMountWidthDiff + 10,0,5])
|
||||
translate(v=[-railMountWidthDiff + 11.5,0,5])
|
||||
rotate(a=[90,0,0])
|
||||
cylinder(r=m3RadiusSlacked, h=10, center=true);
|
||||
cylinder(r=m4RadiusSlacked, h=10, center=true);
|
||||
|
||||
translate(v=[-railMountWidthDiff + 10,0,25])
|
||||
translate(v=[-railMountWidthDiff + 11.5,0,25])
|
||||
rotate(a=[90,0,0])
|
||||
cylinder(r=m3RadiusSlacked, h=10, center=true);
|
||||
cylinder(r=m4RadiusSlacked, h=10, center=true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module backFace() {
|
||||
translate(v=[0,198.0-sideThickness,0])
|
||||
translate(v=[0,200.0+faceThickness+1,0])
|
||||
frontFace();
|
||||
|
||||
}
|
||||
@@ -134,24 +137,24 @@ module sideHolder() {
|
||||
difference() {
|
||||
cube(size=[sideThickness, totalLength, totalHeight]);
|
||||
|
||||
translate(v=[-eps/2,5,5])
|
||||
cube(size=[sideThickness+eps,totalLength-10+eps, totalHeight-10+eps]);
|
||||
translate(v=[-eps/2,8,5])
|
||||
cube(size=[sideThickness+eps,totalLength-17.5+eps, totalHeight-10+eps]);
|
||||
}
|
||||
|
||||
|
||||
// side support/hold for case
|
||||
difference() {
|
||||
translate(v=[sideSupportWidth-sideThickness,totalLength,0])
|
||||
cube(size=[sideThickness, 198-totalLength, totalHeight]);
|
||||
cube(size=[sideThickness, totalMountLength-totalLength, totalHeight]);
|
||||
|
||||
translate(v=[sideSupportWidth-sideThickness-eps/2,(198-totalLength)+15,5])
|
||||
cube(size=[sideThickness+eps,(198-totalLength)-10+eps, totalHeight-10+eps]);
|
||||
translate(v=[sideSupportWidth-sideThickness-eps/2,(200-totalLength)+20,5])
|
||||
cube(size=[sideThickness+eps,(200-totalLength)-10+eps, totalHeight-10+eps]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module sideHolderAligned() {
|
||||
translate(v=[19,0,0])
|
||||
//translate(v=[19,0,0])
|
||||
sideHolder();
|
||||
}
|
||||
|
||||
@@ -163,6 +166,6 @@ module mSide() {
|
||||
|
||||
sideHolderAligned();
|
||||
|
||||
translate(v=[42 + boxWidth,0,0])
|
||||
*mSide();
|
||||
//translate(v=[42 + boxWidth,0,0])
|
||||
//mSide();
|
||||
|
||||
|
||||
+5778
-5778
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,62 @@
|
||||
/* Contains screw mounts to be used to fix risers and whatnot into plastic */
|
||||
|
||||
include <../common.scad>
|
||||
include <./screws.scad>
|
||||
|
||||
|
||||
|
||||
// Heat set inserts:
|
||||
|
||||
// Useful references:
|
||||
// https://hackaday.com/2019/02/28/threading-3d-printed-parts-how-to-use-heat-set-inserts/
|
||||
|
||||
|
||||
|
||||
// My knurled brass nut dimensions
|
||||
|
||||
|
||||
m4NutDiameter = 6;
|
||||
m4NutLength1 = 6;
|
||||
|
||||
m3NutDiameter = 4.9;
|
||||
m3NutLength1 = 6;
|
||||
|
||||
|
||||
module nut_N(diameter,length,edm,elm) {
|
||||
cylinder(h=(length + length*edm), d=(diameter + diameter*edm));
|
||||
}
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
cube(size=[30,30,2.5]);
|
||||
|
||||
translate(v=[8,8,0])
|
||||
cylinder(h=8,d=8);
|
||||
|
||||
translate(v=[22,8,0])
|
||||
cylinder(h=10,d=8);
|
||||
|
||||
translate(v=[8,22,0])
|
||||
cylinder(h=8,d=10);
|
||||
|
||||
translate(v=[22,22,0])
|
||||
cylinder(h=10,d=10);
|
||||
}
|
||||
|
||||
union() {
|
||||
translate(v=[8,8,2])
|
||||
cylinder(h=6, d=6);
|
||||
|
||||
translate(v=[22,8,4])
|
||||
cylinder(h=6,d=6);
|
||||
|
||||
translate(v=[8,22,2])
|
||||
cylinder(h=6,d=6);
|
||||
|
||||
translate(v=[22,22,3])
|
||||
cylinder(h=8,d=6);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ module m4HexNutPocketNegative() {
|
||||
|
||||
// TODO: remove test
|
||||
|
||||
difference() {
|
||||
*difference() {
|
||||
translate(v=[0,1,0])
|
||||
cube(size=[10,12,6], center=true);
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
include <../common.scad>
|
||||
include <./screws.scad>
|
||||
|
||||
$fn=64;
|
||||
|
||||
module baseFrame() {
|
||||
difference() {
|
||||
cube(size=[200,200,4], center=true);
|
||||
cube(size=[180,180,4], center=true);
|
||||
}
|
||||
|
||||
translate(v=[80,80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
|
||||
translate(v=[-80,80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
|
||||
translate(v=[80,-80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
|
||||
translate(v=[-80,-80,0])
|
||||
cube(size=[20,20, 4],center=true);
|
||||
}
|
||||
|
||||
module lugBottom() {
|
||||
difference() {
|
||||
cube(size=[9.7,9.7,6], center=true);
|
||||
|
||||
translate(v=[2,2,0])
|
||||
cube(size=[9.1,9.1,5+1], center=true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
module base() {
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
translate(v=[0,0,4/2])
|
||||
baseFrame();
|
||||
|
||||
|
||||
translate(v=[-90,-90,-6/2])
|
||||
lugBottom();
|
||||
|
||||
mirror(v=[1,0,0])
|
||||
translate(v=[-90,-90,-6/2])
|
||||
lugBottom();
|
||||
|
||||
mirror(v=[0,1,0])
|
||||
translate(v=[-90,-90,-6/2])
|
||||
lugBottom();
|
||||
|
||||
mirror(v=[1,1,0])
|
||||
translate(v=[-90,-90,-6/2])
|
||||
lugBottom();
|
||||
}
|
||||
|
||||
union() {
|
||||
translate(v=[80,80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[-80,80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[80,-80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
translate(v=[-80,-80,0])
|
||||
cylinder(h = 100, r = m3ptr, $fn=32, center=true);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base();
|
||||
|
||||
|
||||
@@ -1,21 +1,64 @@
|
||||
include <../common.scad>
|
||||
|
||||
// All coordinates are in [x,y], or [x,y,z] format
|
||||
|
||||
pcbDimensions = [79.41, 127.06]; // [x,y]
|
||||
pcbThickness = 1.22;
|
||||
|
||||
rockProMountDeltaXY = [[0,0,0], [118,0,0], [118,71.0,0], [0,71.0,0]];
|
||||
// TODO move mount points
|
||||
mountPoints = [[0,0,0], [0,118,0], [71.0,118, 0], [71.0,0,0]];
|
||||
|
||||
|
||||
module rockProMountPoints(cylHeight, cylRad1, cylRad2, cylFn, center) {
|
||||
|
||||
module mountPoints_N(cylHeight, cylRad1, cylRad2, cylFn, center) {
|
||||
for (i=[0:3]) {
|
||||
p = rockProMountDeltaXY[i];
|
||||
p = mountPoints[i];
|
||||
translate(v=[p[0], p[1], p[2]])
|
||||
cylinder(r1=cylRad1, r2=cylRad2, h=cylHeight, $fn=cylFn, center=center);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module pcb() {
|
||||
cube(size=[pcbDimensions[0], pcbDimensions[1], pcbThickness]);
|
||||
}
|
||||
|
||||
//rockProMountPoints(10,2,64, true);
|
||||
// defined on x-z plane, start at top of pcb
|
||||
module frontFaceIOCutouts_N() {
|
||||
translate(v=[9,0,0])
|
||||
cube(size=[26.0,inf50,7.5]);
|
||||
|
||||
translate(v=[35,0,0])
|
||||
cube(size=[35,inf50,17.9]);
|
||||
}
|
||||
module backFaceIOCutouts_N() {
|
||||
translate(v=[9,0,0])
|
||||
cube(size=[61,inf50,14]);
|
||||
}
|
||||
|
||||
|
||||
module cutoutProfile_N() {
|
||||
|
||||
color([1,0,1])
|
||||
union() {
|
||||
mirror(v=[0,1,0])
|
||||
translate(v=[0,-1,pcbThickness])
|
||||
frontFaceIOCutouts_N();
|
||||
|
||||
translate(v=[0,pcbDimensions[1]-1, pcbThickness])
|
||||
backFaceIOCutouts_N();
|
||||
}
|
||||
|
||||
color([0.3,0.8,0.1])
|
||||
difference() {
|
||||
pcb();
|
||||
translate(v=[3.75, 3.75])
|
||||
mountPoints_N(10,2,2,10,true);
|
||||
}
|
||||
}
|
||||
|
||||
cutoutProfile_N();
|
||||
|
||||
|
||||
//mountPoints_N(10,2,2, true);
|
||||
|
||||
|
||||
|
||||
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
zhao@zhao-desktop.12132:1663410391
|
||||
@@ -0,0 +1,149 @@
|
||||
include <../common.scad>
|
||||
|
||||
// All coordinates are in [x,y], or [x,y,z] format
|
||||
|
||||
pcbDimensions = [56.0, 85.1]; // [x,y]
|
||||
pcbThickness = 1.42;
|
||||
|
||||
|
||||
// [+x, -x, +y, -y]
|
||||
pcbCaseSpace = [5, 2, 2, 2];
|
||||
|
||||
pcbRise = 3;
|
||||
caseWallThickness = 2;
|
||||
caseBottomThickness = 2;
|
||||
|
||||
|
||||
mountPointDiameter = 2.69;
|
||||
mountPoints = [[3.65,23.30,0], [3.65,pcbDimensions[1]-3.65,0], [pcbDimensions[0]-3.65,23.30,0], [pcbDimensions[0]-3.65,pcbDimensions[1]-3.65,0]];
|
||||
|
||||
module pcb() {
|
||||
cube(size=[pcbDimensions[0], pcbDimensions[1], pcbThickness]);
|
||||
}
|
||||
|
||||
module pcbCaseBottom_() {
|
||||
translate(v=[-pcbCaseSpace[1]-caseWallThickness, -pcbCaseSpace[3]-caseWallThickness, -caseBottomThickness-pcbRise])
|
||||
difference() {
|
||||
cube(size=[
|
||||
pcbDimensions[0]+pcbCaseSpace[0]+pcbCaseSpace[1] + 2*caseWallThickness,
|
||||
pcbDimensions[1]+pcbCaseSpace[2]+pcbCaseSpace[3] + 2*caseWallThickness,
|
||||
26 // 3u case, subtracted for and other bullshit
|
||||
]);
|
||||
translate(v=[caseWallThickness, caseWallThickness, caseBottomThickness])
|
||||
cube(size=[
|
||||
pcbDimensions[0]+pcbCaseSpace[0]+pcbCaseSpace[1],
|
||||
pcbDimensions[1]+pcbCaseSpace[2]+pcbCaseSpace[3],
|
||||
26 // 3u case, subtracted 4 for lid and bullshit
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
module pcbCaseWithRisers_() {
|
||||
union() {
|
||||
translate(v=[0,0,-pcbRise]){
|
||||
mountPoints_N(pcbRise, mountPointDiameter, mountPointDiameter, 32, false);
|
||||
mountPoints_N(pcbRise+2, mountPointDiameter/2.5, mountPointDiameter/2.5, 32, false);
|
||||
}
|
||||
pcbCaseBottom_();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module cutoutProfileAirflow_N() {
|
||||
|
||||
// bottom cutouts
|
||||
union() {
|
||||
for (i=[0:11]) {
|
||||
translate(v=[pcbDimensions[0]/2.0, i*6 + 10,0])
|
||||
minkowski() {
|
||||
cube(size=[30,1,20], center=true);
|
||||
cylinder(h=1,r=1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// back cutouts
|
||||
for (i=[0:4]) {
|
||||
translate(v=[i*10 + 7,pcbDimensions[1],4])
|
||||
minkowski() {
|
||||
|
||||
cube(size=[3,100,10], center=false);
|
||||
rotate(a=[90,0,0])
|
||||
cylinder(h=1,r=2);
|
||||
}
|
||||
}
|
||||
|
||||
// front cutout
|
||||
translate(v=[pcbDimensions[0],2.5,1])
|
||||
cube(size=[inf50, 80, 15]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
difference() {
|
||||
|
||||
union() {
|
||||
pcbCaseWithRisers_();
|
||||
|
||||
// lugs
|
||||
translate(v=[pcbDimensions[0]+caseWallThickness+pcbCaseSpace[0],-caseWallThickness-pcbCaseSpace[3],-pcbRise-caseBottomThickness])
|
||||
cube(size=[2,5,5]);
|
||||
|
||||
translate(v=[pcbDimensions[0]+caseWallThickness+pcbCaseSpace[0],pcbDimensions[1]+pcbCaseSpace[2]-5+caseWallThickness,-pcbRise-caseBottomThickness])
|
||||
cube(size=[2,5,5]);
|
||||
|
||||
}
|
||||
|
||||
union() {
|
||||
cutoutProfile_N();
|
||||
cutoutProfileAirflow_N();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//cutoutProfileAirflow_N();
|
||||
|
||||
|
||||
|
||||
module mountPoints_N(cylHeight, cylRad1, cylRad2, cylFn, center) {
|
||||
for (i=[0:3]) {
|
||||
p = mountPoints[i];
|
||||
translate(v=[p[0], p[1], p[2]])
|
||||
cylinder(r1=cylRad1, r2=cylRad2, h=cylHeight, $fn=cylFn, center=center);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
*difference() {
|
||||
union () {
|
||||
pcb();
|
||||
mountPoints_N(7, mountPointDiameter/2.5, mountPointDiameter/2.5, 32, false);
|
||||
mountPoints_N(5, mountPointDiameter, mountPointDiameter, 32, false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
module cutoutProfile_N() {
|
||||
|
||||
|
||||
color([1,0,1])
|
||||
union() {
|
||||
// front I/O
|
||||
mirror(v=[0,1,0])
|
||||
translate(v=[2, -eps*100, pcbThickness])
|
||||
cube(size=[52.0 + 0.1, inf50, 16.0 + 0.1]);
|
||||
|
||||
// side I/O
|
||||
|
||||
translate(v=[-48, (pcbDimensions[1]-54)-5, pcbThickness])
|
||||
cube(size=[inf50, 54, 8]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//cutoutProfile_N();
|
||||
//pcb();
|
||||
|
||||
+40798
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,22 @@
|
||||
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
cube(size=[67,93,1]);
|
||||
translate(v=[2, 2,1])
|
||||
cube(size=[63,88.8,2]);
|
||||
}
|
||||
|
||||
union() {
|
||||
translate(v=[3.5, 3.5,1])
|
||||
cube(size=[60,85,3]);
|
||||
|
||||
for(i=[0:7]) {
|
||||
translate(v=[33.5,i*10 + 10,0])
|
||||
minkowski() {
|
||||
cylinder(h=1,r=1);
|
||||
cube(size=[50,5,10], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+2326
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,95 @@
|
||||
|
||||
// (c)2013 Felipe Sanches <juca@members.fsf.org>
|
||||
// licensed under the terms of the GNU GPL version 3 (or later)
|
||||
|
||||
function normalize(v) = v / (sqrt(v[0] * v[0] + v[1] * v[1]));
|
||||
|
||||
//
|
||||
// The voronoi() function generates a 2D surface, which can be provided to
|
||||
// a) linear_extrude() to produce a 3D object
|
||||
// b) intersection() to restrict it to a a specified shape -- see voronoi_polygon.scad
|
||||
//
|
||||
// Parameters:
|
||||
// points (required) ... nuclei coordinates (array of [x, y] pairs)
|
||||
// L ... the radius of the "world" (the pattern is built within this circle)
|
||||
// thickness ... the thickness of the lines between cells
|
||||
// round ... the radius applied to corners (fillet in CAD terms)
|
||||
// nuclei (bool) ... show nuclei sites
|
||||
//
|
||||
// These parameters need to be kept more or less in proportion to each other, and to the distance
|
||||
// apart of points in the point_set. If one or the other parameter is increased or decreased too
|
||||
// much, you'll get no output.
|
||||
//
|
||||
module voronoi(points, L = 200, thickness = 1, round = 6, nuclei = true) {
|
||||
for (p = points) {
|
||||
difference() {
|
||||
minkowski() {
|
||||
intersection_for(p1 = points){
|
||||
if (p != p1) {
|
||||
angle = 90 + atan2(p[1] - p1[1], p[0] - p1[0]);
|
||||
|
||||
translate((p + p1) / 2 - normalize(p1 - p) * (thickness + round))
|
||||
rotate([0, 0, angle])
|
||||
translate([-L, -L])
|
||||
square([2 * L, L]);
|
||||
}
|
||||
}
|
||||
circle(r = round, $fn = 20);
|
||||
}
|
||||
if (nuclei)
|
||||
translate(p) circle(r = 1, $fn = 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// The random_voronoi() function is the helper wrapper over the voronoi() core.
|
||||
// It generates random nuclei site coordinates into the square area,
|
||||
// passing other arguments to voronoi() unchanged.
|
||||
//
|
||||
// Parameters:
|
||||
// n ... number of nuclei sites to be generated
|
||||
// nuclei (bool) ... show nuclei sites
|
||||
// L ... the radius of the "world" (the pattern is built within this circle)
|
||||
// thickness ... the thickness of the lines between cells
|
||||
// round ... the radius applied to corners (fillet in CAD terms)
|
||||
// min ... minimum x and y coordinate for nuclei generation
|
||||
// max ... maximum x and y coordinate for nuclei generation
|
||||
// seed ... seed for the random generator (random if undefined)
|
||||
// center (bool) ... move resulting pattern to [0, 0] if true
|
||||
//
|
||||
module random_voronoi(n = 20, nuclei = true, L = 200, thickness = 1, round = 6, min = 0, max = 100, seed = undef, center = false) {
|
||||
seed = seed == undef ? rands(0, 100, 1)[0] : seed;
|
||||
echo("Seed", seed);
|
||||
|
||||
// Generate points.
|
||||
x = rands(min, max, n, seed);
|
||||
y = rands(min, max, n, seed + 1);
|
||||
points = [ for (i = [0 : n - 1]) [x[i], y[i]] ];
|
||||
|
||||
// Center Voronoi.
|
||||
offset_x = center ? -(max(x) - min(x)) / 2 : 0;
|
||||
offset_y = center ? -(max(y) - min(y)) / 2 : 0;
|
||||
translate([offset_x, offset_y])
|
||||
|
||||
voronoi(points, L = L, thickness = thickness, round = round, nuclei = nuclei);
|
||||
}
|
||||
|
||||
// example with an explicit list of points:
|
||||
point_set = [
|
||||
[0, 0], [30, 0], [20, 10], [50, 20], [15, 30], [85, 30], [35, 30], [12, 60],
|
||||
[45, 50], [80, 80], [20, -40], [-20, 20], [-15, 10], [-15, 50]
|
||||
];
|
||||
//voronoi(points = point_set, round = 4, nuclei = true);
|
||||
|
||||
module voronoi3u_N(h) {
|
||||
intersection() {
|
||||
translate(v=[10,5,0])
|
||||
cube(size=[160, 10, h]);
|
||||
translate(v=[20,-52,0])
|
||||
scale(v=[0.40,0.44,10])
|
||||
linear_extrude(height=10)
|
||||
random_voronoi(n = 128, round = 2, min = 0, max = 350, seed = 40, thickness=3.5, nuclei=false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user