summaryrefslogtreecommitdiff
path: root/ipl/gpacks/weaving/drawup.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/gpacks/weaving/drawup.icn')
-rw-r--r--ipl/gpacks/weaving/drawup.icn119
1 files changed, 119 insertions, 0 deletions
diff --git a/ipl/gpacks/weaving/drawup.icn b/ipl/gpacks/weaving/drawup.icn
new file mode 100644
index 0000000..b8a3125
--- /dev/null
+++ b/ipl/gpacks/weaving/drawup.icn
@@ -0,0 +1,119 @@
+############################################################################
+#
+# File: drawup.icn
+#
+# Subject: Program to analyze weaving
+#
+# Author: Ralph E. Griswold
+#
+# Date: June 19, 1999
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# This program produces a PFD from a GIF. The number of shafts and
+# treadles needed may exceed the capability of this representation.
+#
+# Options supported:
+#
+# -x i x coordinate of upper-left corner to be analyzed; default 0
+# -y i y coordinate of upper-left corner to be analyzed; default 0
+# -w i width of area to be analyzed; default entire width
+# -h i height of area to be analyzed; default entire height
+#
+############################################################################
+#
+# Requires: Version 9 graphics
+#
+############################################################################
+#
+# Links: gpxop, imrutils, options, tables, weavutil, wopen
+#
+############################################################################
+
+link gpxop
+link imrutils
+link options
+link tables
+link weavutil
+link wopen
+
+record analysis(rows, sequence, patterns)
+
+procedure main(args)
+ local imr, threading, treadling, rows, tie, patterns, pattern, i
+ local symbols, symbol, opts, x, y, w, h
+
+ opts := options(args, "x+y+w+h+")
+
+ WOpen("image=" || args[1], "canvas=hidden") | stop("*** cannot open image")
+
+ x := \opts["x"] | 0
+ y := \opts["y"] | 0
+ w := \opts["w"] | WAttrib("width") - x
+ h := \opts["h"] | WAttrib("height") - y
+
+ imr := imstoimr(Capture("g2", x, y, w, h))
+
+ treadling := analyze(imr)
+ imr := imrrot90cw(imr)
+ threading := analyze(imr)
+
+ write(args[1], "-drawup")
+ write(threading.sequence)
+ write(treadling.sequence)
+ write(repl("1", *threading.sequence)) # black warp threads
+ write(repl("2", *treadling.sequence)) # white weft threads
+ write("g2") # palette
+ write("01") # color keys
+ write(*threading.rows) # shafts
+ write(*treadling.rows) # treadles
+
+ patterns := treadling.patterns
+ rows := treadling.rows
+
+ symbols := table('')
+
+ every pattern := !patterns do {
+ symbol := rows[pattern]
+ symbols[symbol] := repl("1", *threading.rows)
+ pattern ? {
+ every i := upto('1') do
+ symbols[symbol][sympos(threading.sequence[i])] := "0"
+ }
+ }
+
+ symbols := sort(symbols, 3)
+ tie := ""
+ while get(symbols) do
+ tie ||:= get(symbols)
+ write(tie2pat(*threading.rows, *treadling.rows, tie))
+
+end
+
+procedure analyze(imr)
+ local pattern, rows, row, count, patterns
+
+ pattern := ""
+ patterns := []
+
+ rows := table()
+
+ count := 0
+
+ imr.pixels ? {
+ while row := move(imr.width) do {
+ if /rows[row] then {
+ rows[row] := possym(count +:= 1) | stop("*** out of symbols")
+ put(patterns, row)
+ }
+ pattern ||:= rows[row]
+ }
+ }
+
+ return analysis(rows, pattern, patterns)
+
+end