Rhino Script. Overpass
 /  1 of 3


Project Name: Rhino Script. Overpass
Location:anywhere
Istanbul Bilgi University Arch 571
Supervisor:Mete TUNERI
Project Group: Individual Work

Made completely by Rhino monkey script.
Here is the code:

Option Explicit
'Script written by
'Script copyrighted by
'Script version 15 Ocak 2010 Cuma 13:40:36

Call Main()
Sub Main()
'ANA DEĞERLER - CM CİNSİNDEN
Dim a,b,c,d,aksmax,zemin,b2,cephe
a= Rhino.GetReal("Geçilecek Açıklığı Girin / cm")
b= Rhino.GetReal("Minimum Araç Geçiş Yüksekliğini Girin / cm")
c= Rhino.GetReal("Yaya Yolu Yüksekliğini Girin / cm")
d= Rhino.GetReal("Yaya Yolu Genişliğini Girin/ cm")
cephe= Rhino.GetReal("Cephe Tipini seçiniz / Çubuk - 1 girin / Kutu - 2 girin / Peynir - 3 girin")
aksmax= 2000 'maksimum aks aralığı
zemin=-20 'döşeme kalınlığı
'--------------------------------------------
'_______________________________________KOLON
'--------------------------------------------
Dim k,x,y,xp,xpini,yp,ypini,zp,zpini,i,j,ks,aks
x=20 'kolon ebatları
y=20 'kolon ebatları
sr=5 'makas çapı
xp=0
xpini=xp
yp=0
ypini=yp
ks=a/aksmax
aks=a/(int(ks)+1)
zp=0
zpini=zp
If a>2000 Then
For j=1 To ks+2
For i=1 To 2
k= box (x,y,b,xp,yp,0)
yp=yp+d
Next
yp=0
xp=xp+aks
Next
'silindir makas
If b<300 Then
Dim silindir,ss,ss2,se,se2,sr,sj,si
xp=xpini
yp=ypini
zp=zpini
For sj=1 To ks+2
ss=Array (xp+x/2,yp+y,zp)
se=Array (xp+x/2,yp+d,zp+b+zemin)
ss2=Array (xp+x/2,yp+d,zp)
se2=Array (xp+x/2,yp+y,zp+b+zemin)
Rhino.AddCylinder ss,se,sr
Rhino.AddCylinder ss2,se2,sr
xp=xp+aks
Next
Else
xp=xpini
yp=ypini
zp=zpini
For si=1 To ks+2
For sj=1 To 2
ss=Array (xp+x/2,yp+y,zp)
se=Array (xp+x/2,yp+d,zp+(b+zemin)/2)
ss2=Array (xp+x/2,yp+d,zp)
se2=Array (xp+x/2,yp+y,zp+(b+zemin)/2)
Rhino.AddCylinder ss,se,sr
Rhino.AddCylinder ss2,se2,sr
zp=zp+b/2
Next
xp=xp+aks
zp=zpini
Next
End If
Else
For j=1 To 2
For i=1 To 2
k= box (x,y,b,xp,yp,0)
yp=yp+d
Next
yp=0
xp=xp+a
Next
'silindir makas
If b<300 Then
xp=xpini
yp=ypini
zp=zpini
For sj=1 To 2
ss=Array (xp+x/2,yp+y,zp)
se=Array (xp+x/2,yp+d,zp+b+zemin)
ss2=Array (xp+x/2,yp+d,zp)
se2=Array (xp+x/2,yp+y,zp+b+zemin)
Rhino.AddCylinder ss,se,sr
Rhino.AddCylinder ss2,se2,sr
xp=xp+a
Next
Else
xp=xpini
yp=ypini
zp=zpini
For si=1 To 2
For sj=1 To 2
ss=Array (xp+x/2,yp+y,zp)
se=Array (xp+x/2,yp+d,zp+(b+zemin)/2)
ss2=Array (xp+x/2,yp+d,zp)
se2=Array (xp+x/2,yp+y,zp+(b+zemin)/2)
Rhino.AddCylinder ss,se,sr
Rhino.AddCylinder ss2,se2,sr
zp=zp+b/2
Next
xp=xp+a
zp=zpini
Next
End If
End If
'-----------------------------------------------------
'________________________________________________ZEMİN
'-----------------------------------------------------
Dim z
xp=xpini
yp=ypini
z= box (a+x,d+x,zemin,xp,yp,b)
'ÜST ORTU
Dim uo(2),alluo
xp=xpini
yp=ypini
zp=zpini
uo(0)= Box (a+x,10,c,xp,yp,b)
uo(1)= Box (a+x,-10,c,xp,d+y,b)
uo(2)= Box (a+x,d+x,10,xp,yp,zp+b+c)
alluo= Rhino.BooleanUnion (uo)
If cephe=1 Then
'-----------------------------------------------------------
'________________________________________________Cephe Tip 1
'-----------------------------------------------------------
Dim boo,boo2,ib,ib2,allboo1,ustortu,adet
adet= int(a/40)
ReDim boo(adet-2)
ReDim boo2(adet-2)
For ib=0 To adet-2
boo(ib)= Box (20,100+((d/2)*Rnd),100+(700*Rnd),xp+50,yp-40,zp+b+(200*Rnd))
xp=xp+40
Next
xp=xpini
allboo1= rhino.booleandifference (alluo, boo)
For ib2=0 To adet-2
boo2(ib2)= Box (20,-(100+((d/2)*Rnd)),100+(700*Rnd),xp+50,yp+d+40,zp+b+(200*Rnd))
xp=xp+40
Next
rhino.booleandifference allboo1,boo2
End If
If cephe=2 Then
'-----------------------------------------------------------
'________________________________________________Cephe Tip 2
'-----------------------------------------------------------
adet= int(a/250)
ReDim boo(adet-2)
ReDim boo2(adet-2)
For ib=0 To adet-2
boo(ib)= Box (100+(200*Rnd),100+(d/2*Rnd),100+(700*Rnd),xp+50,yp-40,zp+b+(350*Rnd))
xp=xp+300
Next
xp=xpini
allboo1= rhino.booleandifference (alluo, boo)
For ib2=0 To adet-2
boo2(ib2)= Box (100+(200*Rnd),-(100+(d/2*Rnd)),100+(700*Rnd),xp+50,yp+d+40,zp+b+(350*Rnd))
xp=xp+300
Next
rhino.booleandifference allboo1,boo2
End If
If cephe=3 Then
'-----------------------------------------------------------
'________________________________________________Cephe Tip 3
'-----------------------------------------------------------
Dim sppos
adet= int(a/250)
ReDim boo(adet-2)
ReDim boo2(adet-2)
For ib=0 To adet-2
sppos=array(xp+(100*Rnd),yp-20+(100*Rnd),zp+b+100+(2*c/2)*Rnd)
boo(ib)= Rhino.AddSphere (sppos, (c/5)+(Rnd*(c/4)))
xp=xp+250+100*Rnd
Next
xp=xpini
allboo1= rhino.booleandifference (alluo, boo)
For ib2=0 To adet-2
sppos=array(xp+(100*Rnd),yp+d+20-(20*Rnd),zp+b+100+(2*c/2)*Rnd)
boo2(ib2)= Rhino.AddSphere (sppos, (c/6)+(Rnd*(c/4)))
xp=xp+250+100*Rnd
Next
rhino.booleandifference allboo1,boo2
End If
'----------------------------------------------------------------
'____________________________________MERDİVEN VE RAMPA ANA BAŞLIK
'----------------------------------------------------------------
xp=xpini
yp=ypini
zp=zpini
Dim riht,bas,h,bad,bi,bg,kks,kke,kkr,kks2,kke2
If b<200 Then
'____________________________________Rampa
Dim Ramp,egim,ramp2
egim=b*10
ramp= Rampa (-60,d+x,0,-egim,0,0,0,0,b)
ramp2= Rampa (-60,d+x,0,egim+a+x,a+x,0,0,0,b)
Else
'____________________________________Merdiven Asansör ve Kiriş
h=b
bg=200 'Basamak genişliği
bas=30 'Basım alanı genişliği
riht=(63-bas)/2 'Merdiven Rıhtı
bad=int(h/riht) 'Basamak Sayısı
riht=h/bad
kkr=1
xp=xpini
yp=ypini
zp=zpini
Box -bg*2,d+y,zemin,xp,yp,zp+b 'Asansör zemini 1
Box -200,d+y,b+c,xp-bg*2,yp,zp 'Asansör1
Box bg*2,d+y,zemin,xp+a+x,yp,zp+b 'Asansör zemini 2
Box 200,d+y,b+c,xp+a+x+bg*2,yp,zp 'Asansör2
Dim kiris,kri,kri2
For kri2=1 To 2
For kri=1 To 2
kiris= box (a+x+bg*4,y,zemin,xp-2*bg,yp,zp+b+zemin)
yp=yp+d
Next
yp=ypini
zp=zp+c-zemin
Next
xp=0-bg
yp=0-bas
zp=0+b
If bad>20 Then
For bi=0 To int((bad/2)-1)
kks=Array(xp+5,yp+bas/2,zp)
kke=array(xp+5,yp+bas/2,zp+90)
kks2=Array(xp+bg-5,yp+bas/2,zp)
kke2=array(xp+bg-5,yp+bas/2,zp+90)
Box bg,bas,-riht,xp,yp,zp
Box bg,bas,-riht,xp+a+x+bg,yp,zp
' Rhino.Addcylinder kks,kke,kkr
' Rhino.Addcylinder kks2,kke2,kkr
yp=yp-bas
zp=zp-riht
Next
Box bg*2,bg,-riht,xp-bg,yp-bg+bas,zp
Box bg*2,bg,-riht,xp+x+a+bg,yp-bg+bas,zp
xp=xp-bg
yp=yp+bas
zp=zp-riht
For bi=0 To int((bad/2)-1)
kks=Array(xp+5,yp+bas/2,zp)
kke=array(xp+5,yp+bas/2,zp+90)
kks2=Array(xp+bg-5,yp+bas/2,zp)
kke2=array(xp+bg-5,yp+bas/2,zp+90)
Box bg,bas,-riht,xp,yp,zp
Box bg,bas,-riht,xp+a+x+bg*3,yp,zp
yp=yp+bas
zp=zp-riht
' Rhino.Addcylinder kks,kke,kkr
' Rhino.Addcylinder kks2,kke2,kkr
Next
Else
For bi=0 To bad-1
kks=Array(xp+5,yp+bas/2,zp)
kke=array(xp+5,yp+bas/2,zp+90)
kks2=Array(xp+bg-5,yp+bas/2,zp)
kke2=array(xp+bg-5,yp+bas/2,zp+90)

