aUCBLogo Demos and Tests / leaves


to leaves
   
perspective
   
WindowMode
   
setLightAmbient "light grey
   
cs
   
hideTurtle
   
maplebitmap=loadImage "maple.jpg
   
BitMakeTransparent maplebitmap BitPixel maplebitmap 1 1
   
mapletex=Texture maplebitmap
   
leafCount=10
   
leafGraphic=Array leafCount
   
repeat leafCount
   
[   leafGraphic.repcount=drawLeaf 300*sqrt rnd+0.5
   
]
   
cs
   
N=20
   
turtl=Array N
   
repeat N
   
[   i=repcount
      
turtl.i=newTurtle
      
setTurtle turtl.i
      
ht
      
setUpdateGraph false
      
down 90  rt random 360  
      
a=random 50 up a  fd 300+random 100 down a  
      
rt 90
   
]
   
rol=(random int rseq 360 360 N)+0.1
   
drol=(random int rseq 2 2 N)-2
   
running=true
   
index=(random int rseq leafCount leafCount N)+1
   
while [running]
   
[   clean
      
Texture mapletex
      
repeat N
      
[   i=repcount
         
setTurtle turtl.i
         
fd 10
         
right 2
         
rr rol.i
         
leaf index.i
         
lr rol.i
         
rol.i=rol.i+drol.i
      
]
      
updateGraph
      
if keyP [running=false]
   
]
end

to drawLeaf s
   
halfMapleLeaf=
   
[   115.5
      
.05
      
30
      
.05
      
10
      
.1
      
30
      
.2
      
20
      
.1
      
      
120
      
.1
      
50
      
.2
      
30
      
.1
      
140
      
.07
      
120
      
.1
      
30
      
.1
      
30
      
.07
      
40
      
.05
      
      
160
      
.05
      
40
      
.1
      
40
      
.2
      
20
      
.1
      
120
      
.2
      
20
      
.1
      
150
      
.05
      
110
      
.1
      
40
      
.06
      
30
      
.05
      
30
      
.05
      
75.5
   
]
   
MapleLeaf=se halfMapleLeaf reverse2 halfMapleLeaf

   
entex
   
setpc hsb random 120 0.7 1
   
setTessWindingRule 3
   
GraphicStart
;comment
;[
   
TessStart
   
run MapleLeaf
   
repeat 2
   
[   .3
      
90
      
.01
      
90
   
]
   
TessEnd
   
lt 180
;]   setfc "white
;   fillRect [0 0][100 100]
   
output GraphicEnd
end

to d
   
pu fd s*d
   
setTexPos Pos/s*0.8+[0.5 0.15]
   
back s*d
   
pd
   
fd s*d
end

to a
   
left a
end

to a
   
right a
end

to reverse2 in
   
out=[]
   
while [not empty? in]
   
[   out=se (se first in first bf inout
      
in=bf bf in
   
]
   
output out
end

to leaf n
   
drawGraphic leafGraphic.n
end