PatterningInCardiganBay
ThoughtStorms Wiki
CardiganBay, the software behind this wiki now supports a card type of basic Patterning patterns. You can learn more about Patterning here : http://alchemyislands.com/tutorials/HelloWorld.html
Cards, of type :patterning, can be used to make patterns. You can see some examples below.
Note that the embedded SVG in these cards was generated from Patterning at ExportTime
; Make a ring of polygons. Same number of polygons as number of sides.
(defn a-round
[n style]
(clock-rotate
n (poly 0 0.5 0.2 n style)))
(a-round 5 {:stroke (p-color 220 140 180)
:fill (p-color 190 55 250 100) })
;; Fill a grid layout from a repeated stream of those a-rounds
(defn a-round
[n style]
(clock-rotate
n (poly 0 0.5 0.2 n style)))
(grid-layout 3
(repeat
(a-round 5 {:stroke (p-color 220 140 180)
:fill (p-color 190 255 200 100) })
)
)
;; Use a half-drop-grid-layout to stagger two different patterns
;; We use a cycle to create an alternating stream of them
(defn a-round
[n style]
(clock-rotate
n (poly 0 0.5 0.2 n style)))
(half-drop-grid-layout 6
(cycle [
(a-round 6 {:stroke (p-color 140 220 180)
:fill (p-color 190 255 200 100)
:stroke-weight 2}
)
(a-round 9 {:fill (p-color 255 100 100 )
:stroke (p-color 190 255 200 100)
:stroke-weight 2}
)]))
;; Map a colour randomizing function across a stream of
;; a-rounds, generated from a cycle of different numbers
(defn rand-col [] (p-color (rand-int 255) (rand-int 255) (rand-int 255) ))
(defn a-round
[n style]
(clock-rotate
n (poly 0 0.5 0.2 n style)))
(let
[rand-color
(fn [p]
(let
[c (rand-col)]
(over-style
{:fill c, :stroke-weight 2, :stroke (darker-color c)}
p)))]
(grid-layout
8
(map rand-color (map #(a-round % {}) (cycle [3 4 5 6 7])))))
;; Use a framed layout which takes 3 patterns, representing
;; corners, edges and centre-piece
(let
[corner
(stack
(square {:fill (p-color 255 0 0 100)})
(poly 0 0 0.9 4 {:fill (p-color 240 100 240)}))
edge
(stack
(square {:fill (p-color 0 0 255)})
(poly 0 0 0.5 8 {:fill (p-color 150 150 255)}))
centre
(poly 0 0 0.9 30 {:fill (p-color 150 255 140)})]
(framed 11 (repeat corner) (repeat edge) centre))
;; use random-turn-groups to make a stream of patterns
;; randomly rotated, and then lay them out in a grid.
(let
[orange (p-color 254 129 64)]
(stack
(square {:fill (p-color 50 80 100)})
(checked-layout
18
(cycle
[(clock-rotate
8
(drunk-line 10 0.1 {:stroke orange, :stroke-weight 1}))
(clock-rotate
5
(drunk-line 10 0.1 {:stroke orange, :stroke-weight 2}))])
(random-turn-groups
(repeat
[(->SShape
{:fill (p-color 230 180 90), :stroke orange}
[[-1 -1] [1 -1] [-1 1]])])))))
(defn a-round
[n style]
(clock-rotate
n (poly 0 0.5 0.4 n style)))
(->
(let
[lc (p-color 220 140 180) fc (p-color 255 190 200 100)]
(grid-layout
4
(iterate (partial scale 0.9) (a-round 9 {:stroke lc :fill fc})
)
)
)
v-reflect
)
; This makes a scroll using Patterning's built in Turtle
; and then reflects that to make a "vase" pattern (when the params are right)
; In this case though we run through a range of params, giving us everything
; from vases to very different scrolls and knots
(def PI 3.14159265358979)
(defn f-left [count]
(cond (= count 1) "F"
:else (str (f-left (- count 1)) "+" (apply str (repeat count "F" )) )) )
(defn f-right [count]
(cond (= count 1 ) "F"
:else (str (apply str (repeat count "F" )) "-" (f-right (- count 1)))))
(defn all [count] (str (f-left count) "-" (f-right (- count 1)) ) )
(defn scroll [[x y] d da number style extras]
(basic-turtle [x y] d 0 da (all number) extras style ))
(defn r-scroll [d da number style extras] (reframe (scroll [0 0] d da number
style extras) ))
(defn vase [d da count style]
(let [scroll (r-scroll d da count style {})]
(stack scroll (v-reflect scroll) )))
(defn fr [count]
( ->
(vase 0.1 0.25 count {:stroke (p-color 0 0 0)})
(#(rotate (/ PI 2) %))
four-round
(#(scale 0.7 %))
))
(grid-layout 5 (map fr (range 5 30 1)))
Backlinks (2 items)