// 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();