// 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; outer_wall_woodwidth=50; outer_wall_strawwidth=1000; // 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=(sin(angle)*ringdiameter)-wallstrength; echo("DEBUG RING radius_in_circle"); echo(radius_in_circle); side_length=2*cos(0.5*360/sides)*radius_in_circle; echo("DEBUG RING side_length"); echo(side_length); radius_in_diameter=radius_in_circle/ sin(angle); echo("DEBUG RING radius_in_diameter"); echo(radius_in_diameter); #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=(sin(angle)*ringdiameter)-wallstrength; radius_in_diameter=radius_in_circle/ sin(angle); side_length=2*acos(0.5*360/sides)*radius_in_circle; # difference() { %ring(); echo("DEBUG LIVING building inner ring"); translate([0,0,+floorstrength]) ring( ringdiameter=radius_in_diameter, ringstrength=ringstrength-2*wallstrength, ringheigth=level-(floorstrength+ceilingstrength)); }; }; module spar( spar_width, spar_depth, spar_height ) { echo("DEBUG SPAR creating spar"); echo("DEBUG SPAR spar vars"); echo( spar_width, spar_depth, spar_height ); translate( [0.5*spar_width, 0.5*spar_depth, 0] ) cube( size=[ spar_width, spar_depth, spar_height ] ); } module outer_wall( ringdiameter=ringdiameter, ringstrength=ringstrength, ringheigth=level, floorstrength=floorstrength, ceilingstrength=ceilingstrength ) { angle=0.5*360/sides; echo("DEBUG angle"); echo(angle); radius_in_circle=floor( 0.5*(sin(angle)*ringdiameter)- wallstrength ); echo("DEBUG radius_in_circle"); echo(radius_in_circle); side_length=round( 2*cos(angle)*radius_in_circle ); echo("DEBUG side_lenght"); echo(side_length); elements=floor(side_length/(outer_wall_woodwidth+outer_wall_strawwidth)); echo("DEBUG elements"); echo(elements); for(side=[1:sides] ) { echo("DEBUG running through sides"); echo(side); rotate( [0,0,2*angle] ) { echo(" DEBUG OUTER WALL building spars") if (elements%2==1) { echo("DEBUG uneven number"); // center the middle modeline for (spar= [0:elements]) { echo("DEBUG OUTER WALL planking"); echo("DEBUG OUTER WALL spar"); echo(spar); offset = ( 0.5* outer_wall_strawwidth + spar*(outer_wall_woodwidth + outer_wall_strawwidth) ); echo("DEBUG OUTER WALL offset for spar"); echo(offset); echo("DEBUG OUTER WALL spar vars"); echo( outer_wall_woodwidth, wallstrength, level ); translate ( [ 0, offset, radius_in_circle ] ) spar( spar_width=outer_wall_woodwidth, spar_depth=wallstrength, spar_height=level ); translate ( [ 0, -offset, radius_in_circle ] ) spar( spar_width=outer_wall_woodwidth, spar_depth=wallstrength, spar_height=level ); } } if (elements%2==0) { echo("DEBUG even number"); // center the middle modeline for (spar= [0:elements]) { echo("DEBUG OUTER WALL planking"); echo("DEBUG OUTER WALL spar"); echo(spar); offset= (0.5* outer_wall_strawwidth + spar*(outer_wall_woodwidth+ outer_wall_strawwidth)); echo("DEBUG OUTER WALL offset for spar"); echo(offset); echo("DEBUG OUTER WALL spar vars"); echo( outer_wall_woodwidth, wallstrength, level ); // positive spar translate ( [ offset, 0, radius_in_circle ] ) spar( spar_width=outer_wall_woodwidth, spar_depth=wallstrength, spar_height=level ); // negative spar translate ( [ -offset, 0, radius_in_circle ] ) spar( spar_width=outer_wall_woodwidth, spar_depth=wallstrength, spar_height=level ); } } } } }; living(); translate([0,0,level]) living(); garage(); outer_wall(); //ring();