93 lines
3.0 KiB
OpenSCAD
93 lines
3.0 KiB
OpenSCAD
include <3d/roundedcube.scad>;
|
|
include <BOSL/constants.scad>;
|
|
use <BOSL/metric_screws.scad>;
|
|
|
|
only = "outer";
|
|
|
|
function C(v1,v2) = [for(i=[0:len(v1)-1]) v1[i]*v2[i]];
|
|
|
|
function V(v) = [v.x, v.y, v.z, 1];
|
|
function Vzero() = [0, 0, 0, 1];
|
|
function V3d(v) = [v.x,v.y,v.z];
|
|
function MIdent() = [
|
|
[1,0,0,0],
|
|
[0,1,0,0],
|
|
[0,0,1,0],
|
|
[0,0,0,1]];
|
|
function MMove(d) = [
|
|
[1,0,0,d.x],
|
|
[0,1,0,d.y],
|
|
[0,0,1,d.z],
|
|
Vzero()];
|
|
function MMoveX(x) = MMove([x,0,0]);
|
|
function MMoveY(y) = MMove([0,y,0]);
|
|
function MMoveZ(z) = MMove([0,0,z]);
|
|
function MStretch(d) = [
|
|
[d.x,0,0,0],
|
|
[0,d.y,0,0],
|
|
[0,0,d.z,0],
|
|
Vzero()];
|
|
function MStretchX(x) = MStretch([x,1,1]);
|
|
function MStretchY(y) = MStretch([1,y,1]);
|
|
function MStretchZ(z) = MStretch([1,1,z]);
|
|
|
|
innerdim = V([40, 30, 20]);
|
|
thickness = 2;
|
|
glass = 1;
|
|
gap = 0.4;
|
|
thickness_ = [thickness, thickness/2, thickness, 0];
|
|
outerdim = innerdim+2*thickness_+[2*gap,2*gap,2*gap, 0];
|
|
front = V([innerdim.x-thickness,0,innerdim.y-thickness]);
|
|
|
|
if(only!="inner") {
|
|
rotate([only=="outer" ? -90 : 0,0,0]){
|
|
union() {
|
|
difference() {
|
|
cube( V3d(outerdim), center=true);
|
|
translate([0,-thickness,0])
|
|
cube( V3d(MMoveY(2*thickness)*innerdim+[2*gap,2*gap,2*gap,1]), center=true);
|
|
cube( V3d(MMove([-2*thickness+2*gap,4*thickness+2*gap,-2*thickness+2*gap])*innerdim), center=true);
|
|
translate([0,-outerdim.y/2+thickness/2,-outerdim.z/2+0.5*thickness])
|
|
cube([innerdim.x+2*gap,gap+1.1*thickness,1.1*thickness], center=true);
|
|
translate( [0, 0, -innerdim.z/2-1])
|
|
metric_nut(size=5, hole=false);
|
|
screw(screwsize=5,screwlen=outerdim.z,headsize=5,headlen=0,countersunk=true);
|
|
}
|
|
color("blue")
|
|
translate([0,outerdim.y/2-1.5-glass,outerdim.z/2-1.5*thickness])
|
|
cube([innerdim.x,1,thickness], center=true);
|
|
color("blue")
|
|
translate([-innerdim.x/2,-outerdim.y/2+thickness+3.5,outerdim.z/2-2*thickness])
|
|
difference() {
|
|
cube([innerdim.x+2, 5, thickness]);
|
|
translate([-0.5,1,0]) rotate([-60,0,0])
|
|
cube([innerdim.x+1,5,5]);
|
|
};
|
|
}
|
|
};
|
|
};
|
|
|
|
if(only!="outer") {
|
|
rotate([only=="inner" ? -90 : 0,0,0]){
|
|
color("orange") difference() {
|
|
union() {
|
|
translate( [0, -innerdim.y/2, -0.5*thickness])
|
|
cube( [innerdim.x, thickness, innerdim.z+thickness], center=true);
|
|
translate( [0, -0.5*thickness, -innerdim.z/2+thickness/2])
|
|
cube( [innerdim.x, innerdim.y, thickness], center=true);
|
|
translate( [0, -outerdim.y/2+thickness+4, -outerdim.z/2+2.5*thickness])
|
|
cube([innerdim.x,1,thickness], center=true);
|
|
translate( [innerdim.x/2-thickness/2, -innerdim.y/2+thickness, innerdim.z/2-thickness/2])
|
|
cube( [2,2,2], center=true);
|
|
translate( [-innerdim.x/2+thickness/2, -innerdim.y/2+thickness, innerdim.z/2-thickness/2])
|
|
cube( [2,2,2], center=true);
|
|
translate( [innerdim.x/2-thickness/2, -innerdim.y/2+thickness, -innerdim.z/2+1.5*thickness])
|
|
cube( [2,2,2], center=true);
|
|
translate( [-innerdim.x/2+thickness/2, -innerdim.y/2+thickness, -innerdim.z/2+1.5*thickness])
|
|
cube( [2,2,2], center=true);
|
|
}
|
|
translate( [0, 0, -innerdim.z/2-1])
|
|
metric_nut(size=5, hole=false);
|
|
}
|
|
};
|
|
}; |