aboutsummaryrefslogtreecommitdiff
path: root/guile/starlet/fixture-library/robe/dl7s.scm
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2022-11-12 11:13:53 +0100
committerThomas White <taw@physics.org>2022-11-12 11:37:03 +0100
commit5a02170f9e1952cd335b6b097e8ce33de7bb35b1 (patch)
treeca21feda4181e444e10e11ce863cc017c69461e7 /guile/starlet/fixture-library/robe/dl7s.scm
parentf99311300912814ccaf4fdd6b3c753d1206e024c (diff)
Introduce new type for attribute names
There's a serious problem with the design so far, where symbols are used for attribute names (intensity, strobe, colour etc), and also for attribute values (on, off, random etc). There's no way for 'at' to tell the difference between the two. For example, this form is ambiguous: (at myfixture 'strobe 'on) This commit introduces a new class, <starlet-attribute>, to replace the use of symbols here. The attributes are enumerated in (starlet attributes), and new ones can be added later. The attribute objects remember their 'canonical' names, to allow states to be printed. Apart from solving the ambiguity problem, this has two further advantages. First, attribute names no longer need to be quoted everywhere. Second, multiple names can be used to refer to the same attribute. For example: (define color colour).
Diffstat (limited to 'guile/starlet/fixture-library/robe/dl7s.scm')
-rw-r--r--guile/starlet/fixture-library/robe/dl7s.scm29
1 files changed, 15 insertions, 14 deletions
diff --git a/guile/starlet/fixture-library/robe/dl7s.scm b/guile/starlet/fixture-library/robe/dl7s.scm
index f64de19..c733731 100644
--- a/guile/starlet/fixture-library/robe/dl7s.scm
+++ b/guile/starlet/fixture-library/robe/dl7s.scm
@@ -21,6 +21,7 @@
(define-module (starlet fixture-library robe dl7s)
#:use-module (oop goops)
#:use-module (starlet fixture)
+ #:use-module (starlet attributes)
#:use-module (starlet colours)
#:export (<robe-dl7s-mode1>))
@@ -30,31 +31,31 @@
<robe-dl7s-mode1>
(fixture-attributes
- (attr-continuous 'intensity '(0 100) 0)
- (attr-continuous 'pan '(0 540) 270)
- (attr-continuous 'tilt '(0 270) 135)
- (attr-list 'strobe '(#t #f) #f)
- (attr-list 'prism '(#t #f) #f)
- (attr-colour 'colour white)
- (attr-continuous 'colour-temperature '(2700 8000) 3200))
+ (attr-continuous intensity '(0 100) 0)
+ (attr-continuous pan '(0 540) 270)
+ (attr-continuous tilt '(0 270) 135)
+ (attr-list strobe '(#t #f) #f)
+ (attr-list prism '(#t #f) #f)
+ (attr-colour colour white)
+ (attr-continuous colour-temperature '(2700 8000) 3200))
- (set-chan16 50 (percent->dmxval16 (get-attr 'intensity)))
+ (set-chan16 50 (percent->dmxval16 (get-attr intensity)))
- (set-chan16 1 (scale-to-range (get-attr 'pan) '(0 540) '(0 65535)))
- (set-chan16 3 (scale-to-range (get-attr 'tilt) (0 270) '(0 65535)))
+ (set-chan16 1 (scale-to-range (get-attr pan) '(0 540) '(0 65535)))
+ (set-chan16 3 (scale-to-range (get-attr tilt) (0 270) '(0 65535)))
- (set-chan8 49 (if (get-attr 'strobe) 95 32))
+ (set-chan8 49 (if (get-attr strobe) 95 32))
- (set-chan8 28 (if (get-attr 'prism) 50 0))
+ (set-chan8 28 (if (get-attr prism) 50 0))
(set-chan8 6 0) ;; Power/special function: default
(set-chan8 7 0) ;; Colour mode: default
(set-chan8 15
- (scale-and-clamp-to-range (get-attr 'colour-temperature)
+ (scale-and-clamp-to-range (get-attr colour-temperature)
'(8000 2700) '(0 255)))
- (let ((cmy (colour-as-cmy (get-attr 'colour))))
+ (let ((cmy (colour-as-cmy (get-attr colour))))
(set-chan16 9 (percent->dmxval16 (car cmy)))
(set-chan16 11 (percent->dmxval16 (cadr cmy)))
(set-chan16 13 (percent->dmxval16 (caddr cmy)))))