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)))