19
19
20
20
from xled_plus .effect_base import Effect
21
21
from xled_plus .colormeander import ColorMeander
22
- from xled_plus .pattern import blendcolors
22
+ from xled_plus .pattern import blendcolors , dimcolor
23
23
from xled_plus .ledcolor import hsl_color
24
24
import math as m
25
25
@@ -186,13 +186,13 @@ class VaryingAngleSequence(Sequence):
186
186
def initialize (self , maxfold ):
187
187
self .maxfold = maxfold
188
188
if self .dim == 3 :
189
- self .meander = ColorMeander ("sphere" )
189
+ self .mangle = ColorMeander ("sphere" )
190
190
else :
191
- self .meander = ColorMeander ("cylinder" )
191
+ self .mangle = ColorMeander ("cylinder" )
192
192
193
193
def update (self , step ):
194
- self .meander .step ()
195
- (x , y , z ) = self .meander .get_xyz ()
194
+ self .mangle .step ()
195
+ (x , y , z ) = self .mangle .get_xyz ()
196
196
if self .dim == 3 :
197
197
self .vect = (
198
198
x * self .maxfold / 2.0 ,
@@ -219,23 +219,66 @@ def __init__(self, ctr, cols, lens=False, speed=1.0, folds=3.0):
219
219
220
220
221
221
class MeanderingSequence (VaryingAngleSequence ):
222
- def __init__ (self , ctr ):
223
- super (MeanderingSequence , self ).__init__ (ctr , self .getcolor , 0.0 , 0.0 , 0.0 )
222
+ def __init__ (self , ctr , fixangle = False ):
223
+ super (MeanderingSequence , self ).__init__ (ctr , self .getcolor , 0.0 , 1.0 , fixangle )
224
+ self .fixangle = fixangle
224
225
self .initialize (1.0 )
225
226
self .cm = ColorMeander ("sphere" )
226
- self .colvec = [self .cm .get ()] * 100
227
+ self .colvec = [self .cm .get ()] * 200
228
+ self .iter = 1
227
229
self .init_fps (2 )
230
+ self .preferred_frames = 800
228
231
229
232
def reset (self , numframes ):
230
233
self .currpos = 0.5
234
+ if numframes :
235
+ self .mangle .steplen *= 10
236
+ self .mangle .noiselev *= 3
237
+ self .iter = 9
238
+ self .preferred_fps /= 10
231
239
232
240
def update (self , step ):
233
- super (MeanderingSequence , self ).update (step )
234
- self .cm .step ()
235
- self .colvec = [self .cm .get ()] + self .colvec [:- 1 ]
241
+ if self .fixangle is False :
242
+ super (MeanderingSequence , self ).update (step )
243
+ for i in range (self .iter ):
244
+ self .cm .step ()
245
+ self .colvec = [self .cm .get ()] + self .colvec [:- 1 ]
236
246
237
247
def getcolor (self , x ):
238
248
ind = int (x * len (self .colvec ) - 0.5 )
239
249
return self .colvec [min (max (0 , ind ), len (self .colvec )- 1 )]
240
250
241
-
251
+
252
+ class MeanderingTandemSequence (VaryingAngleSequence ):
253
+ def __init__ (self , ctr , gap = False , fixangle = False ):
254
+ super (MeanderingTandemSequence , self ).__init__ (ctr , self .getcolor , 0.0 , 1.0 , fixangle )
255
+ self .initialize (1.0 )
256
+ self .gap = gap
257
+ self .fixangle = fixangle
258
+ self .cm = ColorMeander ("sphere" )
259
+ self .init_fps (2 )
260
+ self .preferred_frames = 800
261
+
262
+ def reset (self , numframes ):
263
+ self .currpos = 0.5
264
+ if numframes :
265
+ self .cm .steplen *= 10
266
+ self .cm .noiselev *= 3
267
+ self .preferred_fps /= 10
268
+
269
+ def update (self , step ):
270
+ if self .fixangle is False :
271
+ super (MeanderingTandemSequence , self ).update (step )
272
+ self .cm .step ()
273
+ (h , s , l ) = self .cm .get_hsl ()
274
+ self .hsl1 = (h , s , l )
275
+ self .hsl2 = ((h + 0.5 ) % 1.0 , s , l )
276
+
277
+ def getcolor (self , x ):
278
+ hsl = self .hsl1 if x < 0.5 else self .hsl2
279
+ fact = min (1.0 , abs (2 * x - 1.0 ) / abs (self .gap )) if self .gap else 1.0
280
+ if self .gap >= 0.0 :
281
+ return hsl_color (hsl [0 ], hsl [1 ]* fact , hsl [2 ])
282
+ else :
283
+ return hsl_color (hsl [0 ], hsl [1 ], hsl [2 ]) if fact == 1.0 else (0 ,0 ,0 )
284
+
0 commit comments