fix: the onepoint iterator should work

This commit is contained in:
alban 2023-02-25 15:29:37 +01:00
parent f67e7992ba
commit 80c76bfeb1
3 changed files with 66 additions and 76 deletions

View File

@ -1,6 +1,7 @@
import ast import ast
import math import math
import struct import struct
import sys
import time import time
import numpy as np import numpy as np
@ -93,57 +94,52 @@ class Status(object):
for l in lines: for l in lines:
print(prefix + l) print(prefix + l)
class OnePointIterator( ):
def __init__(self, ref): def OnePointIterator(pl):
self.ref = ref while True:
for indexpoint, currentpoint in enumerate(pl):
print("cp", indexpoint, currentpoint)
yield currentpoint[0], currentpoint[1], 255, 255, 255
continue
for indexpoint, currentpoint in enumerate(pl):
def __iter__(self): # We modify the point geometry according to warp settings
return self # print indexpoint, currentpoint
# xyc = [currentpoint[0], currentpoint[1], currentpoint[2]]
# ref.xyrgb = ref.get_warped_point(xyc)
x, y = ref.get_warped_point(currentpoint[0], currentpoint[1])
r, g, b = ref.int_to_rgb(currentpoint[2])
def __next__(self): # We modify the point color based on channel specific r,g,b intensity settings
rgb = (round(r * ref.intred / 100), round(g * ref.intgreen / 100),
round(b * ref.intblue / 100))
while True: # We compute the delta with previous position
delta_x, delta_y = x - ref.prev_x, y - ref.prev_y
# pdb.set_trace() # We compute the distance from previous postion
for indexpoint, currentpoint in enumerate(self.ref.pl): if math.hypot(delta_x, delta_y) < 4000:
# For glitch art : decrease lsteps
# l_steps = [ (1.0, 8)]
l_steps = gstt.stepshortline
else:
# For glitch art : decrease lsteps
# l_steps = [ (0.25, 3), (0.75, 3), (1.0, 10)]
l_steps = gstt.stepslongline
# We modify the point geometry according to warp settings # We add intermediate points based on settings
# print indexpoint, currentpoint for e in l_steps:
# xyc = [currentpoint[0], currentpoint[1], currentpoint[2]] step = e[0]
# self.ref.xyrgb = self.ref.get_warped_point(xyc)
x, y = self.ref.get_warped_point(currentpoint[0], currentpoint[1])
r, g, b = self.ref.int_to_rgb(currentpoint[2])
# We modify the point color based on channel specific r,g,b intensity settings for i in range(0, e[1]):
rgb = (round(r * self.ref.intred / 100), round(g * self.ref.intgreen / 100), ref.xyrgb_step = (ref.prev_x + step * delta_x,
round(b * self.ref.intblue / 100)) ref.prev_y + step * delta_y) + rgb # + ref.xyrgb_prev[2:]# + rgb
# print(ref.xyrgb_step)
yield ref.xyrgb_step
# We compute the delta with previous position ref.prev_x, ref.prev_y = x, y
delta_x, delta_y = x - self.ref.prev_x, y -self.ref.prev_y ref.xyrgb_prev = [x, y]
# We compute the distance from previous postion
if math.hypot(delta_x, delta_y) < 4000:
# For glitch art : decrease lsteps
# l_steps = [ (1.0, 8)]
l_steps = gstt.stepshortline
else:
# For glitch art : decrease lsteps
# l_steps = [ (0.25, 3), (0.75, 3), (1.0, 10)]
l_steps = gstt.stepslongline
# We add intermediate points based on settings
for e in l_steps:
step = e[0]
for i in range(0, e[1]):
self.ref.xyrgb_step = (self.ref.prev_x + step * delta_x,
self.ref.prev_y + step * delta_y) + rgb # + self.ref.xyrgb_prev[2:]# + rgb
# print(self.ref.xyrgb_step)
yield self.ref.xyrgb_step
self.ref.prev_x, self.ref.prev_y = x, y
self.ref.xyrgb_prev = [x, y]
class Tracer(object): class Tracer(object):
"""A connection to a DAC.""" """A connection to a DAC."""
@ -152,6 +148,8 @@ class Tracer(object):
point_list_number: list point_list_number: list
pl: list pl: list
client_key: str # /pl/<laser_id> by default client_key: str # /pl/<laser_id> by default
prev_x = 0
prev_y = 0
black_points = [(278.0, 225.0, 0), (562.0, 279.0, 0), (401.0, 375.0, 0), (296.0, 454.0, 0), (298.0, 165.0, 0)] black_points = [(278.0, 225.0, 0), (562.0, 279.0, 0), (401.0, 375.0, 0), (296.0, 454.0, 0), (298.0, 165.0, 0)]
grid_points = [(300.0, 200.0, 0), (500.0, 200.0, 65280), (500.0, 400.0, 65280), (300.0, 400.0, 65280), grid_points = [(300.0, 200.0, 0), (500.0, 200.0, 65280), (500.0, 400.0, 65280), (300.0, 400.0, 65280),
@ -177,7 +175,7 @@ class Tracer(object):
def set_status(self, status: int): def set_status(self, status: int):
raise Exception("Please override the method") raise Exception("Please override the method")
def get_warped_point(self, x, y ): def get_warped_point(self, x, y):
""" """
A DAC specific point model, ex EtherPoint or HeliosPoint A DAC specific point model, ex EtherPoint or HeliosPoint
:param xyc: x,y,color :param xyc: x,y,color
@ -191,9 +189,6 @@ class Tracer(object):
# def set_ack_status(self, ack_status: int): # def set_ack_status(self, ack_status: int):
# raise Exception("Please override the method") # raise Exception("Please override the method")
def prepare(self): def prepare(self):
raise Exception("Please override the method") raise Exception("Please override the method")
@ -254,6 +249,8 @@ class Tracer(object):
# @todo si la clef est vide utiliser les points noirs ? -> syntax error -> black points. # @todo si la clef est vide utiliser les points noirs ? -> syntax error -> black points.
try: try:
self.pl = ast.literal_eval(self.redis.get(self.clientkey + str(self.laser_id)).decode('ascii')) self.pl = ast.literal_eval(self.redis.get(self.clientkey + str(self.laser_id)).decode('ascii'))
# print(self.clientkey + str(self.laser_id))
# print(self.pl)
except SyntaxError: except SyntaxError:
print("BAD POINTLIST on Tracer : laser", self.laser_id, " order 0 : pl : ", self.pl) print("BAD POINTLIST on Tracer : laser", self.laser_id, " order 0 : pl : ", self.pl)
@ -284,7 +281,8 @@ class Tracer(object):
if order == 4: if order == 4:
""" 4: Resampler Change, modify the automatic intermediary points settings """ """ 4: Resampler Change, modify the automatic intermediary points settings """
self.resampler = ast.literal_eval(self.redis.get('/resampler/' + str(self.laser_id)).decode('ascii')) self.resampler = ast.literal_eval(
self.redis.get('/resampler/' + str(self.laser_id)).decode('ascii'))
print("Tracer", self.laser_id, " : resetting lsteps for", self.resampler) print("Tracer", self.laser_id, " : resetting lsteps for", self.resampler)
gstt.stepshortline = self.resampler[0] gstt.stepshortline = self.resampler[0]
gstt.stepslongline[0] = self.resampler[1] gstt.stepslongline[0] = self.resampler[1]
@ -329,8 +327,9 @@ class Tracer(object):
# pdb.set_trace() # pdb.set_trace()
# How much room? # How much room?
capacity = self.get_points_capacity() capacity = self.get_points_capacity()
iterator = iter(OnePointIterator(self.pl))
self.redis.set('/cap/' + str(self.laser_id), capacity) self.redis.set('/cap/' + str(self.laser_id), capacity)
iterator = OnePointIterator(self)
points = [next(iterator) for i in range(capacity)] points = [next(iterator) for i in range(capacity)]
self.write(points) self.write(points)
if not started: if not started:

View File

@ -33,7 +33,7 @@ class TracerHelios(Tracer):
self.redis = redis self.redis = redis
self.laser_id = laser_id self.laser_id = laser_id
self.PL = PL self.PL = PL
self.pl = [[0, 0, 0]] self.pl = [[0,0,0]]
self.clientkey = self.redis.get("/clientkey").decode('ascii') self.clientkey = self.redis.get("/clientkey").decode('ascii')
self.xyrgb = self.xyrgb_prev = (0, 0, 0, 0, 0) self.xyrgb = self.xyrgb_prev = (0, 0, 0, 0, 0)
self.intensity = 65280 self.intensity = 65280
@ -50,7 +50,7 @@ class TracerHelios(Tracer):
pass pass
def get_points_capacity(self): def get_points_capacity(self):
return 1000 return 10
# def GetPoints(self, capacity): # def GetPoints(self, capacity):
# a = [2,3] # a = [2,3]
@ -92,16 +92,7 @@ class TracerHelios(Tracer):
# print("hello got {} points".format(len(points))) # print("hello got {} points".format(len(points)))
points = [point for point in points] points = [point for point in points]
for i, point in enumerate(points): for i, point in enumerate(points):
a = 0 x, y, r, g, b = point
# @todo why are there 2 tuples in the object ???
for one_point in point:
x, y, r, g, b = one_point
# x = random.randrange(1500,2500)
# y = random.randrange(1500,2500)
# r = 255
# g = 255
# b = 255
break
print(x,y,r,g,b) print(x,y,r,g,b)
frame[i] = HeliosPoint(int(x), int(y), int(r), int(g), int(b), 255) frame[i] = HeliosPoint(int(x), int(y), int(r), int(g), int(b), 255)
statusAttempts = 0 statusAttempts = 0

32
main.py
View File

@ -80,28 +80,28 @@ def dac_process(number, pl, dac_family):
from libs3 import gstt from libs3 import gstt
print("Starting dac process", number) print("Starting dac process", number)
try:
d = tracer.DAC(number, pl, dac_family=dac_family)
while True: while True:
try:
d = tracer.DAC(number, pl, dac_family=dac_family)
d.play_stream() d.play_stream()
except Exception as e: except Exception as e:
import sys import sys
import traceback import traceback
if gstt.debug > 0: if gstt.debug > 0:
# if True: # if True:
log.err('\n---------------------') log.err('\n---------------------')
log.err('Exception: %s' % e) log.err('Exception: %s' % e)
log.err('- - - - - - - - - - -') log.err('- - - - - - - - - - -')
traceback.print_tb(sys.exc_info()[2]) traceback.print_tb(sys.exc_info()[2])
print("\n") print("\n")
pass pass
except KeyboardInterrupt: except KeyboardInterrupt:
sys.exit(0) sys.exit(0)
# #