Sub BuildRainbucket(rain As Double,width As Int,height As Int,id As String) As ABMCanvasObject
Dim bucket As ABMCanvasObject
Dim const stb=height-30 As Int
Dim const stt=30 As Int
Dim const tg=0.27 As Double 'precaluculated 15 deg tan
Dim level=rain*40 As Int
Dim y=Sqrt(1/tg*4000) As Double 'x1 displacement
Dim x=y*tg/2 As Double
Dim x2=width/8 As Int
Dim top=y As Int
If rain>200 Then rain=200 ''limit amount of rain just to prevent skyhigh filled bucket
bucket.beginPath
bucket.moveTo(width/2-x2,stb)
bucket.lineTo(width/2-x-x2,stb-y)
bucket.lineTo(width/2+x+x2,stb-y)
bucket.lineTo(width/2+x2,stb)
bucket.lineTo(width/2-x2,stb)
bucket.fillStyleColor("#d3d3d3")
bucket.fill
y=Sqrt(1/tg*level)
x=y*tg/2
bucket.beginPath
bucket.moveTo(width/2-x2,stb)
bucket.lineTo(width/2-x-x2,stb-y)
bucket.lineTo(width/2+x+x2,stb-y)
bucket.lineTo(width/2+x2,stb)
bucket.lineTo(width/2-x2,stb)
bucket.fillStyleColor("#0000ff")
bucket.fill
'' draw indicator
bucket.beginPath
bucket.moveTo(width/2,stb)
bucket.lineto(width/2,stb-top)
bucket.lineWidth(1)
bucket.strokeStyleColor("#ffff00")
bucket.stroke
For x=1 To 10
bucket.beginPath
bucket.moveTo(width/2-x2/2,stb-top*x/10)
bucket.lineto(width/2+x2/2,stb-top*x/10)
bucket.lineWidth(1)
bucket.stroke
Next
''write amount of rain
bucket.font("arial", 13)
bucket.fillStyleColor("#ff00ff")
bucket.textAlign(ABM.CANVAS_TEXTALIGN_CENTER)
bucket.fillText(id,width/2,stt)
bucket.fillText(NumberFormat(rain,1,1) & "mm",width/2,height)
Return bucket
End Sub