This commit is contained in:
Jonas Zeunert
2024-09-19 21:43:17 +02:00
parent 345e3133e3
commit 4e18a8b08f
60 changed files with 84791 additions and 0 deletions

172
case/case.scad Normal file
View File

@@ -0,0 +1,172 @@
width = 70;
depth = 70;
height = 35;
wt = 3;
// Which one would you like to see?
part = "both"; // [box:Box only, top: Top cover only, both: Box and top cover]
// Size of your printer's nozzle in mm
nozzle_size = 0.4;
// Number of walls the print should have
number_of_walls = 3; // [1:5]
// Tolerance (use 0.2 for FDM)
tolerance = 0.2; // [0.1:0.1:0.4]
// Outer x dimension in mm
x=width+2*number_of_walls*nozzle_size+2*3*nozzle_size;
// Outer y dimension in mm
y=depth+2*number_of_walls*nozzle_size+2*3*nozzle_size;
// Outer z dimension in mm
z=height+2*number_of_walls*nozzle_size+2*3*nozzle_size;
// Radius for rounded corners in mm
radius=4; // [1:20]
/* Hidden */
$fn=100;
wall_thickness=nozzle_size*number_of_walls;
hook_thickness = 3*nozzle_size;
top_cover_wall_thickness = hook_thickness + wall_thickness;
module bottom_box () {
difference(){
// Solid box
linear_extrude(z-wall_thickness){
minkowski(){
square([x-radius*2,y-radius*2], center=true);
circle(radius, center=true);
}
}
// Hollow out
translate([0,0,wall_thickness]) linear_extrude(z){
minkowski(){
square([x-radius*2-wall_thickness*2+wall_thickness*2,y-radius*2-wall_thickness*2+wall_thickness*2], center=true);
circle(radius-wall_thickness);
}
}
//translate([x/2-5,0,z/2]) usb_port();
}
left_hook(); // left hook
rotate([180,180,0]) left_hook(); // right hook
front_hook(); // front hook
rotate([180,180,0]) front_hook(); // back hook
// TODO: hooks on the other two sides
}
module left_hook () {
translate([(x-2*wall_thickness)/2,-y/2+radius*2,z-wall_thickness]) rotate([0,90,90]) {
difference(){
linear_extrude(y-2*radius*2){
polygon(points=[[0,0],[2*hook_thickness,0],[hook_thickness,hook_thickness]], center=true);
}
translate([hook_thickness, hook_thickness, 0]) rotate([45,0,0]) cube(2*hook_thickness, center=true);
translate([hook_thickness, hook_thickness, y-2*radius*2]) rotate([45,0,0]) cube(2*hook_thickness, center=true);
}
}
}
module front_hook () {
translate([(-x+4*radius)/2,-y/2+wall_thickness,z-wall_thickness]) rotate([90,90,90]) {
difference(){
linear_extrude(x-2*radius*2){
polygon(points=[[0,0],[2*hook_thickness,0],[hook_thickness,hook_thickness]], center=true);
}
translate([hook_thickness, hook_thickness, 0]) rotate([45,0,0]) cube(2*hook_thickness, center=true);
translate([hook_thickness, hook_thickness, x-2*radius*2]) rotate([45,0,0]) cube(2*hook_thickness, center=true);
}
}
}
module right_grove () {
translate([-tolerance/2+(x-2*wall_thickness)/2,-y/2+radius,wall_thickness+hook_thickness*2]) rotate([0,90,90]) linear_extrude(y-2*radius){
polygon(points=[[0,0],[2*hook_thickness,0],[hook_thickness,hook_thickness]], center=true);
}
}
module front_grove () {
translate([(-x+2*radius)/2,-y/2+wall_thickness+tolerance/2,wall_thickness+hook_thickness*2]) rotate([90,90,90]) linear_extrude(x-2*radius){
polygon(points=[[0,0],[2*hook_thickness,0],[hook_thickness,hook_thickness]], center=true);
}
}
module top_cover () {
// Top face
linear_extrude(wall_thickness){
minkowski(){
square([x-radius*2,y-radius*2], center=true);
circle(radius, center=true);
}
}
difference(){
// Wall of top cover
linear_extrude(wall_thickness+hook_thickness*2){
minkowski(){
square([x-radius*2-wall_thickness*2-tolerance+wall_thickness*2,y-radius*2-wall_thickness*2-tolerance+wall_thickness*2], center=true);
circle(radius-wall_thickness, center=true);
}
}
// Hollow out
// TODO: If radius is very small, still hollow out
translate([0,0,wall_thickness]) linear_extrude(z){
minkowski(){
square([x-radius*2-wall_thickness*2-2*top_cover_wall_thickness-tolerance+wall_thickness*2+top_cover_wall_thickness*2,y-radius*2-wall_thickness*2-2*top_cover_wall_thickness-tolerance+wall_thickness*2+top_cover_wall_thickness*2], center=true);
circle(radius-wall_thickness-top_cover_wall_thickness);
}
}
right_grove();
rotate([180,180,0]) right_grove();
front_grove();
rotate([180,180,0]) front_grove();
}
}
// left_hook();
print_part();
module print_part() {
if (part == "box") {
bottom_box();
} else if (part == "top") {
top_cover();
} else if (part == "both") {
both();
} else {
both();
}
}
module both() {
translate([0,-(y/2+wall_thickness),0]) bottom_box();
translate([0,+(y/2+wall_thickness),0]) top_cover();
}
module usb_port() {
translate([0.3, 0, 0])
color("grey")
difference() {
union() {
cube([7.4, 6, 2.7]);
translate([-0.3, 5.4, -0.1])
cube([8, 0.6, 2.9]);
}
}
}