| 1 | //Model of infamous Beograd Rudo Buildings in Istočna Kapija Park (Serbia) |
| 2 | |
| 3 | fast=false; //disable slow features like windows... |
| 4 | |
| 5 | module rudo_module(xs=5, ys=4, zs=3, s=1, in=0.2, shrink=0) { |
| 6 | //jeden "blok" (patro) budovy |
| 7 | |
| 8 | inb=0.15; |
| 9 | inx=0.5; |
| 10 | |
| 11 | lsx=xs-(shrink*2); |
| 12 | lsy=ys-(shrink*2); |
| 13 | lsz=zs; |
| 14 | ssx=lsx-(in*2); |
| 15 | ssy=lsy-(in*2); |
| 16 | ssz=lsz; |
| 17 | |
| 18 | rr=3; |
| 19 | rc=xs*ys*2; |
| 20 | randx=rands(-1,xs,rc+1); |
| 21 | randy=rands(-1,ys,rc+1); |
| 22 | randz=rands(0.3,1.8,rc+1); |
| 23 | |
| 24 | translate([shrink,shrink,0]) difference() { |
| 25 | //Zakladni tvar patra |
| 26 | translate([-0.5,-0.5,-0.5]) cube([lsx,lsy,lsz]); |
| 27 | |
| 28 | //Nahodne otevrena okna |
| 29 | if(!fast) difference() { |
| 30 | for(i = [0 : rc]) { |
| 31 | translate([ |
| 32 | round(randx[i]*rr)/rr, |
| 33 | round(randy[i]*rr)/rr, |
| 34 | round(randz[i]/2)*1.5 |
| 35 | ]) cube([1,1,0.6], center=true); |
| 36 | } |
| 37 | |
| 38 | //Kostka ktera limituje hloubku oken |
| 39 | translate([in-0.5,in-0.5,-0.5]) cube([ssx,ssy,ssz]); |
| 40 | } |
| 41 | |
| 42 | //celni sachty |
| 43 | translate([inb-1,ys/2-0.5,0]) cube([1,1,zs*3], center=true); |
| 44 | translate([xs-inb,ys/2-0.5,0]) cube([1,1,zs*3], center=true); |
| 45 | |
| 46 | //rohy |
| 47 | if(shrink==0) { |
| 48 | translate([-0.5,-0.5,0]) cube([2*inx,2*inx,zs*3], center=true); |
| 49 | translate([-0.5,ys-0.5,0]) cube([2*inx,2*inx,zs*3], center=true); |
| 50 | translate([xs-0.5,-0.5,0]) cube([2*inx,2*inx,zs*3], center=true); |
| 51 | translate([xs-0.5,ys-0.5,0]) cube([2*inx,2*inx,zs*3], center=true); |
| 52 | } |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | module rudo_building() { |
| 57 | w=6; |
| 58 | translate([0,0.5-(w/2),0]) { |
| 59 | //sklep |
| 60 | translate([0,0,-2]) rudo_module(10,w,2, shrink=0.15, in=0.1); |
| 61 | translate([11,0,-2]) rudo_module(4,w,2, shrink=0.15, in=0.1); |
| 62 | //patra |
| 63 | translate([0,0,0]) rudo_module(15,w,3); |
| 64 | translate([0,0,3]) rudo_module(10,w,1, shrink=0.15); |
| 65 | translate([0,0,4]) rudo_module(10,w,3); |
| 66 | translate([0,0,7]) rudo_module(9,w,3); |
| 67 | translate([0,0,10]) rudo_module(8,w,3); |
| 68 | translate([0,0,13]) rudo_module(7,w,3); |
| 69 | translate([0,0,16]) rudo_module(6,w,3); |
| 70 | translate([1,0,19]) rudo_module(4,w,3); |
| 71 | //vytahova budka |
| 72 | translate([1.5,0,20]) cube([2,1.5,2]); |
| 73 | translate([1.5,w-2.5,20]) cube([2,1.5,2]); |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | module rudo_scene() { |
| 78 | //vsechny 3 budovy |
| 79 | for(r=[0,120,240]) rotate([0,0,r]) translate([7.5,0,2.5]) rudo_building(); |
| 80 | difference() { |
| 81 | intersection() { |
| 82 | translate([0,0,-77]) sphere(r=80, $fn=100); |
| 83 | cylinder(r=16, h=3); |
| 84 | } |
| 85 | //napis |
| 86 | rotate([0,0,30]) translate([-12.5,3,0.3]) |
| 87 | rotate([180,0,0]) linear_extrude(1) scale(0.5) text("HARVIE"); |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | //!translate([0,-1,0]) rudo_module(7,3,3, shrink=0.2) |
| 92 | //scale(2) rudo_building(); |
| 93 | |
| 94 | scale(2) rudo_scene(); |