On the train back from the Sheffield codingweaves workshops back in October I wrote a quick browser program to attempt to further understand the relationship between structure and pattern in weaving – which I’ve put online here. This works in the inverse of how we’ve been writing weaving simulation programs so far. Instead of defining the pattern you want directly, you are describing the set up of a 4 shaft loom – so the warp threads that each of 4 shafts pick up in the top row of toggle boxes, then which shafts are picked up for each weft thread as the fabric is woven on the right.
This involved writing a program that is based closely on how a loom functions – for example calculating a shed (the gap between ordered warp thread) by folding over each shaft in turn and or-ing each warp thread to calculate which ones are picked up. This really turns out to be the core of the algorithm – here’s a snippet:
;; 'or's two lists together:
;; (list-or (list 0 1 1 0) (list 0 0 1 1)) =>
;; (list 0 1 1 1)
(define (list-or a b)
(map2
(lambda (a b)
(if (or (not (zero? a)) (not (zero? b)))
1 0))
a b))
;; calculate the shed, given a lift plan
;; position counter.
;; shed is 0/1 for each warp thread: up/down
(define (loom-shed l lift-counter)
(foldl
(lambda (a b)
(list-or a b))
(build-list
(length (car (loom-heddles l)))
(lambda (a) 0))
(loom-heddles-raised l lift-counter)))
I’ve become quite obsessed with this program, spending quite a lot of time with it trying to understand how the loom setup corresponds to the patterns. Here are some example weaves that you can try. Colour wise, in all these examples the order is fixed – both the warp and the weft alternate light/dark yarns.
This is tabby or plain weave – the simplest and strongest weave (used for sails and hard wearing fabric). The striped pattern is a result of this alternating colour order.
Continue reading Dyadic device: a 4 shaft loom simulation.