diff --git a/polyhaus.scad b/polyhaus.scad index 7f29e83..d8b5f73 100644 --- a/polyhaus.scad +++ b/polyhaus.scad @@ -12,107 +12,178 @@ sides=6; // The House Modules module ngon( - diameter=5, - height=level) - { - cylinder( - h=height, - r=diameter/2, - $fn=6 - ); - }; - - - -module garage( - garageheigth=garageheigth, - garagediameter=garagediameter) - { - //color([0.1,0.1,1]) - #translate( - [0,0,-garageheigth]) { - living( - floorheight=2*floorheigth, - ceilingheigth=2*ceilingheigth - ) - }; - }; -}; -module ring( - ringdiameter=ringdiameter, - ringstrength=ringstrength, - ringheigth=level + diameter=5, + height=level, + sides=sides ) { - difference() { - ngon( - height=ringheigth, - diameter=ringdiameter, - $fn=6); - %translate ([0,0, -1]) ngon( - height=ringheigth+2, - diameter=ringdiameter-ringstrength, - $fn=6); - }; + cylinder( + h=height, + r=diameter/2, + $fn=sides + ); }; -module living( - ringdiameter=ringdiameter, - ringstrength=ringstrength, - ringheigth=level, - floorstrength=floorstrength, - ceilingstrength=ceilingstrength, - wallstrength=wallstrength, + +module garage( + garageheigth=garageheigth, + garagediameter=garagediameter + ) { - #difference() { - %ring(); - translate([0,0,+floorstrength]) -ring(ringdiameter=ringdiameter-wallstrength, - ringstrength=ringstrength-2*wallstrength, - ringheigth=level-floorstrength-ceilingstrength); - }; + //color([0.1,0.1,1]) +#translate([0,0,-garageheigth]) + living( + floorstrength=2*floorstrength, + ceilingstrength=2*ceilingstrength + ); }; -outer_wall_woodwidth=50; +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 + ); +} -outer_wall_strawwidth=50; module outer_wall( ringdiameter=ringdiameter, - ringstrength=ringstrength, - ringheigth=level, - floorstrength=floorstrength, - - ceilingstrength=ceilingstrength) - + ringstrength=ringstrength, + ringheigth=level, + floorstrength=floorstrength, + ceilingstrength=ceilingstrength +) { -side_length=; -radius_in_circle=; -elements=floor(sidelength/(outer_wall_woodwidth+outer_wall_strawwidth)); - for (side in [1:sides]) -{ -if (elements%2==1) -{ -//center the middle one -for (spar in [0:elements]) -{ -translate ( -[0, -radius_inner_circle, -spar*(outer_wall_woodwidth+outer_wall_strawwidth -]) spar(); -translate ( -[0, -radius_inner_circle, --spar*(outer_wall_woodwidth+outer_wall_strawwidth -]) spar(); -} -} - -} + 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(); +//living(); +//translate([0,0,level]) living(); +//garage(); +outer_wall();