2
<entityrecipe name="boulder">
3
<author>Alexey Torkhov</author>
7
<entity type="boulder">
10
<list name="bbox">$bbox</list>
11
<float name="mass">$mass</float>
12
<string name="style">$style</string>
17
<adapter name="mass" type="number" title="Mass" default="100000"/>
18
<adapter name="massdev" type="number" title="Mass std. dev." default="10000"/>
19
<adapter name="style" type="string" title="Style" allowrandom="yes" default="Random">
20
<item value="a">Boulder A</item>
21
<item value="b">Boulder B</item>
22
<item value="c">Boulder C</item>
23
<item value="d">Boulder D</item>
27
<bind name="bbox" func="boulder.calcSize">
28
<adapter name="mass" />
29
<adapter name="massdev" />
32
<adapter name="mass" />
35
<adapter name="style" />
40
function boulder.calcSize(a, b)
41
local density = 2500 * 0.52 -- our boulder is not cubic, 0.52 is rough volume of its size 1
43
local massmean = a:asNum()
44
local massdev = b:asNum()
45
local mass = math.abs(math.randn(massmean, massdev))
46
local volume = mass / density
47
local len = volume^(1/3)
49
local bbox = Atlas.Message.ListType()
50
bbox:push_back(-len/2)
51
bbox:push_back(-len/2)
56
return Atlas.Message.Element(bbox)