3d/frontlampe.scad

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);
}
};
};