/*
* Vine * By AK, June 2010 * Variations: ABC, but most are OK * A few layering artefacts show up in some variations. * http://creativecommons.org/licenses/by-sa/2.5/au/ */
startshape START
tile { s 3.6 4.8 }
background { h 240 b -.8 sat .1}
rule START {
12* {x 1 y .5 s .95 .95 .9} stalk { z 200 b .5}
}
// —- a few churn rules to start in random position. rule stalk {stem {} barestem {r 180}} rule stalk 50 {stalk {x sqrt(2)}} rule stalk 50 {stalk {y sqrt(2)}}
// stem segment alternates curvature, except when flipped, or terminated rule stem { // continuation
stem_pA {h 90 sat .6 b -.8} 2* {f 90 y .1 x .05} { stemlet {r -30 y .5 x .05} } maybeflower {y .5 x .05} stem {x .1 y 1 f 85 r -5 z -1 s .97}
} rule stem .5 { // flip stem
stem {f 90}}
rule stem .1 { // terminate stem
2* {f 90 s .8} { stemlet {r -40} } stemlet {f 85 s .8}
}
// bare version of stem - only used inverted. rule barestem {
stem_pA {h 90 sat .6 b -.8} barestem {x .1 y 1 f 85 r -5 z -5 s .9}
} rule barestem .5 {barestem {f 90}}
// —- small stem with leaf rule stemlet {
stem_pA { s .5 h 120 sat .6 b -.7 z -.01} leaf {x .05 y .5 s .4 f 75 z .1 }
}
// —- sometimes this generates a flower rule maybeflower {
stem_pB {s .5 h 120 sat .6 b -.7 z 1.2} flower {x 1 y 0 s .12 z 1.5}
} rule maybeflower 4 {} rule maybeflower 5 {maybeflower {f 90}}
// normal path for stem path stem_pA {
MOVETO {x 0 y 0} ARCTO {x .1 y 1 r -5} STROKE { param roundcap width 0.08}}
// path for flower stem path stem_pB {
MOVETO {x 0 y 0} CURVETO {x 2 y 0 x1 0.3 y1 1 x2 2 y2 1} STROKE { param roundcap }}
// —- flower: top level randomisation for choice of // different styles rule flower {calyx {b -.7 |b .5 h 120 sat .5 z .05}flower_X {}} rule flower {calyx {b -.7 |b .5 h 120 sat .5 z .05}flower_X {s -1 1 1}} rule flower .5 {calyx {b -.7 |b .5 h 120 sat .5 z .05}flower_X {s 1 1 -1}} rule flower .5 {calyx {b -.7 |b .5 h 120 sat .5 z .05}flower_X {s -1 1 -1}} rule flower_X {flower_A {r -10}} rule flower_X {flower_B {r -20}} rule flower_X {flower_C {r -30}} rule flower_X {flower_D {}}
rule calyx {14* {y -.15 s 1.05 b .02|}CIRCLE {s .5 1 skew -20 0}}
// several different styles of flower - basically the same // idea, but with different geometry rule flower_A {
flower_A_bell {b .9 a -.5} bicurlz {s .15 y -10 z 1.5 a -.2 sat .8 b 1 r -132}
} rule flower_A_bell {
flower_ring {y -10 s 1 .6} flower_A_bell {s .997 .999 .997 skew -.05 0 b -.01 h .2 sat .001}
}
rule flower_B {
flower_B_bell {b .9 a -.5} bicurlz {s .15 y -10 z 1.5 a -.5 sat .8 b 1 r -132}
} rule flower_B_bell {
flower_ring {y -10 s 1 .4} flower_B_bell {s .997 .999 .997 skew -.05 0 b -.01 h .2 sat .001}
}
rule flower_C {
flower_C_bell {b .9 a -.5} bicurlz {s .15 y -10 z 1.5 a -.5 sat .8 b 1 r -132}
} rule flower_C_bell {
flower_ring {y -10 s 1 0.2} flower_C_bell {s .997 .999 .997 skew -.05 0 b -.01 h .2 sat .001}
}
rule flower_D {
flower_D_bell {b .9 a -.5} bicurlz {s .2 y -10 z 1.5 a -.5 sat .8 b 1 r -100}
} rule flower_D_bell {
flower_ring {y -10 s 1 0.5} flower_D_bell {s .997 .999 .997 skew -.01 0 b -.01 h .2 sat .001}
}
// – the basic flower element. A little bit of // randomisation for texture rule flower_ring {flower_ring_elt {}} rule flower_ring {flower_ring_elt {r 5}} rule flower_ring .2 {flower_ring_elt {b -.3}} rule flower_ring .2 {flower_ring_elt {r 5 b -.3}}
rule flower_ring_elt {
9 * { r 40 } CIRCLE { s .3 1.8 x -3 z 1.002 b .3 sat .3 h 50} 9 * { r 40 } CIRCLE { s .3 .5 x 3.1 z 1.001 b .2 sat .2 h 40} 9 * { r 40 } SQUARE { s .2 1 x 3.5 z 1 b .1} 9 * { r 40 } CIRCLE { s 1 2 x -3.5 z 1 b .3 sat .2 h -30} CIRCLE {s .2 z 1 b .5 a .5 sat .8}
}
// — curly stamens rule bicurlz {2* {f 0}curlz {}} rule bicurlz 0.2 {bicurlz {s 1.2 .9}} rule curlz {CIRCLE {}curlz {x .2 r 2 s .995 sat -.005 b -.005}} rule curlz .001 {curlz {f 5}} rule curlz .005 {bicurlz {}}
// — leaf rules - these are pretty simple.
rule leaf {
leaf_body {h 120 b -.4 sat .6 |b .7}
} rule leaf {
leaf_body {h 120 b -.5 sat .6 |b .7}
}
rule leaf_body {
2 * { f 90} leaf_side {r -30 s .8 1 .1 x -.02} leaf_mid {y -.01 s 1 .7} leaf_body { s .8 y .4 r 4 |b -0.05}
} rule leaf_mid {
leaf_elt {y .5 z -1} leaf_mid { s .9 .995 .9 b .02| }
} rule leaf_side {
leaf_elt {y .5 z -1 skew -10 1} leaf_side { s .9 .995 .9 x .005 y .002 b .02| r -2}
} rule leaf_elt {
CIRCLE {} 30* {r 12} SQUARE[r 6 x .45 s .1 .05 b .1|]
}