User:Dorkmo/Ideas/Battery/SCAD/Sandbox
< User:Dorkmo | Ideas | Battery | SCAD
Jump to navigation
Jump to search
mesh
new mesh module idea
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
intersection()
{
translate([0.1,-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))),0])
cube([cage_wall+0.2,(((tub_length-(spacing*2))-(cage_endwall*2))),cage_height], center=false);
//need to translate closer to the cube here with llarge holes
translate([0,0,-mesh_spacing])
{
rotate([0,-mesh_angle,0])
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])
{
//for - pair of rows to height
for (h = [1 : floor(((cage_height-cage_base-((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle))))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(h*[0,0,mesh_spacing])
{
//for - second row
for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
//translate second row
translate([0,-mesh_spacing/2,mesh_spacing/2])
{
//make second row copies
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening], center=false);
}
}
}
}
//for - create first row
for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
//need to tweak
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening],center=false);
}
}
}
}
}
}
////end cube
}
}
echo((cage_height/sin(90))*sin(mesh_angle));
echo((tub_width-(spacing*3))/2);
mesh
tweaking the pattern for holes through the cage
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
cage_wall = 10 ;
width = 20;
height = 20;
cube(size = [20,20,20], center=true);
for (h = [0 : height])
{
translate(h*[0,0,mesh_spacing])
{
rotate([0,mesh_angle,0])
{
for (w = [0 : width])
{
translate(w*[0,mesh_spacing,0])
{
rotate([0,0,45])
{
//could put a scale command here to make opening a perfect square
cube(size = [mesh_opening,mesh_opening,(mesh_opening*2)+(sin(90)*(10/sin(90-mesh_angle)))], center=false);
}
}
}
}
}
}
cage
cage with divots
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
wire_diameter = 2;
wire_holeoffc = 0;
lid_depthinto = 7;
divot_height = 5.5;
//begin underlying cage module
module cage()
{
difference()
{
cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),cage_height], center=false);
//cut hole for powder to sit in
translate([cage_wall, cage_endwall, cage_base])
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_height-cage_base+1], center=false);
}
}
//end cage
//begin mesh hole grid module
module holes()
{
intersection()
{
translate([0,-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))),0])
cube([cage_wall+0.2,1+((((tub_length-(spacing*2))-(cage_endwall*2)))),cage_height], center=false);
//need to translate closer to the cube here with llarge holes
translate([0,0,-mesh_spacing])
{
rotate([0,-mesh_angle,0])
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])
{
//for - pair of rows to height
for (h = [1 : floor(((cage_height-cage_base-((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle))))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(h*[0,0,mesh_spacing])
{
//for - second row
for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
//translate second row
translate([0,-mesh_spacing/2,mesh_spacing/2])
{
//make second row copies
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening], center=false);
}
}
}
}
//for - create first row
for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
//need to tweak
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening],center=false);
}
}
}
}
}
}
////end cube
}
}
}
////end mesh hole grid module
//////divot
module divot_sphere()
{
difference()
{
translate([(divot_height/2)/sin(45)*sin(45),0,0])
{
sphere(r = (divot_height/2)/sin(45));
}
translate([(divot_height/2)/sin(45),0,0])
cube(size = [((divot_height/2)/sin(45)*2),((divot_height/2)/sin(45)*2),((divot_height/2)/sin(45)*2)], center=true);
}
}
////end divot module
//begin final cage construction
difference()
{
cage();
//begin holes
translate([(((tub_width-(spacing*3))/2)-cage_wall)+0.0, cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
holes();
}
translate([(cage_wall)-0.0,cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
mirror([1,0,0])
{
#holes();
}
}
//end holes
//begin divots
//1
translate([cage_wall,(((tub_length-(spacing*2))-(cage_endwall*2))*1/4)+cage_endwall,cage_height-(((lid_depthinto-divot_height)/2)+(divot_height/2))])
{
#divot_sphere();
}
//2
translate([cage_wall,(((tub_length-(spacing*2))-(cage_endwall*2))*3/4)+cage_endwall,cage_height-(((lid_depthinto-divot_height)/2)+(divot_height/2))])
{
#divot_sphere();
}
//3
translate([cage_wall+(((tub_width-(spacing*3))/2)-(cage_wall*2)),(((tub_length-(spacing*2))-(cage_endwall*2))*1/4)+cage_endwall,cage_height-(((lid_depthinto-divot_height)/2)+(divot_height/2))])
{
mirror([1,0,0])
{
#divot_sphere();
}
}
//4
translate([cage_wall+(((tub_width-(spacing*3))/2)-(cage_wall*2)),(((tub_length-(spacing*2))-(cage_endwall*2))*3/4)+cage_endwall,cage_height-(((lid_depthinto-divot_height)/2)+(divot_height/2))])
{
mirror([1,0,0])
{
#divot_sphere();
}
}
//end divots
}
//end cage
//calculate mesh wall minimum thickness
echo(sin(45)*((mesh_spacing-((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/sin(90)));
//calculate verticle height of mesh holes to take away from max height of holes
//works okay up to 45 then bugs out. might be because its before the scale down
echo((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle)));
cage without divots
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
//begin underlying cage module
module cage()
{
difference()
{
cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),cage_height], center=false);
//cut hole for powder to sit in
translate([cage_wall, cage_endwall, cage_base])
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_height-cage_base+1], center=false);
}
}
//end cage
//begin mesh hole grid module
module holes()
{
intersection()
{
translate([0,-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))),0])
cube([cage_wall+0.2,1+((((tub_length-(spacing*2))-(cage_endwall*2)))),cage_height], center=false);
//need to translate closer to the cube here with llarge holes
translate([0,0,-mesh_spacing])
{
rotate([0,-mesh_angle,0])
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])
{
//for - pair of rows to height
for (h = [1 : floor(((cage_height-cage_base-((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle))))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(h*[0,0,mesh_spacing])
{
//for - second row
for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
//translate second row
translate([0,-mesh_spacing/2,mesh_spacing/2])
{
//make second row copies
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening], center=false);
}
}
}
}
//for - create first row
for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
//need to tweak
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening],center=false);
}
}
}
}
}
}
////end cube
}
}
}
////end mesh hole grid module
//begin final cage construction
difference()
{
cage();
translate([(((tub_width-(spacing*3))/2)-cage_wall)+0.0, cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
holes();
}
translate([(cage_wall)-0.0,cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
mirror([1,0,0])
{
#holes();
}
}
}
//end cage
//calculate mesh wall minimum thickness
echo(sin(45)*((mesh_spacing-((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/sin(90)));
//calculate verticle height of mesh holes to take away from max height of holes
//works okay up to 45 then bugs out. might be because its before the scale down
echo((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle)));
cage with new mesh module
- mesh module needs adjusted a little. missing a little from side
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 60;
mesh_spacing = 2;
//begin underlying cage module
module cage()
{
difference()
{
cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),cage_height], center=false);
//cut hole for powder to sit in
translate([cage_wall, cage_endwall, cage_base])
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_height-cage_base+1], center=false);
}
}
//end cage
//begin mesh hole grid module
module holes()
{
intersection()
{
translate([0,-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))),0])
cube([cage_wall+0.2,1+((((tub_length-(spacing*2))-(cage_endwall*2)))),cage_height], center=false);
//need to translate closer to the cube here with llarge holes
translate([0,0,-mesh_spacing])
{
rotate([0,-mesh_angle,0])
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])
{
//for - pair of rows to height
for (h = [1 : floor(((cage_height-cage_base-((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle))))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(h*[0,0,mesh_spacing])
{
//for - second row
for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
//translate second row
translate([0,-mesh_spacing/2,mesh_spacing/2])
{
//make second row copies
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening], center=false);
}
}
}
}
//for - create first row
for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(w*[0,mesh_spacing,0])
{
rotate([45,0,0])
{
//need to tweak
cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening],center=false);
}
}
}
}
}
}
////end cube
}
}
}
////end mesh hole grid module
//begin final cage construction
difference()
{
cage();
translate([(((tub_width-(spacing*3))/2)-cage_wall)+0.0, cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
holes();
}
translate([(cage_wall)-0.0,cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
mirror([1,0,0])
{
#holes();
}
}
}
//end cage
//calculate mesh wall minimum thickness
echo(sin(45)*((mesh_spacing-((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/sin(90)));
//calculate verticle height of mesh holes to take away from max height of holes
//works okay up to 45 then bugs out. might be because its before the scale down
echo((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle)));
cage with old mesh
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
//begin underlying cage module
module cage()
{
difference()
{
cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),cage_height], center=false);
//cut hole for powder to sit in
translate([cage_wall, cage_endwall, cage_base])
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_height-cage_base+1], center=false);
}
}
//end cage
//begin mesh hole grid module
module holes()
{
for (h = [1 : floor(((cage_height-cage_base-((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle))))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(h*[0,0,mesh_spacing])
{
//scale command here to make openings perfect squares
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])
{
rotate([0,90-mesh_angle,0])
{
for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(w*[0,mesh_spacing,0])
{
rotate([0,0,45])
{
cube(size = [mesh_opening,mesh_opening,(mesh_opening*2)+(sin(90)*(cage_wall/sin(90-mesh_angle)))], center=false);
}
}
}
//begin second row
for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate([mesh_spacing/2,mesh_spacing/2,-mesh_spacing/2])
{
translate(w*[0,mesh_spacing,0])
{
rotate([0,0,45])
{
cube(size = [mesh_opening,mesh_opening,(mesh_opening*2)+(sin(90)*(cage_wall/sin(90-mesh_angle)))], center=false);
}
}
}
}
}
}
}
}
}
//end mesh hole grid module
//begin final cage construction
difference()
{
cage();
translate([((tub_width-(spacing*3))/2)-cage_wall-((sin(mesh_angle)*sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2), cage_endwall-(mesh_spacing/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
holes();
}
translate([cage_wall+((sin(mesh_angle)*sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2), cage_endwall-(mesh_spacing/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
mirror([1,0,0])
{
#holes();
}
}
}
//end cage
//calculate mesh wall minimum thickness
echo(sin(45)*((mesh_spacing-((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/sin(90)));
//calculate verticle height of mesh holes to take away from max height of holes
//works okay up to 45 then bugs out. might be because its before the scale down
echo((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle)));
inside cage
height = 60;
tub_width = 95;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 40;
cage_wall = 10;
cage_endwall = 5;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 2 ;
mesh_angle = 45;
mesh_spacing = 4;
mesh_width = 17;
mesh_height = 10;
difference()
{
cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),cage_height], center=false);
translate([cage_wall, cage_endwall, cage_base])
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_height-cage_base+1], center=false);
translate([((tub_width-(spacing*3))/2)-cage_wall-((sin(mesh_angle)*sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2), cage_endwall-(mesh_spacing/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
for (h = [1 : mesh_height])
{
translate(h*[0,0,mesh_spacing])
{
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])
{
rotate([0,90-mesh_angle,0])
{
for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(w*[0,mesh_spacing,0])
{
rotate([0,0,45])
{
//could put a scale command here to make opening a perfect square
cube(size = [mesh_opening,mesh_opening,(mesh_opening*2)+(sin(90)*(10/sin(90-mesh_angle)))], center=false);
}
}
}
//begin second row
#for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate([mesh_spacing/2,mesh_spacing/2,-mesh_spacing/2])
{
translate(w*[0,mesh_spacing,0])
{
rotate([0,0,45])
{
//could put a scale command here to make opening a perfect square
cube(size = [mesh_opening,mesh_opening,(mesh_opening*2)+(sin(90)*(10/sin(90-mesh_angle)))], center=false);
}
}
}
}
//end second row
}
}
}
}
}
}
echo(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)));
echo((tub_length-(spacing*2))-(cage_endwall*2));
echo((((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2));
lid
no cavity with multiple cleats
height = 90;
tub_width = 36;
tub_length = 70;
basethickness = 5;
tub_wall = 2;
tub_outsidewall = 4;
tubs_rows = 5;
tubs_columns = 2;
spacing = 1.940055;
center_dividers = 00; //1 yes 0 no
cage_height = 60;
cage_wall = 5.5;
cage_endwall = 2;
cage_base = 5;
mesh_opening = 1.5 ;
mesh_angle = 45;
mesh_spacing = 3.5;
wire_count = 7; //number of wires into each cage
wire_diameter = 0.8;
wire_holeoffc = 0;
cage_lid_cut = 0; //1 yes 0 no cavity in lid or not?
cage_minicleat = 2;
cage_lid_depthinto = 7;
cage_divot_height = 5.5;
tub_lid_depthinto = 7;
tub_divot_height = 5.5;
union()
{
difference()
{
union()
{
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_lid_depthinto], center=false);
translate([-1,-1,cage_lid_depthinto])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+2,((tub_length-(spacing*2))-(cage_endwall*2))+2,2], center=false);
}
//spheres lock ins
//1
translate([0,((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])
{
divot_sphere();
}
//2
translate([0,((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])
{
divot_sphere();
}
//3
translate([((tub_width-(spacing*3))/2)-(cage_wall*2),((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])
{
mirror([1,0,0])
{
divot_sphere();
}
}
//4
translate([((tub_width-(spacing*3))/2)-(cage_wall*2),((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])
{
mirror([1,0,0])
{
divot_sphere();
}
}
//end spheres
//minicleats
//1
translate([((((((tub_width-(spacing*3))/2)-(cage_wall*2))+2)/2)-cage_minicleat)+((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,((((tub_length-(spacing*2))-(cage_endwall*2))*1/2))+(wire_diameter/2),cage_lid_depthinto+2])
{
for(w = [-(wire_count-1)/2 : (wire_count-1)/2])
{
translate(w*[0,((((tub_length-(spacing*2))-(cage_endwall*2)-2))/(wire_count+1)),0])
{
mini_cleat(cage_minicleat,1);
}
}
}
//2
translate([-((((((tub_width-(spacing*3))/2)-(cage_wall*2))+2)/2)-cage_minicleat)+((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,((((tub_length-(spacing*2))-(cage_endwall*2))*1/2))+(wire_diameter/2),cage_lid_depthinto+2])
{
mirror([1,0,0])
{
for(w = [-(wire_count-1)/2 : (wire_count-1)/2])
{
translate(w*[0,((((tub_length-(spacing*2))-(cage_endwall*2)-2))/(wire_count+1)),0])
{
mini_cleat(cage_minicleat,1);
}
}
}
}
//end mini cleats
}
//end union begin difference
translate([1,1,1])
{
if (cage_lid_cut==1) cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2)-2,(tub_length-(spacing*2))-(cage_endwall*2)-2,cage_lid_depthinto+3], center=false);
}
//chamfer underside of lip
translate([-2,-1,cage_lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-2,(tub_length-(spacing*2))-(cage_endwall*2)+1,cage_lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-1,-2,cage_lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))+1,-2,cage_lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
//end chamfer
//begin wire holes
translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2),-1])
{
for(w = [-(wire_count-1)/2 : (wire_count-1)/2])
{
translate(w*[0,((((tub_length-(spacing*2))-(cage_endwall*2)-2))/(wire_count+1)),0])
{
#cylinder(r = wire_diameter/2, h = cage_lid_depthinto+2+2);
}
}
}
//end wire holes
//end difference
}
//begin union
//cleat
translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2)-(wire_diameter*1.5)-1+wire_holeoffc,0])
{
cleat(2,cage_lid_depthinto+2);
}
translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2)+(wire_diameter*1.5)+1+wire_holeoffc,0])
{
mirror([0,1,0])
{
cleat(2,cage_lid_depthinto+2);
}
}
//end cleat
}
//divot
module divot_sphere()
{
difference()
{
translate([(cage_divot_height/2)/sin(45)*sin(45),0,0])
{
sphere(r = (cage_divot_height/2)/sin(45));
}
translate([(cage_divot_height/2)/sin(45),0,0])
cube(size = [((cage_divot_height/2)/sin(45)*2),((cage_divot_height/2)/sin(45)*2),((cage_divot_height/2)/sin(45)*2)], center=true);
}
}
////cleat module
module cleat(size,height)
{
translate([0,0,-size])
{
difference()
{
rotate([45,0,0])
{
rotate([0,0,45])
{
cube(size = [size,size,height/sin(45)], center=false);
}
}
translate([-size*3/2,-size*3/2,0])
{
#cube(size = [size*3,size*3,size],center=false);
}
}
}
}
//end cleat
//mini_cleat module
module mini_cleat(sides,height)
{
union()
{
#cube(size = [sides,sides,height]);
translate([0,0,height])
{
polyhedron
(points = [ [0,0,0],[sides,0,0],[sides,sides,0],[0,sides,0],
[sides,0,sides],[sides*2,0,sides],[sides*2,sides,sides],[sides,sides,sides]
],
faces = [ [0,1,2],[0,2,3], //
[0,5,1],[0,4,5], //
[1,5,6],[1,6,2],
[2,6,7],[2,7,3],
[3,7,4],[3,4,0],
[4,7,6],[4,6,5]
]
);
}
}
}
//end mini cleat module
small lip with divots and cleat
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
wire_diameter = 2;
wire_holeoffc = 0;
lid_depthinto = 7;
divot_height = 5.5;
union()
{
difference()
{
union()
{
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),lid_depthinto], center=false);
translate([-1,-1,lid_depthinto])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+2,((tub_length-(spacing*2))-(cage_endwall*2))+2,2], center=false);
}
//spheres lock ins
//1
translate([0,((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
divot_sphere();
}
//2
translate([0,((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
divot_sphere();
}
//3
translate([((tub_width-(spacing*3))/2)-(cage_wall*2),((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
mirror([1,0,0])
{
divot_sphere();
}
}
//4
translate([((tub_width-(spacing*3))/2)-(cage_wall*2),((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
mirror([1,0,0])
{
divot_sphere();
}
}
//end spheres
}
//end union begin difference
translate([1,1,1])
{
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2)-2,(tub_length-(spacing*2))-(cage_endwall*2)-2,lid_depthinto+3], center=false);
}
//chamfer underside of lip
translate([-2,-1,lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-2,(tub_length-(spacing*2))-(cage_endwall*2)+1,lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-1,-2,lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))+1,-2,lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
//end chamfer
//begin wire hole
translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2),-1])
{
cylinder(r = wire_diameter/2, h = 3);
}
//end wire hole
//end difference
}
//begin union
//cleat
translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2)-(wire_diameter*1.5)-1+wire_holeoffc,0])
{
cleat(2,lid_depthinto+2);
}
translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2)+(wire_diameter*1.5)+1+wire_holeoffc,0])
{
mirror([0,1,0])
{
cleat(2,lid_depthinto+2);
}
}
//end cleat
}
//divot
module divot_sphere()
{
difference()
{
translate([(divot_height/2)/sin(45)*sin(45),0,0])
{
sphere(r = (divot_height/2)/sin(45));
}
translate([(divot_height/2)/sin(45),0,0])
cube(size = [((divot_height/2)/sin(45)*2),((divot_height/2)/sin(45)*2),((divot_height/2)/sin(45)*2)], center=true);
}
}
////cleat module
module cleat(size,height)
{
translate([0,0,-size])
{
difference()
{
rotate([45,0,0])
{
rotate([0,0,45])
{
cube(size = [size,size,height/sin(45)], center=false);
}
}
translate([-size*3/2,-size*3/2,0])
{
#cube(size = [size*3,size*3,size],center=false);
}
}
}
}
chamfered small lip
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
wire_diameter = 2;
lid_depthinto = 4;
difference()
{
union()
{
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),lid_depthinto], center=false);
translate([-1,-1,lid_depthinto])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+2,((tub_length-(spacing*2))-(cage_endwall*2))+2,2], center=false);
}
//spheres lock ins
//end spheres
}
//end union begin difference
translate([1,1,1])
{
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2)-2,(tub_length-(spacing*2))-(cage_endwall*2)-2,lid_depthinto+3], center=false);
}
//chamfer underside of lip
translate([-2,-1,lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-2,(tub_length-(spacing*2))-(cage_endwall*2)+1,lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-1,-2,lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))+1,-2,lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
}
chamfered small lip with divots
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
wire_diameter = 2;
lid_depthinto = 7;
divot_height = 5.5;
difference()
{
union()
{
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),lid_depthinto], center=false);
translate([-1,-1,lid_depthinto])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+2,((tub_length-(spacing*2))-(cage_endwall*2))+2,2], center=false);
}
//spheres lock ins
//1
translate([0,((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
divot_sphere();
}
//2
translate([0,((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
divot_sphere();
}
//3
translate([((tub_width-(spacing*3))/2)-(cage_wall*2),((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
mirror([1,0,0])
{
divot_sphere();
}
}
//4
translate([((tub_width-(spacing*3))/2)-(cage_wall*2),((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((lid_depthinto-divot_height)/2)+(divot_height/2)])
{
mirror([1,0,0])
{
divot_sphere();
}
}
//end spheres
}
//end union begin difference
translate([1,1,1])
{
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2)-2,(tub_length-(spacing*2))-(cage_endwall*2)-2,lid_depthinto+3], center=false);
}
//chamfer underside of lip
translate([-2,-1,lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-2,(tub_length-(spacing*2))-(cage_endwall*2)+1,lid_depthinto-1])
{
rotate([45,0,0])
{
cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([-1,-2,lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))+1,-2,lid_depthinto-1])
{
rotate([45,0,90])
{
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);
}
}
}
//divot
module divot_sphere()
{
difference()
{
translate([(divot_height/2)/sin(45)*sin(45),0,0])
{
sphere(r = (divot_height/2)/sin(45));
}
translate([(divot_height/2)/sin(45),0,0])
cube(size = [((divot_height/2)/sin(45)*2),((divot_height/2)/sin(45)*2),((divot_height/2)/sin(45)*2)], center=true);
}
}
big lip with cleat
height = 80;
tub_width = 65;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 45;
mesh_spacing = 2.5;
wire_diameter = 2;
union()
{
difference()
{
union()
{
//lip
cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),2], center=false);
translate([cage_wall, cage_endwall, 2])
{
//insert
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),2], center=false);
}
}
translate([((tub_width-(spacing*3))/2)/2,cage_endwall+2,-3])
{
rotate([45,0,90])
{
//cavity for wire exit and cleat
cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))-4,(sin(45)*6),(sin(45)*6)], center=false);
}
}
//hole for wire
translate([((tub_width-(spacing*3))/2)/2,(tub_length-(spacing*2))/2,-1])
{
cylinder(h = 6, r=wire_diameter/2);
}
}
//cleats
translate([(((tub_width-(spacing*3))/2)/2)-0,((tub_length-(spacing*2))/2)-(wire_diameter*1.5)-3,1.75])
{
mirror([0,0,1])
{
cleat();
}
}
translate([(((tub_width-(spacing*3))/2)/2)-0,((tub_length-(spacing*2))/2)+(wire_diameter*1.5)+3,1.75])
{
mirror([0,0,1])
{
mirror([0,1,0])
{
cleat();
}
}
}
}
////cleat module
module cleat()
{
difference()
{
cube(size=[2,8,3.5], center=true);
translate([-0.8,-2,-0.5])
{
rotate([0,-20,15])
{
cube(size=[2,15,5], center=true);
}
}
translate([0.8,-2,-0.5])
{
rotate([0,20,-15])
{
cube(size=[2,15,5], center=true);
}
}
translate([-1.5,4.5,-1])
{
rotate([45,0,0])
{
cube(size = [3,4,6]);
}
}
}
}
tub
single cell tub
height = 60;
oa_width = 80;
oa_length = 105;
outsidewall = 5;
basethickness = 5;
membranethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 40;
cage_wall = 10;
cage_base = 5;
difference()
{
cube(size = [oa_width, oa_length, height], center=false);
translate([outsidewall,outsidewall,basethickness])
cube(size = [oa_width-(outsidewall*2), oa_length-(outsidewall*2), height-basethickness], center=false);
}
tub with sphere divot
- incomplete
- spacer is versine
height = 80;
tub_width = 65;
tub_length = 90;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 60;
cage_wall = 7.5;
cage_endwall = 2;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1.5 ;
mesh_angle = 45;
mesh_spacing = 3.5;
wire_diameter = 2;
wire_holeoffc = 0;
lid_depthinto = 7;
divot_height = 5.5;
union()
{
//outerwalls
difference()
{
cube(size = [tub_width, tub_length, height], center=false);
translate([outsidewall,outsidewall,basethickness])
{
cube(size = [tub_width-(outsidewall*2), tub_length-(outsidewall*2), height-basethickness+1], center=false);
}
}
//end walls
//begin supports
//1
translate([(tub_width/2)-((spacing-1)/2),tub_wall,height-((spacing+cage_endwall+2)*2)-(sin(45)*(sin(45)*(spacing-1)))-(10)])
{
divider();
}
//2
translate([(tub_width/2)-((spacing-1)/2),tub_wall,height-((spacing+cage_endwall+2)*2)-(sin(45)*(sin(45)*(spacing-1)))-(height*5/8)])
{
divider();
}
//3
translate([(tub_width/2)-((spacing-1)/2),tub_wall+(tub_length-(outsidewall*2)),height-((spacing+cage_endwall+2)*2)-(sin(45)*(sin(45)*(spacing-1)))-(10)])
{
mirror([0,1,0])
{
divider();
}
}
//4
translate([(tub_width/2)-((spacing-1)/2),tub_wall+(tub_length-(outsidewall*2)),height-((spacing+cage_endwall+2)*2)-(sin(45)*(sin(45)*(spacing-1)))-(height*5/8)])
{
mirror([0,1,0])
{
divider();
}
}
//end supports
}
translate([5,-20,0])
{
tub_spacerdivot();
}
//divider modules
module divider()
{
difference()
{
union()
{
cube(size=[spacing-1,spacing+cage_endwall+2,(spacing+cage_endwall+2)*2]);
translate([0,0,(spacing+cage_endwall+2)*2])
{
rotate([0,45,0])
{
cube(size=[(sin(45)*(spacing-1)),spacing+cage_endwall+2,(sin(45)*(spacing-1))]);
}
}
}
translate([0,spacing+cage_endwall+2,-(((spacing+cage_endwall+2)/sin(45))/sin(45))/2])
{
rotate([45,0,0])
{
cube(size=[spacing-1,((spacing+cage_endwall+2)/sin(45)),((spacing+cage_endwall+2)/sin(45))]);
}
}
}
}
//end divider module
//////tub divot
module tub_spacerdivot()
{
difference()
{
translate([(spacing/(1-cos(45)))*sin(45),0,0])
{
sphere(r = (spacing/(1-cos(45))));
}
translate([(spacing/(1-cos(45))),0,0])
{
cube(size = [((spacing/(1-cos(45)))*2),((spacing/(1-cos(45)))*2),((spacing/(1-cos(45)))*2)], center=true);
}
}
}
////end tub divot module
echo(spacing/(1-cos(45)));
locks
sphere lock in divot
height = 60;
tub_width = 95;
tub_length = 70;
outsidewall = 5;
basethickness = 5;
tub_wall = 5;
spacing = 5;
cage_height = 40;
cage_wall = 7.5;
cage_endwall = 1;
cage_base = 5;
wedge_hieght = 10;
mesh_opening = 1 ;
mesh_angle = 35;
mesh_spacing = 2;
lock_radius = 5;
lock_depth = 1;
lock_distancefromcenter = 0;
module half()
{
difference()
{
union()
{
//lock_sphere padding added to endwall
difference()
{
translate([((tub_width-(spacing*3))/2)/2,lock_depth-lock_radius,(cage_height)/2])
{
sphere(lock_radius+cage_endwall);
}
translate([(((tub_width-(spacing*3))/2)/2)-(lock_radius+cage_endwall),-(((lock_radius+cage_endwall)*2)-(cage_endwall+lock_depth)),((cage_height)/2)-(lock_radius+cage_endwall)])
{
cube(size = [((lock_radius+cage_endwall)*2),((lock_radius+cage_endwall)*2)-lock_depth-cage_endwall,(lock_radius+cage_endwall)*2]);
}
}
mirror([0,1,0])
{
translate([0,-(tub_length-(spacing*2)),0])
{
difference()
{
translate([((tub_width-(spacing*3))/2)/2,lock_depth-lock_radius,(cage_height)/2])
{
sphere(lock_radius+cage_endwall);
}
translate([(((tub_width-(spacing*3))/2)/2)-(lock_radius+cage_endwall),-(((lock_radius+cage_endwall)*2)-(cage_endwall+lock_depth)),((cage_height)/2)-(lock_radius+cage_endwall)])
{
cube(size = [((lock_radius+cage_endwall)*2),((lock_radius+cage_endwall)*2)-lock_depth-cage_endwall,(lock_radius+cage_endwall)*2]);
}
}
}
}
difference()
{
cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),cage_height], center=false);
//delete half of it
cube(size = [((tub_width-(spacing*3))/2)/2,(tub_length-(spacing*2)),cage_height], center=false);
translate([cage_wall, cage_endwall, cage_base])
cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_height-cage_base+1], center=false);
translate([((tub_width-(spacing*3))/2)-cage_wall-((sin(mesh_angle)*sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2), cage_endwall-(mesh_spacing/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])
{
for (h = [1 : floor(((cage_height-cage_base-((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle))))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(h*[0,0,mesh_spacing])
{
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])
{
rotate([0,90-mesh_angle,0])
{
for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate(w*[0,mesh_spacing,0])
{
rotate([0,0,45])
{
//could put a scale command here to make opening a perfect square
cube(size = [mesh_opening,mesh_opening,(mesh_opening*2)+(sin(90)*(cage_wall/sin(90-mesh_angle)))], center=false);
}
}
}
//begin second row
for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])
{
translate([mesh_spacing/2,mesh_spacing/2,-mesh_spacing/2])
{
translate(w*[0,mesh_spacing,0])
{
rotate([0,0,45])
{
//could put a scale command here to make opening a perfect square
cube(size = [mesh_opening,mesh_opening,(mesh_opening*2)+(sin(90)*(cage_wall/sin(90-mesh_angle)))], center=false);
}
}
}
}
//end second row
}
}
}
}
}
}
}
//cutout lock_sphere
translate([((tub_width-(spacing*3))/2)/2,lock_depth-lock_radius,(cage_height)/2])
{
sphere(lock_radius);
}
mirror([0,1,0])
{
translate([0,-(tub_length-(spacing*2)),0])
{
translate([((tub_width-(spacing*3))/2)/2,lock_depth-lock_radius,(cage_height)/2])
{
sphere(lock_radius);
}
}
}
}
}
half();
mirror([1,0,0])
{
translate([-((tub_width-(spacing*3))/2),0,0])
{
half();
}
}
//calculate verticle height of mesh holes to take away from max height of holes
//works okay up to 45 then bugs out. might be because its before the scale down
echo((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle)));