polyhaus/polyhaus.scad

189 lines
3.4 KiB
OpenSCAD

// The Parameters of the House
// all in mm
level=3500;
wallstrength=500;
ceilingstrength=300;
floorstrength=200;
ringdiameter=14000;
ringstrength=2500;
garagediameter=ringdiameter+2000;
garageheigth=4000;
sides=6;
// The House Modules
module ngon(
diameter=5,
height=level,
sides=sides
)
{
cylinder(
h=height,
r=diameter/2,
$fn=sides
);
};
module garage(
garageheigth=garageheigth,
garagediameter=garagediameter
)
{
//color([0.1,0.1,1])
#translate([0,0,-garageheigth])
living(
floorstrength=2*floorstrength,
ceilingstrength=2*ceilingstrength
);
};
module ring(
ringdiameter=ringdiameter,
ringstrength=ringstrength,
ringheigth=level
)
{
//do the math for the radii
angle=(0.5*360/sides);
radius_in_circle=(asin(angle)*ringdiameter)-wallstrength;
side_length=2*acos(0.5*360/sides)*radius_in_circle;
radius_in_diameter=radius_in_circle/ asin(angle);
#
difference() {
ngon(
height=ringheigth,
diameter=ringdiameter,
sides=sides
);
%translate ([0,0, -1]) ngon(
height=ringheigth+2,
diameter=radius_in_diameter,
sides=sides
);
};
};
module living(
ringdiameter=ringdiameter,
ringstrength=ringstrength,
ringheigth=level,
floorstrength=floorstrength,
ceilingstrength=ceilingstrength,
wallstrength=wallstrength
)
{
angle=(0.5*360/sides);
radius_in_circle=(asin(angle)*ringdiameter)-wallstrength;
radius_in_diameter=radius_in_circle/ asin(angle);
side_length=2*acos(0.5*360/sides)*radius_in_circle;
#difference() {
%ring();
translate([0,0,+floorstrength])
ring(
ringdiameter=radius_in_diameter,
ringstrength=ringstrength-2*wallstrength,
ringheigth=level-(floorstrength+ceilingstrength));
};
};
outer_wall_woodwidth=50;
outer_wall_strawwidth=1000;
module spar(
width,
depth,
height
)
{
translate(
[0.5*width,
0.5*depth,
0] )
cube(
width,
depth,
height
);
}
module outer_wall(
ringdiameter=ringdiameter,
ringstrength=ringstrength,
ringheigth=level,
floorstrength=floorstrength,
ceilingstrength=ceilingstrength
)
{
angle=0.5*360/sides;
radius_in_circle=(asin(angle)*ringdiameter)-wallstrength;
side_length=2*acos(angle)*radius_in_circle;
elements=floor(side_length/(outer_wall_woodwidth+outer_wall_strawwidth));
for (side=[1:sides] )
{
echo(side);
rotate(
[0,0,2*angle]
)
{
if (elements%2==1)
{
echo("DEBUG uneven number");
// center the middle modeline
for (spar= [0:elements])
{
offset= 0.5* outer_wall_strawwidth + spar*(outer_wall_woodwidth+outer_wall_strawwidth);
translate (
[
0,
radius_in_circle,
offset
] )
spar(
width=outer_wall_woodwidth,
depth=wallstrength,
height=level
);
translate (
[
0,
radius_in_circle,
-offset
] )
spar();
}
}
if (elements%2==0)
{
echo("DEBUG even number");
// center the middle modeline
for (spar= [0:elements])
{
offset= 0.5* outer_wall_strawwidth + spar*(outer_wall_woodwidth+outer_wall_strawwidth);
translate (
[0,
radius_in_circle,
offset] )
spar(
width=outer_wall_woodwidth,
depth=wallstrength,
height=level
);
translate (
[0,
radius_in_circle,
-offset
] )
spar();
}
}
}
}
};
//living();
//translate([0,0,level]) living();
//garage();
outer_wall();