Mercurial > code > home > repos > light9
changeset 1476:6d8817152eb3
colorScale effect setting that multiplies all outgoing colors by your note color
Ignore-this: 263e941be8242978b2a7f033e0b3d2f9
author | drewp@bigasterisk.com |
---|---|
date | Sun, 12 Jun 2016 21:03:47 +0000 |
parents | a749079ec774 |
children | a6f1b8368f09 |
files | light9/effect/effecteval.py light9/effect/sequencer.py |
diffstat | 2 files changed, 22 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/light9/effect/effecteval.py Sun Jun 12 21:01:20 2016 +0000 +++ b/light9/effect/effecteval.py Sun Jun 12 21:03:47 2016 +0000 @@ -28,7 +28,13 @@ if isinstance(value, basestring): if value[0] == '#': r,g,b = hex_to_rgb(value) - return rgb_to_hex([r * strength, g * strength, b * strength]) + if isinstance(strength, Literal): + strength = strength.toPython() + if isinstance(strength, basestring): + sr, sg, sb = [v/255 for v in hex_to_rgb(strength)] + else: + sr = sg = sb = strength + return rgb_to_hex([int(r * sr), int(g * sg), int(b * sb)]) elif isinstance(value, (int, float)): return value * strength else: @@ -81,7 +87,8 @@ out = {} # (dev, attr): value - out.update(self.simpleOutput(strength)) + out.update(self.simpleOutput(strength, + effectSettings.get(L9['colorScale'], None))) if self.effect.startswith(L9['effect/']): tail = 'effect_' + self.effect[len(L9['effect/']):] @@ -98,12 +105,14 @@ #import pprint; pprint.pprint(outList, width=170) return outList - def simpleOutput(self, strength): + def simpleOutput(self, strength, colorScale): out = {} - for dev, attr, value, isScaled in self.effectOutputs.get(self.effect, []): + for dev, devAttr, value, isScaled in self.effectOutputs.get(self.effect, []): if isScaled: value = scale(value, strength) - out[(dev, attr)] = value + if colorScale is not None and devAttr == L9['color']: + value = scale(value, colorScale) + out[(dev, devAttr)] = value return out
--- a/light9/effect/sequencer.py Sun Jun 12 21:01:20 2016 +0000 +++ b/light9/effect/sequencer.py Sun Jun 12 21:03:47 2016 +0000 @@ -38,6 +38,11 @@ self.uri = uri self.effectEval = effectevalModule.EffectEval( graph, g.value(uri, L9['effectClass'])) + self.baseEffectSettings = {} # {effectAttr: value} + for s in g.objects(uri, L9['setting']): + ea = g.value(s, L9['effectAttr']) + self.baseEffectSettings[ea] = g.value(s, L9['value']) + floatVal = lambda s, p: float(g.value(s, p).toPython()) originTime = floatVal(uri, L9['originTime']) self.points = [] @@ -72,8 +77,9 @@ """ list of (device, attr, value) """ - effectSettings = [(L9['strength'], self.evalCurve(t))] - return self.effectEval.outputFromEffect(effectSettings, t) + effectSettings = self.baseEffectSettings.copy() + effectSettings[L9['strength']] = self.evalCurve(t) + return self.effectEval.outputFromEffect(effectSettings.items(), t) class CodeWatcher(object):