3d/rücklampe.scad

100 lines
3.2 KiB
OpenSCAD

include <BOSL/constants.scad>;
use <BOSL/metric_screws.scad>;
only = "outer";
height = 20;
width = 100;
depth = 30;
thickness = 2;
gap = 0.4;
inner = [width, depth, height];
outer = [width+2*thickness+2*gap, depth+2*thickness+2*gap, height+2*thickness+2*gap];
diag_overlap = 8;
module auflage() {
rotate([180,0,0])
difference() {
translate([0,1,0]) cube( [10,2,10], center=true);
translate([-5,2,1]) rotate([45,0,0]) cube([10,6,10]);
translate([1,2,-5]) rotate([0,0,-45]) cube([10,6,10]);
translate([-5,2,-1]) rotate([-45,0,0]) translate([0,0,-10]) cube([10,6,10]);
translate([-1,2,-5]) rotate([0,0,45]) translate([-10,0,0]) cube([10,6,10]);
};
};
if(only!="inner") {
rotate([0, only=="outer" ? 90 : 0,0]){
union() {
difference() {
union() {
rotate([ 0, 90, 0])
cylinder( inner.x+2*thickness, outer.z/2+thickness, outer.z/2+thickness, center=true);
translate([ 0, -inner.y/4-2*thickness, 0])
cube([ inner.x+2*thickness, inner.y/2+thickness, inner.z+2*thickness], center=true);
};
union() {
//rotate([ 0, 90, 0])
//cylinder( inner.x, inner.z/2, inner.z/2, center=true);
translate([ 0, -inner.y/4-thickness, 0])
cube([ inner.x+2.1*thickness, inner.y/2+2*thickness, inner.z], center=true);
//translate([ 0, -inner.y/4-thickness, 0])
//cube([ inner.x-thickness, inner.y/2+thickness, inner.z-thickness], center=true);
}
};
translate( [inner.x/2-thickness/2, 0, inner.z/2-thickness/2])
auflage();
translate( [-inner.x/2+thickness/2, 0, inner.z/2-thickness/2])
auflage();
translate( [inner.x/2-thickness/2, 0, -inner.z/2+thickness/2])
auflage();
translate( [-inner.x/2+thickness/2, 0, -inner.z/2+thickness/2])
auflage();
};
};
};
if(only!="outer") {
rotate([only=="inner" ? 90 : 0,0,0]){
union() {
difference() {
union() {
rotate([ 0, 90, 0])
cylinder( outer.x+2*thickness+2*gap, outer.z/2+thickness+2*gap, outer.z/2+thickness+2*gap, center=true);
translate([ 0, -outer.y/4, 0])
cube([ outer.x+2*thickness+2*gap, outer.y/2+thickness+2*gap, outer.z+2*thickness+2*gap], center=true);
};
union() {
rotate([ 0, 90, 0])
cylinder( outer.x, outer.z/2, outer.z/2, center=true);
translate([ 0, -outer.y/4, 0])
cube([ outer.x, outer.y/2, outer.z], center=true);
};
translate([ 0, thickness, 0])
cube([ outer.x-2*thickness, outer.y-3*thickness, outer.z+3*thickness], center=true);
translate([ 0, -outer.y/2, 0]) {
cube([ outer.x-2*diag_overlap, 1.5*thickness, outer.z], center=true);
cube([ outer.x, 1.5*thickness, outer.z-2*diag_overlap], center=true);
diag_overlap_length = sqrt(diag_overlap^2*2);
o = [ outer.x/2-diag_overlap, -0.75*thickness, outer.z/2-diag_overlap];
translate([ o.x, o.y, o.z])
rotate([ 0,45,0])
cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true);
translate([ -o.x, o.y, o.z])
rotate([ 0,45,0])
cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true);
translate([ -o.x, o.y, -o.z])
rotate([ 0,45,0])
cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true);
translate([ o.x, o.y, -o.z])
rotate([ 0,45,0])
cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true);
}
}
}
};
};