Box 2*bg,bas,-riht,xp-bg,yp,zp
Box 2*bg,bas,-riht,xp+a+x+bg,yp,zp
'Rhino.Addcylinder kks,kke,kkr
'Rhino.Addcylinder kks2,kke2,kkr
yp=yp-bas
zp=zp-riht
Next
End If
End If
If a>2000 Then
Rhino.Print "Aks Aralığı"
Rhino.Print aks
End If
If b>200 Then
Rhino.Print "Merdiven Basamak sayısı"
Rhino.Print bad
Rhino.Print "Merdiven Rıhtı"
Rhino.Print riht
End If
End Sub
Function Box (x,y,z,xp,yp,zp)
Dim b1,b2,b3,b4,b5,b6,b7,b8
b1= array(xp,yp,zp)
b2= array(xp,yp+y,zp)
b3= array(xp+x,yp+y,zp)
b4= array(xp+x,yp,zp)
b5= array(xp,yp,zp+z)
b6= array(xp,yp+y,zp+z)
b7= array(xp+x,yp+y,zp+z)
b8= array(xp+x,yp,zp+z)
Dim canerinkutusu
canerinkutusu = Rhino.AddBox (array(b1,b2,b3,b4,b5,b6,b7,b8))
box=canerinkutusu
End Function
Function Rampa (x,y,z,xp,xp2,yp,yp2,zp,zp2)
Dim b1,b2,b3,b4,b5,b6,b7,b8
b1= array(xp,yp,zp)
b2= array(xp,yp+y,zp)
b3= array(xp+x,yp+y,zp)
b4= array(xp+x,yp,zp)
b5= array(xp2,yp2,zp2+z)
b6= array(xp2,yp2+y,zp2+z)
b7= array(xp2+x,yp2+y,zp2+z)
b8= array(xp2+x,yp2,zp2+z)
Rhino.AddBox array(b1,b2,b3,b4,b5,b6,b7,b8)
End Function