519 lines
13 KiB
OpenSCAD
519 lines
13 KiB
OpenSCAD
include <variables.scad>;
|
|
|
|
use <modules/quadpipe.scad>;
|
|
use <modules/corner.scad>;
|
|
use <modules/hinge.scad>;
|
|
|
|
module core(){
|
|
// front left bottom corner
|
|
corner_core();
|
|
|
|
|
|
// strut from front left bottom corner to front right bottom corner
|
|
translate([core_strut_width + quadpipe_side, 0, 0]){
|
|
rotate([0, 0, 90]){
|
|
quadpipe(core_strut_width);
|
|
}
|
|
}
|
|
|
|
// front right bottom corner
|
|
translate([core_width, 0, 0]){
|
|
rotate([0, 0, 90]){
|
|
corner_core();
|
|
}
|
|
}
|
|
|
|
// strut from front left bottom corner to front left battery corner
|
|
translate([0, quadpipe_side, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_battery_height);
|
|
}
|
|
}
|
|
|
|
// strut from front right bottom corner to front right battery corner
|
|
translate([core_strut_width + quadpipe_side, quadpipe_side, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_battery_height);
|
|
}
|
|
}
|
|
|
|
// front left battery corner
|
|
translate([0, 0, core_battery_height]){
|
|
corner_battery();
|
|
}
|
|
|
|
|
|
// front right battery corner
|
|
translate([core_width, 0, core_battery_height]){
|
|
rotate([0, 0, 90]){
|
|
corner_battery();
|
|
}
|
|
}
|
|
|
|
// strut from front left battery corner to front right battery corner
|
|
translate([core_strut_width + quadpipe_side, 0, core_strut_battery_height + quadpipe_side]){
|
|
rotate([0, 0, 90]){
|
|
quadpipe(core_strut_width);
|
|
}
|
|
}
|
|
|
|
// strut from front left bottom corner to back left bottom corner
|
|
translate([0, quadpipe_side, 0]){
|
|
quadpipe(core_strut_length);
|
|
}
|
|
|
|
// strut from front right bottom corner to back right bottom corner
|
|
translate([core_strut_width + quadpipe_side, quadpipe_side, 0]){
|
|
quadpipe(core_strut_length);
|
|
}
|
|
|
|
// strut from front left battery corner to back left battery corner
|
|
translate([0, quadpipe_side, core_battery_height - quadpipe_side]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
|
|
// strut from front right battery corner to back right battery corner
|
|
translate([core_strut_width + quadpipe_side * 2, quadpipe_side, core_battery_height]){
|
|
rotate([0, 180, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// back left bottom corner
|
|
translate([0, core_length, 0]){
|
|
rotate([0, 0, -90]){
|
|
corner_core();
|
|
}
|
|
}
|
|
|
|
// back right bottom corner
|
|
translate([core_width, core_length, 0]){
|
|
rotate([0, 0, 180]){
|
|
corner_core();
|
|
}
|
|
}
|
|
|
|
// strut from back left bottom corner to back right bottom corner
|
|
translate([core_strut_width + quadpipe_side, core_strut_length + quadpipe_side, 0]){
|
|
rotate([0, 0, 90]){
|
|
quadpipe(core_strut_width);
|
|
}
|
|
}
|
|
|
|
// strut from back left bottom corner to back left battery corner
|
|
translate([0, core_length, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_battery_height);
|
|
}
|
|
}
|
|
|
|
// strut from back right bottom corner to back right battery corner
|
|
translate([
|
|
core_strut_width + quadpipe_side,
|
|
core_strut_length + quadpipe_side * 2 , // quadpipe_side * 2 accounts for offset caused by rotation
|
|
quadpipe_side]){
|
|
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_battery_height);
|
|
}
|
|
}
|
|
|
|
// back left battery corner
|
|
translate([0, core_length, core_battery_height]){
|
|
rotate([0, 0, -90]){
|
|
corner_battery();
|
|
}
|
|
}
|
|
|
|
|
|
// back right battery corner
|
|
translate([core_width, core_length, core_battery_height]){
|
|
rotate([0, 0, 180]){
|
|
corner_battery();
|
|
}
|
|
}
|
|
|
|
// strut from back left battery corner to back right battery corner
|
|
translate([core_strut_width + quadpipe_side, core_strut_length + quadpipe_side, core_strut_battery_height + quadpipe_side]){
|
|
rotate([0, 0, 90]){
|
|
quadpipe(core_strut_width);
|
|
}
|
|
}
|
|
|
|
// strut from front left battery corner to front left top corner
|
|
translate([0, quadpipe_side, core_battery_height]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_height);
|
|
}
|
|
}
|
|
|
|
// strut from front right battery corner to front right top corner
|
|
translate([core_strut_width + quadpipe_side, quadpipe_side, core_battery_height]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_height);
|
|
}
|
|
}
|
|
|
|
// strut from back left battery corner to front back top corner
|
|
translate([0, core_length, core_battery_height]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_height);
|
|
}
|
|
}
|
|
|
|
// strut from back right battery corner to back right top corner
|
|
translate([core_strut_width + quadpipe_side, core_length, core_battery_height]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_height);
|
|
}
|
|
}
|
|
|
|
// front left top corner
|
|
translate([0, 0, core_height]){
|
|
rotate([0, 90, 0]){
|
|
corner_core();
|
|
}
|
|
}
|
|
|
|
// front right top corner
|
|
translate([core_width, 0, core_height]){
|
|
rotate([0, 180, 0]){
|
|
corner_core();
|
|
}
|
|
}
|
|
|
|
|
|
// back left top corner
|
|
translate([0, core_length, core_height]){
|
|
rotate([180, 0, 0]){
|
|
corner_core();
|
|
}
|
|
}
|
|
|
|
// back right top corner
|
|
translate([core_width, core_length, core_height]){
|
|
rotate([90, 180, 0]){
|
|
corner_core();
|
|
}
|
|
}
|
|
|
|
// strut from front left top to back left top
|
|
translate([0, quadpipe_side, core_height - quadpipe_side]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
|
|
// strut from front right top to back right top
|
|
translate([core_strut_width + quadpipe_side * 2, quadpipe_side, core_height]){
|
|
rotate([0, 180, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// strut from front left top to front right top
|
|
translate([quadpipe_side, quadpipe_side, core_height - quadpipe_side]){
|
|
rotate([0, 0, -90]){
|
|
quadpipe(core_strut_width);
|
|
}
|
|
}
|
|
|
|
// strut from back left top to back right top
|
|
translate([quadpipe_side, core_length, core_height - quadpipe_side]){
|
|
rotate([0, 0, -90]){
|
|
quadpipe(core_strut_width);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*module foldwall(){
|
|
|
|
// front bottom corner
|
|
translate([quadpipe_side, 0, 0]){
|
|
rotate([0,0, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// strut from front bottom left corner to back bottom corner
|
|
translate([0, quadpipe_side, 0]){
|
|
quadpipe(core_strut_length);
|
|
}
|
|
|
|
// back bottom corner
|
|
translate([0, core_length, 0]){
|
|
rotate([0,0, 270]){
|
|
corner();
|
|
}
|
|
}
|
|
//strut from top bottom corner to top top corner
|
|
translate([0, quadpipe_side, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_height);
|
|
}
|
|
}
|
|
|
|
// strut from back bottom to back top
|
|
translate([0, core_length, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(core_strut_height);
|
|
}
|
|
}
|
|
|
|
// front top corner
|
|
translate([quadpipe_side, 0, core_strut_height + 2 * quadpipe_side]){
|
|
rotate([0, 90, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// strut from front top corner to back top corner
|
|
translate([0, quadpipe_side, core_strut_height + quadpipe_side]){
|
|
quadpipe(core_strut_length);
|
|
}
|
|
|
|
// front back corner
|
|
translate([0, core_length, core_strut_height + quadpipe_side * 2]){
|
|
rotate([0,90,-90]){
|
|
corner();
|
|
}
|
|
}
|
|
}*/
|
|
|
|
module wall_floor(){ // the walls that fold down to be the floor
|
|
|
|
// front bottom corner
|
|
translate([quadpipe_side, 0, 0]){
|
|
rotate([0,0, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// strut from front bottom corner to back bottom corner
|
|
translate([quadpipe_side, quadpipe_side, 0]){
|
|
rotate([0, -90, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// back bottom corner
|
|
translate([0, core_length, 0]){
|
|
rotate([0,0, 270]){
|
|
corner();
|
|
}
|
|
}
|
|
//strut from front bottom corner to front top corner
|
|
translate([0, quadpipe_side, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(wall_floor_strut_height);
|
|
}
|
|
}
|
|
|
|
// strut from back bottom to back top
|
|
translate([0, core_length, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(wall_floor_strut_height);
|
|
}
|
|
}
|
|
|
|
// front top corner
|
|
translate([quadpipe_side, 0, wall_floor_strut_height + quadpipe_side * 2]){
|
|
rotate([0, 90, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// strut from front top corner to back top corner
|
|
translate([0, quadpipe_side, wall_floor_strut_height + quadpipe_side * 2]){
|
|
rotate([0, 90, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// front back corner
|
|
translate([0, core_length, wall_floor_strut_height + quadpipe_side * 2]){
|
|
rotate([0,90,-90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// place hinge_side's at bottom
|
|
color("green"){
|
|
translate([quadpipe_side / 2, core_length, -quadpipe_side / 2 - quadpipe_thickness]){
|
|
//translate([quadpipe_side * 2.5, 0, core_battery_height - quadpipe_side / 2]){
|
|
rotate([180,0,-90]){
|
|
hinge_side_array();
|
|
}
|
|
}
|
|
}
|
|
|
|
// place hinge_270 on top
|
|
translate([0, 0, wall_floor_height + quadpipe_side - hinge_rail_thickness]){
|
|
rotate([0, 0, 90]){
|
|
hinge_270_array();
|
|
}
|
|
}
|
|
}
|
|
|
|
module wall_ceiling(){ // the walls that fold down to be the ceiling
|
|
|
|
// front bottom corner
|
|
translate([quadpipe_side, 0, 0]){
|
|
rotate([0,0, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// strut from front bottom corner to back bottom corner
|
|
translate([quadpipe_side, quadpipe_side, 0]){
|
|
rotate([0, -90, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// back bottom corner
|
|
translate([0, core_length, 0]){
|
|
rotate([0,0, 270]){
|
|
corner();
|
|
}
|
|
}
|
|
//strut from front bottom corner to front top corner
|
|
translate([0, quadpipe_side, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(wall_ceiling_strut_height);
|
|
}
|
|
}
|
|
|
|
// strut from back bottom to back top
|
|
translate([0, core_length, quadpipe_side]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(wall_ceiling_strut_height);
|
|
}
|
|
}
|
|
|
|
// front top corner
|
|
translate([quadpipe_side, 0, wall_ceiling_strut_height + quadpipe_side * 2]){
|
|
rotate([0, 90, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// strut from front top corner to back top corner
|
|
translate([0, quadpipe_side, wall_ceiling_strut_height + quadpipe_side * 2]){
|
|
rotate([0, 90, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// front back corner
|
|
translate([0, core_length, wall_ceiling_strut_height + quadpipe_side * 2]){
|
|
rotate([0,90,-90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// place hinge_side's at bottom
|
|
//translate([quadpipe_side, core_length, hinge_rail_height + quadpipe_thickness]){
|
|
translate([quadpipe_side / 2, core_length, (quadpipe_side / 2 + quadpipe_thickness) * -1]){
|
|
rotate([180,0,-90]){
|
|
hinge_side_array();
|
|
}
|
|
}
|
|
|
|
// place hinge_270 on top
|
|
translate([0, 0, wall_ceiling_height + quadpipe_side - hinge_rail_thickness]){
|
|
rotate([0, 0, 90]){
|
|
hinge_270_array();
|
|
}
|
|
}
|
|
}
|
|
|
|
module wall_side() { // A wall that folds into being… a wall! What magic is this!?
|
|
|
|
// bottom hinge array
|
|
translate([0, core_length, quadpipe_side]){
|
|
rotate([0, 180, 90]){
|
|
hinge_270_array();
|
|
}
|
|
}
|
|
|
|
// bottom strut
|
|
translate([quadpipe_side, quadpipe_side , 2 * quadpipe_side + hinge_rail_thickness]){
|
|
rotate([0, -90, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// front bottom corner
|
|
translate([quadpipe_side, 0, 2 * quadpipe_side + hinge_rail_thickness]){
|
|
rotate([0,0, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// back bottom corner
|
|
translate([0, core_length, 2 * quadpipe_side + hinge_rail_thickness]){
|
|
rotate([0,0, -90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// front strut
|
|
translate([0, quadpipe_side, 3 * quadpipe_side + hinge_rail_thickness]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(wall_side_strut_height);
|
|
}
|
|
}
|
|
|
|
// back strut
|
|
translate([0, core_length, 3 * quadpipe_side + hinge_rail_thickness]){
|
|
rotate([90, 0, 0]){
|
|
quadpipe(wall_side_strut_height);
|
|
}
|
|
}
|
|
|
|
// front top corner
|
|
translate([0, 0, 4 * quadpipe_side + hinge_rail_thickness + wall_side_strut_height]){
|
|
rotate([180,0, 90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// back top corner
|
|
translate([0, core_length, 4 * quadpipe_side + hinge_rail_thickness + wall_side_strut_height]){
|
|
rotate([0, 90, -90]){
|
|
corner();
|
|
}
|
|
}
|
|
|
|
// top strut
|
|
translate([0, quadpipe_side, 4 * quadpipe_side + hinge_rail_thickness + wall_side_strut_height]){
|
|
rotate([0, 90, 0]){
|
|
quadpipe_rail(core_strut_length);
|
|
}
|
|
}
|
|
|
|
// top hinge array
|
|
translate([quadpipe_side, core_length, wall_side_strut_height + quadpipe_side + 2 * hinge_270_exposed_height]){
|
|
rotate([0, 0, -90]){
|
|
hinge_270_array();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Place demo instances
|
|
|
|
core();
|
|
|
|
translate([core_width * 2, 0, 0]){
|
|
wall_floor();
|
|
}
|
|
|
|
translate([core_width * 3, 0, 0]){
|
|
wall_side();
|
|
}
|
|
|
|
translate([core_width * 4, 0, 0]){
|
|
wall_ceiling();
|
|
}
|