135 lines
4.2 KiB
OpenSCAD
135 lines
4.2 KiB
OpenSCAD
// Higher definition curves
|
|
$fs = 1;
|
|
|
|
module roundedcube(size = [1, 1, 1], center = false, radius = 0.5, apply_to = "all") {
|
|
// If single value, convert to [x, y, z] vector
|
|
size = (size[0] == undef) ? [size, size, size] : size;
|
|
|
|
translate_min = radius;
|
|
translate_xmax = size[0] - radius;
|
|
translate_ymax = size[1] - radius;
|
|
translate_zmax = size[2] - radius;
|
|
|
|
diameter = radius * 2;
|
|
|
|
module build_point(type = "sphere", rotate = [0, 0, 0]) {
|
|
if (type == "sphere") {
|
|
sphere(r = radius);
|
|
} else if (type == "cylinder") {
|
|
rotate(a = rotate)
|
|
cylinder(h = diameter, r = radius, center = true);
|
|
}
|
|
}
|
|
|
|
obj_translate = (center == false) ?
|
|
[0, 0, 0] : [
|
|
-(size[0] / 2),
|
|
-(size[1] / 2),
|
|
-(size[2] / 2)
|
|
];
|
|
|
|
translate(v = obj_translate) {
|
|
hull() {
|
|
for (translate_x = [translate_min, translate_xmax]) {
|
|
x_at = (translate_x == translate_min) ? "min" : "max";
|
|
for (translate_y = [translate_min, translate_ymax]) {
|
|
y_at = (translate_y == translate_min) ? "min" : "max";
|
|
for (translate_z = [translate_min, translate_zmax]) {
|
|
z_at = (translate_z == translate_min) ? "min" : "max";
|
|
|
|
translate(v = [translate_x, translate_y, translate_z])
|
|
if (
|
|
(apply_to == "all") ||
|
|
(apply_to == "xmin" && x_at == "min") || (apply_to == "xmax" && x_at == "max") ||
|
|
(apply_to == "ymin" && y_at == "min") || (apply_to == "ymax" && y_at == "max") ||
|
|
(apply_to == "zmin" && z_at == "min") || (apply_to == "zmax" && z_at == "max")
|
|
) {
|
|
build_point("sphere");
|
|
} else {
|
|
rotate =
|
|
(apply_to == "xmin" || apply_to == "xmax" || apply_to == "x") ? [0, 90, 0] : (
|
|
(apply_to == "ymin" || apply_to == "ymax" || apply_to == "y") ? [90, 90, 0] :
|
|
[0, 0, 0]
|
|
);
|
|
build_point("cylinder", rotate);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
mi = [151,75,8.25];
|
|
inner = mi+[0.15,0.15,0.15];
|
|
dicke = 1.5;
|
|
outer = inner+2*[dicke,dicke,dicke];
|
|
display = [147.95,67.85,1]+[0.15,0.15,0];
|
|
|
|
difference() {
|
|
roundedcube(outer,true,4.5);
|
|
roundedcube(inner,true,3.5);
|
|
|
|
// Gerippe
|
|
union() {
|
|
translate([3*146/8,68/4,0])
|
|
roundedcube([64/2,64/2,outer[2]], true, 1.5, "z");
|
|
translate([146/16,68/4,0])
|
|
roundedcube([64/4,64/2,outer[2]], true, 1.5, "z");
|
|
translate([146/16,-68/4,0])
|
|
roundedcube([64/4,64/2,outer[2]], true, 1.5, "z");
|
|
translate([3*146/16,3*68/8-1,0])
|
|
roundedcube([64/4,64/4,outer[2]], true, 1.5, "z");
|
|
translate([3*146/16,1-3*68/8,0])
|
|
roundedcube([64/4,64/4,outer[2]], true, 1.5, "z");
|
|
translate([3*146/16,3*68/8-1,0])
|
|
roundedcube([64/4,64/4,outer[2]], true, 1.5, "z");
|
|
translate([6*146/16,-68/8-1,0])
|
|
roundedcube([64/2,64/4,outer[2]], true, 1.5, "z");
|
|
translate([-146/8,68/4,0])
|
|
roundedcube([64/2,64/2,outer[2]], true, 1.5, "z");
|
|
translate([-146/8,-68/4,0])
|
|
roundedcube([64/2,64/2,outer[2]], true, 1.5, "z");
|
|
translate([-3*146/8,68/4,0])
|
|
roundedcube([64/2,64/2,outer[2]], true, 1.5, "z");
|
|
translate([-3*146/8,-68/4,0])
|
|
roundedcube([64/2,64/2,outer[2]], true, 1.5, "z");
|
|
}
|
|
|
|
// Display
|
|
translate([0,0,inner[2]/2])
|
|
roundedcube([inner[0]-3.5,67.85+0.15,outer[2]],true,inner[2]/2,"z");
|
|
|
|
// Kamera
|
|
translate([inner[0]/2-20.5, -inner[1]/2+11.5, -inner[2]/2])
|
|
roundedcube([25,11,10],true,5.5, "z");
|
|
// Fingerprintreader
|
|
echo(mi[0]/2-43.5);
|
|
translate([31.5, 0, -outer[2]/2])
|
|
cylinder(7, 7,false);
|
|
|
|
// Tasten
|
|
translate([31.5,-inner[1]/2,0])
|
|
roundedcube([38,10,3], true, 1.5, "y");
|
|
|
|
// USB
|
|
translate([-inner[0]/2,0,0])
|
|
roundedcube([10,13,7], true, 1.5, "x");
|
|
|
|
// Micro
|
|
translate([-inner[0]/2,16.5,0])
|
|
roundedcube([10,3,3], true, 1.5, "x");
|
|
// Microarray
|
|
translate([-inner[0]/2,-14,0])
|
|
roundedcube([10,12,3], true, 1.5, "x");
|
|
// Loch oben
|
|
translate([inner[0]/2,19,0])
|
|
roundedcube([10,3,3], true, 1.5, "x");
|
|
|
|
// Ausspahrung
|
|
translate(inner*[[0, 0, 0],[0,0,0],[0,0,0.5]]) {
|
|
roundedcube(inner*[[1.1,0,0],[0,0.8,0],[0,0,1]], true, inner[2]/2, "x");
|
|
roundedcube(inner*[[0.9,0,0],[0,1.1,0],[0,0,1]], true, inner[2]/2, "y");
|
|
}
|
|
} |