Files
phone-case/phone.scad
2023-12-21 22:57:00 +00:00

60 lines
1.5 KiB
OpenSCAD

include <dimensions.scad>
use <bits.scad>
use <primitives.scad>
$fs = 1;
// tolerance. lining up the extrusions and cuts with zero tolerance causes very thin walls,
// so i offset those to make the model actually contiguous.
Tol = 0.1;
// simple box-shaped body; preserve for easier debugging
module BodyBox() {
cube([BodyWidth, BodyLength, BodyHeight], center=false);
}
// return the kernel which can be convolved with the box body to produce the actual body
module BodyConvolve(Tol=Tol) {
minkowski() {
// cylinder rounds the four corners of the phone
cylinder(r=BodyRadXY-BodyRadFrontZ, h=Tol, center=true);
// sphere rounds the thickness of the phone
// in actuality this shouldn't be symmetric (the screen and back cover have different radii),
// but using a single radius is Good Enough
sphere(r=BodyRadFrontZ);
// cylinderY(r=BodyRadFrontZ, h=Tol, center=true);
// cylinderX(r=BodyRadFrontZ, h=Tol, center=true);
}
}
module Body()
{
translate([BodyRadXY, BodyRadXY, BodyRadFrontZ])
minkowski() {
cube([BodyWidth-2*BodyRadXY, BodyLength-2*BodyRadXY, BodyHeight-2*BodyRadFrontZ], center=false);
BodyConvolve();
}
}
module Phone(Box=false)
{
difference() {
union() {
if (Box) { BodyBox(); } else { Body(); }
Volume(2);
Power(2);
Camera(2, Box=Box);
}
union() {
translate([0, Tol, 0])Usb(2);
translate([0, -Tol, 0])Aux(2);
}
}
}
Phone();
// debugging:
// translate([0, 0, 20])Phone(Box=true);
// translate([0, 0, 80])BodyConvolve();