Add dac-emulator complied for OS X from nannou

This commit is contained in:
nrhck 2018-12-28 01:11:43 +01:00
parent b252c6b56e
commit 4c238f51e7
8 changed files with 268 additions and 51 deletions

22
LJ.conf
View File

@ -2,7 +2,7 @@
set = 5
curve = 0
lasernumber = 1
debug = 0
debug = 2
ljayserverip = 127.0.0.1
nozoscip = 127.0.0.1
bhoroscip = 127.0.0.1
@ -11,14 +11,14 @@ bhoroscip = 127.0.0.1
color = -1
ip = 127.0.0.1
kpps = 25000
centerx = -695
centery = -1486
zoomx = 32.2
zoomy = 29.0
centerx = -1610
centery = 0
zoomx = 26.0
zoomy = 38.0
sizex = 31450
sizey = 32000
finangle = 17.0
swapx = -1
finangle = 0.0
swapx = 1
swapy = -1
lsteps = [ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)]
warpdest = [[-1500., 1500.],
@ -30,10 +30,10 @@ warpdest = [[-1500., 1500.],
color = -1
ip = 192.168.1.5
kpps = 25000
centerx = -506
centery = -413
zoomx = 81.5
zoomy = 50.1
centerx = 506
centery = 413
zoomx = 30
zoomy = 30
sizex = 32000
sizey = 32000
finangle = 0.0

209
clients/laserglyph.py Normal file
View File

@ -0,0 +1,209 @@
# coding=UTF-8
'''
Anaglyphed cube
LICENCE : CC
'''
import redis
import framy
import math
import time
# IP defined in /etd/redis/redis.conf
redisIP = '127.0.0.1'
r = redis.StrictRedis(host=redisIP, port=6379, db=0)
width = 800
height = 600
centerX = width / 2
centerY = height / 2
fov = 256
viewer_distance = 2.2
eye_spacing = 100
nadir = 0.5
observer_altitude = 30000
# elevation = z coordinate
# 0.0 or -2000 pop out)
map_plane_altitude = 0.0
vertices = [
(- 1.0, 1.0,- 1.0),
( 1.0, 1.0,- 1.0),
( 1.0,- 1.0,- 1.0),
(- 1.0,- 1.0,- 1.0),
(- 1.0, 1.0, 1.0),
( 1.0, 1.0, 1.0),
( 1.0,- 1.0, 1.0),
(- 1.0,- 1.0, 1.0)
]
# Define the vertices that compose each of the 6 faces. These numbers are
# indices to the vertices list defined above.
#faces = [(0,1,2,3),(1,5,6,2),(5,4,7,6),(4,0,3,7),(0,4,5,1),(3,2,6,7)]
faces = [(0,1,2,3),(1,5,6,2),(5,4,7,6),(4,0,3,7),(0,4,5,1),(3,2,6,7)]
def LeftShift(elevation):
diff = elevation - map_plane_altitude
return nadir * eye_spacing * diff / (observer_altitude - elevation)
def RightShift(elevation):
diff = map_plane_altitude - elevation
return (1 - nadir) * eye_spacing * diff / (observer_altitude - elevation)
# If you want to use rgb for color :
def rgb2int(r,g,b):
return int('0x%02x%02x%02x' % (r,g,b),0)
def Proj(x,y,z,angleX,angleY,angleZ):
rad = angleX * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
y2 = y
y = y2 * cosa - z * sina
z = y2 * sina + z * cosa
rad = angleY * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
z2 = z
z = z2 * cosa - x * sina
x = z2 * sina + x * cosa
rad = angleZ * math.pi / 180
cosa = math.cos(rad)
sina = math.sin(rad)
x2 = x
x = x2 * cosa - y * sina
y = x2 * sina + y * cosa
""" Transforms this 3D point to 2D using a perspective projection. """
factor = fov / (viewer_distance + z)
x = x * factor + centerX
y = - y * factor + centerY
return (x,y)
def Draw3PL():
Shape = []
Left = []
Right = []
counter =0
while 1:
for fa in faces:
#print ""
#print "face",fa
for point in fa:
#print ""
#print "point ", point
x = vertices[point][0]
y = vertices[point][1]
z = vertices[point][2]
#print x,y,z
#print "left",x+LeftShift(z*25),y,z, Proj(x+LeftShift(z*25),y,z)
#print "right",x+RightShift(z*25),y,z, Proj(x+RightShift(z*25),y,z)
Shape.append(Proj(x,y,z,0,0,counter))
Left.append( Proj(x+LeftShift(z*5),y,z,0,0,counter))
Right.append(Proj(x+RightShift(z*5),y,z,0,0,counter))
framy.PolyLineOneColor(Shape, c = white, PL = 0, closed = False)
framy.PolyLineOneColor(Left, c = red, PL = 1, closed = False)
framy.PolyLineOneColor(Right, c = green, PL = 2, closed = False)
'''
framy.rPolyLineOneColor(Shape, c = white, PL = 0, closed = False, xpos = 200, ypos = 250, resize = 1, rotx =0, roty =0 , rotz=0)
framy.rPolyLineOneColor(Left, c = red, PL = 1, closed = False, xpos = 200, ypos = 250, resize = 1, rotx =0, roty =0 , rotz=0)
framy.rPolyLineOneColor(Right, c = blue, PL = 2, closed = False, xpos = 200, ypos = 250, resize = 1, rotx =0, roty =0 , rotz=0)
'''
#print framy.LinesPL(0)
#print framy.LinesPL(1)
#print framy.LinesPL(2)
#counter -= 1
#if counter >360:
# counter =0
def Draw1PL():
Shape = []
Left = []
Right = []
counter =0
while 1:
Shape = []
Left = []
Right = []
for fa in faces:
#print ""
#print "face",fa
for point in fa:
#print ""
#print "point ", point
x = vertices[point][0]
y = vertices[point][1]
z = vertices[point][2]
#print x,y,z
#print "left",x+LeftShift(z*25),y,z, Proj(x+LeftShift(z*25),y,z)
#print "right",x+RightShift(z*25),y,z, Proj(x+RightShift(z*25),y,z)
Shape.append(Proj(x,y,z,0,0,counter))
Left.append( Proj(x+LeftShift(z*25),y,z,0,0,counter))
Right.append(Proj(x+RightShift(z*25),y,z,0,0,counter))
#framy.PolyLineOneColor(Shape, c = white, PL = 0, closed = False)
framy.PolyLineOneColor(Left, c = rgb2int(0,155,0), PL = 0, closed = False)
framy.PolyLineOneColor(Right, c = rgb2int(0,0,155), PL = 0, closed = False)
'''
framy.rPolyLineOneColor(Shape, c = white, PL = 0, closed = False, xpos = 200, ypos = 250, resize = 1, rotx =0, roty =0 , rotz=0)
framy.rPolyLineOneColor(Left, c = red, PL = 1, closed = False, xpos = 200, ypos = 250, resize = 1, rotx =0, roty =0 , rotz=0)
framy.rPolyLineOneColor(Right, c = blue, PL = 2, closed = False, xpos = 200, ypos = 250, resize = 1, rotx =0, roty =0 , rotz=0)
'''
framy.LinesPL(0)
time.sleep(0.1)
counter -= 1
if counter >360:
counter =0
white = rgb2int(255,255,255)
red = rgb2int(255,0,0)
blue = rgb2int(0,0,255)
green = rgb2int(0,255,0)
Draw1PL()
#r.set('/pl/0/0', str(pl0))
# S = (e / 2) (d - p) / (a - d)
'''
# /pl/clientnumber/lasernumber pointlist
# Consider you're client 0
# Send to laser 0 (see mainy.conf)
r.set('/pl/0/0', str(pl0))
# Send to laser 1 (see mainy.conf)
r.set('/pl/0/1', str(pl1))
# Send to laser 2 (see mainy.conf)
r.set('/pl/0/2', str(pl1))
'''

View File

@ -38,10 +38,10 @@ function GenPoints()
{
var pt = {};
// direct colors, i.e red
// direct colors, i.e white
pt.r = 255;
pt.g = 0;
pt.b = 0;
pt.g = 255;
pt.b = 255;
// named colors
var white = rgb2int(255, 255, 255);

View File

@ -15,7 +15,7 @@ r = redis.StrictRedis(host=redisIP, port=6379, db=0)
# (x,y,color in integer) 65280 is color #00FF00
# Green rectangular shape :
pl0 = [(100,300,65280),(200,300,65280),(200,200,65280),(100,200,65280)]
pl0 = [(100,300,65280),(200,300,65280),(200,200,65280),(100,200,65280),(100,300,65280)]
# If you want to use rgb for color :
@ -23,7 +23,7 @@ def rgb2int(r,g,b):
return int('0x%02x%02x%02x' % (r,g,b),0)
# White rectangular shape
pl1 = [(100,300,rgb2int(255,255,255)),(200,300,rgb2int(255,255,255)),(200,200,rgb2int(255,255,255)),(100,200,rgb2int(255,255,255))]
pl1 = [(100,300,rgb2int(255,255,255)),(200,300,rgb2int(255,255,255)),(200,200,rgb2int(255,255,255)),(100,200,rgb2int(255,255,255)),(100,300,rgb2int(255,255,255))]
# /pl/clientnumber/lasernumber pointlist

View File

@ -14,11 +14,8 @@ from /team/laser
import types, time
import gstt
#import colorify
import homographyp
import settings
#import alignp
import redis
@ -30,11 +27,6 @@ def UserOn(laser):
print "User for laser ", laser
r.set('/order/'+str(laser), 0)
# Laser bit 0 = 0 and bit 1 = 0 : USER PL
#order = r.get('/order')
#neworder = order & ~(1<< laser*2)
#neworder = neworder & ~(1<< 1+ laser*2)
#r.set('/order', str(neworder))
def NewEDH(laser):
@ -45,33 +37,17 @@ def NewEDH(laser):
print "Settings saving swapY ", gstt.swapY[laser]
homographyp.newEDH(laser)
#r.set('/order/'+str(laser), 1)
# Laser bit 0 = 0 and bit 1 = 1 : New EDH
#order = r.get('/order')
#neworder = order & ~(1<< laser*2)
#neworder = neworder | (1<< 1+laser*2)
#r.set('/order', str(neworder))
def BlackOn(laser):
print "Black for laser ", laser
r.set('/order/'+str(laser), 2)
# Black PL is Laser bit 0 = 1 and bit 1 = 0 :
#order = r.get('/order')
#neworder = order | (1<<laser*2)
#neworder = neworder & ~(1<< 1+laser*2)
def GridOn(laser):
print "Grid for laser ", laser
r.set('/order/'+str(laser), 3)
# Grid PL is Laser bit 0 = 1 and bit 1 = 1
#order = r.get('/order')
#neworder = order | (1<<laser*2)
#neworder = neworder | (1<< 1+laser*2)
#r.set('/order', str(neworder))
def Resampler(laser,lsteps):
@ -115,7 +91,6 @@ def NoteOn(note):
def handler(oscpath, args):
print ""
@ -244,15 +219,17 @@ def handler(oscpath, args):
# /scale/X/lasernumber value
if oscpath[1] == "scale" and oscpath[2] == "X":
print "scale/X laser", laser , "modified to", args[0]
gstt.zoomX[laser] += int(args[0])
NewEDH(laser)
if gstt.zoomX[laser] + int(args[0]) > 0:
gstt.zoomX[laser] += int(args[0])
print "scale/X laser", laser , "modified to", gstt.zoomX[laser]
NewEDH(laser)
# /scale/Y/lasernumber value
if oscpath[1] == "scale" and oscpath[2] == "Y":
print "scale/Y laser", laser, "modified to", args[0]
gstt.zoomY[laser] += int(args[0])
NewEDH(laser)
if gstt.zoomY[laser] + int(args[0]) > 0:
gstt.zoomY[laser] += int(args[0])
print "scale/Y laser", laser, "modified to", gstt.zoomY[laser]
NewEDH(laser)
'''
For reference values of EDH modifier if assign to keyboard keys (was alignp)
@ -279,4 +256,30 @@ For reference values of EDH modifier if assign to keyboard keys (was alignp)
gstt.finANGLE[gstt.Laser] -= 0.001
gstt.finANGLE[gstt.Laser] += 0.001
Code for bit analysis 2 bits / laser to encode order.
# Grid PL is Laser bit 0 = 1 and bit 1 = 1
#order = r.get('/order')
#neworder = order | (1<<laser*2)
#neworder = neworder | (1<< 1+laser*2)
#r.set('/order', str(neworder))
# Laser bit 0 = 0 and bit 1 = 0 : USER PL
#order = r.get('/order')
#neworder = order & ~(1<< laser*2)
#neworder = neworder & ~(1<< 1+ laser*2)
#r.set('/order', str(neworder))
# Laser bit 0 = 0 and bit 1 = 1 : New EDH
#order = r.get('/order')
#neworder = order & ~(1<< laser*2)
#neworder = neworder | (1<< 1+laser*2)
#r.set('/order', str(neworder))
# Black PL is Laser bit 0 = 1 and bit 1 = 0 :
#order = r.get('/order')
#neworder = order | (1<<laser*2)
#neworder = neworder & ~(1<< 1+laser*2)
'''

View File

@ -197,7 +197,7 @@ def osc_thread():
try:
while True:
time.sleep(0.5)
time.sleep(1)
osc_frame()
for laserid in range(0,gstt.LaserNumber): # Laser not used -> led is not lit
@ -381,6 +381,11 @@ try:
server.set_fn_new_client(new_client)
server.set_fn_client_left(client_left)
server.set_fn_message_received(message_received)
print ""
print "Resetting all Homographies.."
for laserid in range(0,gstt.LaserNumber):
homographyp.newEDH(laserid)
print ""
print "ws server running forver..."
server.run_forever()

View File

@ -346,12 +346,12 @@ class DAC(object):
order = int(r.get('/order/'+str(self.mylaser)))
#print "laser", self.mylaser, "order : ",type(order)
#print "laser", self.mylaser, "order : ",order
if order == 0:
# USER point list
self.pl = ast.literal_eval(r.get(self.clientkey+str(self.mylaser)))
#print "laser", self.mylaser, "pl : ",length(self.pl)
#print "laser", self.mylaser, " order 0 : pl : ",len(self.pl)
else:
@ -376,7 +376,7 @@ class DAC(object):
# Resampler Change
if order == 4:
self.resampler = ast.literal_eval(r.get('/resampler/'+str(self.mylaser)))
print "newdacp resetting lsteps for", self.mylaser, ":",self.resampler
print "tracer resetting lsteps for", self.mylaser, ":",self.resampler
gstt.stepshortline = self.resampler[0]
gstt.stepslongline[0] = self.resampler[1]
gstt.stepslongline[1] = self.resampler[2]

BIN
visualiserdarwin Executable file

Binary file not shown.