include <3d/roundedcube.scad>; include ; use ; 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); } }; };