Changeset - 6d8817152eb3
[Not reviewed]
default
0 2 0
drewp@bigasterisk.com - 9 years ago 2016-06-12 21:03:47
drewp@bigasterisk.com
colorScale effect setting that multiplies all outgoing colors by your note color
Ignore-this: 263e941be8242978b2a7f033e0b3d2f9
2 files changed with 22 insertions and 7 deletions:
0 comments (0 inline, 0 general)
light9/effect/effecteval.py
Show inline comments
 
@@ -28,7 +28,13 @@ def scale(value, strength):
 
    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 @@ class EffectEval(object):
 

	
 
        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 @@ class EffectEval(object):
 
        #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
 
        
 

	
light9/effect/sequencer.py
Show inline comments
 
@@ -38,6 +38,11 @@ class Note(object):
 
        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 @@ class Note(object):
 
        """
 
        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):
0 comments (0 inline, 0 general)