webui bugfixes
@ -105,7 +105,7 @@ def rPolyLineOneColor(xy_list, c, PL , closed, xpos = 0, ypos =0, resize =0.7, r
|
|||||||
# 0: point list / 1: Grid
|
# 0: point list / 1: Grid
|
||||||
def LinesPL(PL):
|
def LinesPL(PL):
|
||||||
|
|
||||||
if r.set('/pl/'+str(PL), str(pl[PL])) == True:
|
if r.set('/pl/0/'+str(PL), str(pl[PL])) == True:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
@ -83,8 +83,8 @@ console.log(pl0);
|
|||||||
console.log(pl1);
|
console.log(pl1);
|
||||||
|
|
||||||
// Send points lists to redis server
|
// Send points lists to redis server
|
||||||
client.set("/pl/0",pl0);
|
client.set("/pl/0/0",pl0);
|
||||||
client.set("/pl/1",pl1);
|
client.set("/pl/0/1",pl1);
|
||||||
|
|
||||||
// Quit
|
// Quit
|
||||||
client.quit()
|
client.quit()
|
||||||
|
@ -26,12 +26,12 @@ def rgb2int(r,g,b):
|
|||||||
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))]
|
||||||
|
|
||||||
# Send to laser 0 (see mainy.conf)
|
# Send to laser 0 (see mainy.conf)
|
||||||
r.set('/pl/0', str(pl0))
|
r.set('/pl/0/0', str(pl0))
|
||||||
|
|
||||||
# Send to laser 1 (see mainy.conf)
|
# Send to laser 1 (see mainy.conf)
|
||||||
r.set('/pl/1', str(pl1))
|
r.set('/pl/0/1', str(pl1))
|
||||||
|
# Send to laser 2 (see mainy.conf)
|
||||||
r.set('/pl/2', str(pl1))
|
r.set('/pl/0/2', str(pl1))
|
||||||
|
|
||||||
'''
|
'''
|
||||||
You can also use PolyLineOneColor or rPolylineOneColor to stack n point lists to build a "frame"
|
You can also use PolyLineOneColor or rPolylineOneColor to stack n point lists to build a "frame"
|
||||||
|
119
font1.py
Executable file
@ -0,0 +1,119 @@
|
|||||||
|
# coding=UTF-8
|
||||||
|
"""
|
||||||
|
|
||||||
|
LJ Font 1
|
||||||
|
v0.7.0
|
||||||
|
|
||||||
|
|
||||||
|
LICENCE : CC
|
||||||
|
by Sam Neurohack
|
||||||
|
from /team/laser
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
import gstt
|
||||||
|
|
||||||
|
def DigitsDots(number,color):
|
||||||
|
dots =[]
|
||||||
|
#print ASCII_GRAPHICS[ord(char) - 48]
|
||||||
|
for dot in ASCII_GRAPHICS[number]:
|
||||||
|
#print dot
|
||||||
|
dots.append((gstt.xy_center[0]+dot[0],gstt.xy_center[1]+dot[1],color))
|
||||||
|
#self.point_list.append((xy + (c,)))
|
||||||
|
return dots
|
||||||
|
|
||||||
|
ASCII_GRAPHICS = [
|
||||||
|
|
||||||
|
#implementé
|
||||||
|
|
||||||
|
[(-50,30), (-30,-30), (30,-30), (10,30), (-50,30)], #0
|
||||||
|
[(-20,30), (0,-30), (-20,30)], #1
|
||||||
|
[(-30,-10), (0,-30), (30,-10), (30,0), (-30,30), (30,30)], #2
|
||||||
|
[(-30,-30), (0,-30), (30,-10), (0,0), (30,10), (0,30), (-30,30)], #3
|
||||||
|
[(30,10), (-30,10), (0,-30), (0,30)], #4
|
||||||
|
[(30,-30), (-30,-30), (-30,0), (0,0), (30,10), (0,30), (-30,30)], #5
|
||||||
|
[(30,-30), (0,-30), (-30,-10), (-30,30), (0,30), (30,10), (30,0), (-30,0)], #6
|
||||||
|
[(-30,-30), (30,-30), (-30,30)], #7
|
||||||
|
[(-30,30), (-30,-30), (30,-30), (30,30), (-30,30), (-30,0), (30,0)], #8
|
||||||
|
[(30,0), (-30,0), (-30,-10), (0,-30), (30,-30), (30,10), (0,30), (-30,30)], #9
|
||||||
|
|
||||||
|
# A implementer
|
||||||
|
[(-30,10), (30,-10), (30,10), (0,30), (-30,10), (-30,-10), (0,-30), (30,-10)], #:
|
||||||
|
[(-30,-10), (0,-30), (0,30)], [(-30,30), (30,30)], #;
|
||||||
|
[(-30,-10), (0,-30), (30,-10), (30,0), (-30,30), (30,30)], #<
|
||||||
|
[(-30,-30), (0,-30), (30,-10), (0,0), (30,10), (0,30), (-30,30)], #=
|
||||||
|
[(30,10), (-30,10), (0,-30), (0,30)], #>
|
||||||
|
[(30,-30), (-30,-30), (-30,0), (0,0), (30,10), (0,30), (-30,30)], #?
|
||||||
|
[(30,-30), (0,-30), (-30,-10), (-30,30), (0,30), (30,10), (30,0), (-30,0)], #@
|
||||||
|
|
||||||
|
# Implementé
|
||||||
|
|
||||||
|
|
||||||
|
[(-30,30), (-30,-30), (30,-30), (30,30), (30,0), (-30,0)], #A
|
||||||
|
[(-30,30), (-30,-30), (30,-30), (30,30), (30,0), (-30,0)], #A
|
||||||
|
[(-30,30), (-30,-30), (30,-30), (30,30), (-30,30), (-30,0), (30,0)], #B
|
||||||
|
[(30,30), (-30,30), (-30,-30), (30,-30)], #C
|
||||||
|
[(-30,30), (-30,-30), (30,-30), (30,30), (-30,30)], #D
|
||||||
|
[(30,30), (-30,30), (-30,-0), (30,0), (-30,0), (-30,-30), (30,-30)], #E
|
||||||
|
[(-30,30), (-30,-0), (30,0), (-30,0), (-30,-30), (30,-30)], #F
|
||||||
|
[(0,0), (30,0), (30,30), (-30,30), (-30,-30),(30,-30)], #G
|
||||||
|
[(-30,-30), (-30,30), (-30,0), (30,0), (30,30), (30,-30)], #H
|
||||||
|
[(0,30), (0,-30)], #I
|
||||||
|
[(-30,30), (0,-30), (0,-30), (-30,-30), (30,-30)], #J
|
||||||
|
[(-30,-30), (-30,30), (-30,0), (30,-30), (-30,0), (30,30)], #K
|
||||||
|
[(30,30), (-30,30), (-30,-30)], #L
|
||||||
|
[(-30,30), (-30,-30), (0,0), (30,-30), (30,30)], #M
|
||||||
|
[(-30,30), (-30,-30), (30,30), (30,-30)], #N
|
||||||
|
[(-30,30), (-30,-30), (30,-30), (30,30), (-30,30)], #O
|
||||||
|
[(-30,0), (30,0), (30,-30), (-30,-30), (-30,30)], #P
|
||||||
|
[(30,30), (30,-30), (-30,-30), (-30,30), (30,30),(35,35)], #Q
|
||||||
|
[(-30,30), (-30,-30), (30,-30), (30,0), (-30,0), (30,30)], #R
|
||||||
|
[(30,-30), (-30,-30), (-30,0), (30,0), (30,30), (-30,30)], #S
|
||||||
|
[(0,30), (0,-30), (-30,-30), (30,-30)], #T
|
||||||
|
[(-30,-30), (-30,30), (30,30), (30,-30)], #U
|
||||||
|
[(-30,-30), (0,30), (30,-30)], #V
|
||||||
|
[(-30,-30), (-30,30), (0,0), (30,30), (30,-30)], #W
|
||||||
|
[(-30,30), (30,-30)], [(-30,-30), (30,30)], #X
|
||||||
|
[(0,30), (0,0), (30,-30), (0,0), (-30,-30)], #Y
|
||||||
|
[(30,30), (-30,30), (30,-30), (-30,-30)], #Z
|
||||||
|
|
||||||
|
# A implementer
|
||||||
|
|
||||||
|
[(-30,-10), (0,-30), (0,30)], [(-30,30), (30,30)], #[
|
||||||
|
[(-30,-10), (0,-30), (30,-10), (30,0), (-30,30), (30,30)], #\
|
||||||
|
[(-30,-30), (0,-30), (30,-10), (0,0), (30,10), (0,30), (-30,30)], #]
|
||||||
|
[(30,10), (-30,10), (0,-30), (0,30)], #^
|
||||||
|
[(30,-30), (-30,-30), (-30,0), (0,0), (30,10), (0,30), (-30,30)], #_
|
||||||
|
[(30,-30), (0,-30), (-30,-10), (-30,30), (0,30), (30,10), (30,0), (-30,0)], #`
|
||||||
|
|
||||||
|
# Implementé
|
||||||
|
|
||||||
|
[(-20,20), (-20,-20), (20,-20), (20,20), (20,0), (-20,0)], #a
|
||||||
|
[(-20,20), (-20,-20), (20,-20), (20,20), (-20,20), (-20,0), (20,0)], #b
|
||||||
|
[(20,20), (-20,20), (-20,-20), (20,-20)], #c
|
||||||
|
[(-20,20), (-20,-20), (20,-20), (20,20), (-20,20)], #d
|
||||||
|
[(20,20), (-20,20), (-20,-0), (20,0), (-20,0), (-20,-20), (20,-20)], #e
|
||||||
|
[(-20,20), (-20,-0), (20,0), (-20,0), (-20,-20), (20,-20)], #f
|
||||||
|
[(0,0), (20,0), (20,20), (-20,20), (-20,-20),(20,-20)], #g
|
||||||
|
[(-20,-20), (-20,20), (-20,0), (20,0), (20,20), (20,-20)], #H
|
||||||
|
[(0,20), (0,-20)], #I
|
||||||
|
[(-20,20), (0,-20), (0,-20), (-20,-20), (20,-20)], #J
|
||||||
|
[(-20,-20), (-20,20), (-20,0), (20,-20), (-20,0), (20,20)], #K
|
||||||
|
[(20,20), (-20,20), (-20,-20)], #L
|
||||||
|
[(-20,20), (-20,-20), (0,0), (20,-20), (20,20)], #M
|
||||||
|
[(-20,20), (-20,-20), (20,20), (20,-20)], #N
|
||||||
|
[(-20,20), (-20,-20), (20,-20), (20,20), (-20,20)], #O
|
||||||
|
[(-20,0), (20,0), (20,-20), (-20,-20), (-20,20)], #P
|
||||||
|
[(20,20), (20,-20), (-20,-20), (-20,20), (20,20),(25,25)], #Q
|
||||||
|
[(-20,20), (-20,-20), (20,-20), (20,0), (-20,0), (20,20)], #R
|
||||||
|
[(20,-20), (-20,-20), (-20,0), (20,0), (20,20), (-20,20)], #S
|
||||||
|
[(0,20), (0,-20), (-20,-20), (20,-20)], #T
|
||||||
|
[(-20,-20), (-20,20), (20,20), (20,-20)], #U
|
||||||
|
[(-20,-20), (0,20), (20,-20)], #V
|
||||||
|
[(-20,-20), (-20,20), (0,0), (20,20), (20,-20)], #W
|
||||||
|
[(-20,20), (20,-20)], [(-20,-20), (20,20)], #X
|
||||||
|
[(0,20), (0,0), (20,-20), (0,0), (-20,-20)], #Y
|
||||||
|
[(20,20), (-20,20), (20,-20), (-20,-20)], #Z
|
||||||
|
|
||||||
|
[(-2,15), (2,15)] # Point a la place de {
|
||||||
|
]
|
109
gstt.py
@ -1,9 +1,14 @@
|
|||||||
# coding=UTF-8
|
# coding=UTF-8
|
||||||
'''
|
'''
|
||||||
Etat global (anciennement singleton de la classe GameState + autres VARIABLES nécessaires partout)"
|
|
||||||
'''
|
|
||||||
|
|
||||||
#from globalVars import *
|
LJ Global state
|
||||||
|
v0.8.0
|
||||||
|
|
||||||
|
LICENCE : CC
|
||||||
|
by Sam Neurohack, Loloster, pclf
|
||||||
|
from /team/laser
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
#ConfigName = "setexample.conf"
|
#ConfigName = "setexample.conf"
|
||||||
ConfigName = "mainy.conf"
|
ConfigName = "mainy.conf"
|
||||||
@ -24,15 +29,16 @@ nozoscip = '192.168.1.15'
|
|||||||
|
|
||||||
# gstt.Laser select to what laser modifcation will occur.
|
# gstt.Laser select to what laser modifcation will occur.
|
||||||
# Can be changed with /noteon 16-23
|
# Can be changed with /noteon 16-23
|
||||||
Laser = 2
|
Laser = 0
|
||||||
|
|
||||||
# gstt.simuPL select what point list number to display in pygame simulator
|
# gstt.simuPL select what point list number to display in webUI simulator
|
||||||
# Can be changed with /noteon 24-31
|
# Can be changed with /noteon 24-31
|
||||||
simuPL = 1
|
simuPL = 1
|
||||||
|
|
||||||
# gstt.laserIPS. Will be overridden by the ConfigName (see below) file values
|
# gstt.laserIPS. Will be overridden by the ConfigName (see below) file values
|
||||||
lasersIPS = ['192.168.1.5','192.168.1.6','192.168.1.3','192.168.1.4']
|
lasersIPS = ['192.168.1.5','192.168.1.6','192.168.1.3','192.168.1.4']
|
||||||
|
|
||||||
|
ClientNumber = 1
|
||||||
|
|
||||||
# gstt.kpps stores kpps for each laser.
|
# gstt.kpps stores kpps for each laser.
|
||||||
# ** Will be overridden by the ConfigName (see below) file values **
|
# ** Will be overridden by the ConfigName (see below) file values **
|
||||||
@ -57,54 +63,19 @@ lstt_points = [[0], [0], [0], [0]]
|
|||||||
swapX = [1,1,1,-1]
|
swapX = [1,1,1,-1]
|
||||||
swapY = [1,1,1,-1]
|
swapY = [1,1,1,-1]
|
||||||
|
|
||||||
maxCurvesByLaser = 4
|
|
||||||
|
|
||||||
|
|
||||||
# For glitch art : change position and decrease number of points added by newdac.py
|
# For glitch art : change position and decrease number of points added by newdac.py
|
||||||
# shortline for lines shorter than 4000 (in etherdream coordinates)
|
# shortline for lines shorter than 4000 (in etherdream coordinates)
|
||||||
# i.e (0.25,3) means add 3 points at 25% on the line.
|
# i.e (0.25,3) means add 3 points at 25% on the line.
|
||||||
stepshortline = [(1.0, 8)]
|
stepshortline = [(1.0, 8)]
|
||||||
stepslongline = [(0.25, 3), (0.75, 3), (1.0, 10)]
|
stepslongline = [(0.25, 3), (0.75, 3), (1.0, 10)]
|
||||||
|
|
||||||
|
|
||||||
#curveColor = [255,0,0] * maxCurvesByLaser
|
|
||||||
#curveColor = [[0 for _ in range(3)] for _ in range(maxCurvesByLaser)]
|
|
||||||
curveColor = [[255 for _ in range(3)] for _ in range(maxCurvesByLaser)]
|
|
||||||
colorX = [[255 for _ in range(3)] for _ in range(maxCurvesByLaser)]
|
|
||||||
colorY = [[255 for _ in range(3)] for _ in range(maxCurvesByLaser)]
|
|
||||||
offsetX = [0] * maxCurvesByLaser
|
|
||||||
offsetY = [0] * maxCurvesByLaser
|
|
||||||
curveNumber = 0
|
|
||||||
Curve = curveNumber
|
|
||||||
XTimeAxe=30000
|
|
||||||
YTimeAxe=30000
|
|
||||||
|
|
||||||
#curveX = [255,255,255] * maxCurvesByLaser
|
|
||||||
#curveY = [255,255,255] * maxCurvesByLaser
|
|
||||||
|
|
||||||
point = [0,0,0]
|
point = [0,0,0]
|
||||||
|
|
||||||
# gstt.colormode select what to display. Can be changed with /noteon 57-64
|
|
||||||
colormode = 0
|
|
||||||
color = [255,255,255]
|
|
||||||
newcolor = 0
|
|
||||||
|
|
||||||
surpriseoff = 10
|
|
||||||
surpriseon = 50
|
|
||||||
surprisey = -10
|
|
||||||
surprisex = -10
|
|
||||||
|
|
||||||
|
|
||||||
cc = [0] * 256
|
cc = [0] * 256
|
||||||
lfo = [0] * 10
|
lfo = [0] * 10
|
||||||
osc = [0] * 255
|
osc = [0] * 255
|
||||||
oscInUse = [0] * 255
|
oscInUse = [0] * 255
|
||||||
knob = [0] * 33
|
knob = [0] * 33
|
||||||
|
|
||||||
stars0=[]
|
|
||||||
stars1=[]
|
|
||||||
stars2=[]
|
|
||||||
#stars3=[]
|
|
||||||
# Viewer distance (cc 21)
|
# Viewer distance (cc 21)
|
||||||
cc[21]=60
|
cc[21]=60
|
||||||
viewer_distance = cc[21] * 8
|
viewer_distance = cc[21] * 8
|
||||||
@ -116,33 +87,6 @@ fov = 4 * cc[22]
|
|||||||
|
|
||||||
JumpFlag =0
|
JumpFlag =0
|
||||||
|
|
||||||
# nice X (cc 5) Y (cc 6) curve at first
|
|
||||||
cc[5] = cc[6] = 60
|
|
||||||
|
|
||||||
# Dot mode start at middle screen
|
|
||||||
cc[1] = cc[2] = 63
|
|
||||||
|
|
||||||
note = 0
|
|
||||||
velocity = 0
|
|
||||||
|
|
||||||
WingHere = -1
|
|
||||||
BhorealHere = -1
|
|
||||||
LaunchHere = -1
|
|
||||||
BhorLeds = [0] * 64
|
|
||||||
|
|
||||||
oscx = 0
|
|
||||||
oscy = 0
|
|
||||||
oscz = 0
|
|
||||||
|
|
||||||
|
|
||||||
# Ai Parameters
|
|
||||||
|
|
||||||
aivelocity = 0.5
|
|
||||||
aiexpressivity = 0.5
|
|
||||||
aisensibility = 0.5
|
|
||||||
aibeauty = 0.5
|
|
||||||
|
|
||||||
|
|
||||||
# OSC ports
|
# OSC ports
|
||||||
#temporaray fix hack : iport=nozoport
|
#temporaray fix hack : iport=nozoport
|
||||||
iport = 8001 #LJay (bhorosc) input port
|
iport = 8001 #LJay (bhorosc) input port
|
||||||
@ -152,41 +96,10 @@ nozoport=8001 #nozosc.py sending port to LJay (main.py)
|
|||||||
nozuport=0 #linux serial usb port connecting nozoid devices ACM0 by default
|
nozuport=0 #linux serial usb port connecting nozoid devices ACM0 by default
|
||||||
|
|
||||||
|
|
||||||
X = [0] * maxCurvesByLaser
|
|
||||||
Y = [0] * maxCurvesByLaser
|
|
||||||
|
|
||||||
# No rotation X (cc 29) Y (cc 30) Z (cc 31) at first
|
|
||||||
cc[29] = cc[30] = cc[31] = prev_cc29 = 0
|
|
||||||
prev_cc29 = prev_cc30 = prev_cc31 = -1
|
|
||||||
|
|
||||||
angleX = 0
|
angleX = 0
|
||||||
angleY = 0
|
angleY = 0
|
||||||
angleZ = 0
|
angleZ = 0
|
||||||
|
|
||||||
tomidi = False # currently tomidi bypass all other directions
|
|
||||||
todmx = False
|
|
||||||
toled = False
|
|
||||||
tolaser = True
|
|
||||||
tosynth = False
|
|
||||||
|
|
||||||
sernozoid = ""
|
|
||||||
nozoid = ""
|
|
||||||
serdmx = ""
|
|
||||||
newnumber = ""
|
|
||||||
oldnumber = ""
|
|
||||||
|
|
||||||
'''
|
|
||||||
# will be overrided but settings.conf values.
|
|
||||||
# legacy one laser only values
|
|
||||||
centerx = LASER_CENTER_X
|
|
||||||
centery = LASER_CENTER_Y
|
|
||||||
zoomx = LASER_ZOOM_X
|
|
||||||
zoomy = LASER_ZOOM_Y
|
|
||||||
sizex = LASER_SIZE_X
|
|
||||||
sizey = LASER_SIZE_Y
|
|
||||||
finangle = LASER_ANGLE
|
|
||||||
'''
|
|
||||||
|
|
||||||
# multilasers arrays
|
# multilasers arrays
|
||||||
# will be overrided but settings.conf values.
|
# will be overrided but settings.conf values.
|
||||||
centerX = [0,0,0,0]
|
centerX = [0,0,0,0]
|
||||||
|
@ -174,17 +174,18 @@ def EDpoint(mylaser,(pygamex,pygamey)):
|
|||||||
x = (gstt.xy_center[0] + ((XX * CosANGLE) - (YY * SinANGLE)) - gstt.xy_center[0]) * gstt.zoomX[mylaser] + gstt.centerX[mylaser]
|
x = (gstt.xy_center[0] + ((XX * CosANGLE) - (YY * SinANGLE)) - gstt.xy_center[0]) * gstt.zoomX[mylaser] + gstt.centerX[mylaser]
|
||||||
y = (gstt.xy_center[1] + ((XX * SinANGLE) + (YY * CosANGLE)) - gstt.xy_center[1]) * gstt.zoomY[mylaser] + gstt.centerY[mylaser]
|
y = (gstt.xy_center[1] + ((XX * SinANGLE) + (YY * CosANGLE)) - gstt.xy_center[1]) * gstt.zoomY[mylaser] + gstt.centerY[mylaser]
|
||||||
|
|
||||||
if gstt.debug >0:
|
if gstt.debug >1:
|
||||||
|
|
||||||
#print "global center :", xy_center
|
#print "global center :", xy_center
|
||||||
|
print "EDpoint computing..."
|
||||||
print "Laser :", mylaser, "center at : ", gstt.centerX[mylaser], gstt.centerY[mylaser]
|
print "Laser :", mylaser, "center at : ", gstt.centerX[mylaser], gstt.centerY[mylaser]
|
||||||
|
print "Pygame point",pygamex,",",pygamey
|
||||||
'''
|
'''
|
||||||
print "swaps : ", (gstt.swapX[mylaser]), str(gstt.swapY[mylaser])
|
print "swaps : ", (gstt.swapX[mylaser]), str(gstt.swapY[mylaser])
|
||||||
print "zooms : ", gstt.zoomX[mylaser], gstt.zoomY[mylaser]
|
print "zooms : ", gstt.zoomX[mylaser], gstt.zoomY[mylaser]
|
||||||
print "angles : ", gstt.finANGLE[mylaser]
|
print "angles : ", gstt.finANGLE[mylaser]
|
||||||
'''
|
'''
|
||||||
print "result : ", x * gstt.swapX[mylaser] , y * gstt.swapY[mylaser]
|
print "Result point : ", x * gstt.swapX[mylaser] , y * gstt.swapY[mylaser]
|
||||||
return [x * gstt.swapX[mylaser] , y * gstt.swapY[mylaser]]
|
return [x * gstt.swapX[mylaser] , y * gstt.swapY[mylaser]]
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
@ -1,16 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
sudo apt install python-pip
|
sudo apt install python-pip
|
||||||
sudo apt install git
|
sudo apt install git
|
||||||
pip uninstall serial
|
sudo apt install redis
|
||||||
pip uninstall rtmidi
|
|
||||||
pip install libasound2-dev python-dev libpython-dev libjack-dev
|
|
||||||
pip install pysimpledmx
|
|
||||||
pip install numpy
|
pip install numpy
|
||||||
pip install scipy
|
pip install scipy
|
||||||
pip install mido
|
|
||||||
pip install python-rtmidi
|
|
||||||
git clone https://github.com/ptone/pyosc --depth 1 /tmp/pyosc && cd /tmp/pyosc && sudo ./setup.py install
|
git clone https://github.com/ptone/pyosc --depth 1 /tmp/pyosc && cd /tmp/pyosc && sudo ./setup.py install
|
||||||
pip install pyserial
|
|
||||||
pip install redis
|
pip install redis
|
||||||
|
|
||||||
|
|
||||||
|
74
las.py
@ -41,6 +41,9 @@ def NewEDH(laser):
|
|||||||
|
|
||||||
print "New EDH requested for laser ", laser
|
print "New EDH requested for laser ", laser
|
||||||
settings.Write()
|
settings.Write()
|
||||||
|
print "Settings saving swapX ", gstt.swapX[laser]
|
||||||
|
print "Settings saving swapY ", gstt.swapY[laser]
|
||||||
|
|
||||||
homographyp.newEDH(laser)
|
homographyp.newEDH(laser)
|
||||||
|
|
||||||
#r.set('/order/'+str(laser), 1)
|
#r.set('/order/'+str(laser), 1)
|
||||||
@ -79,14 +82,60 @@ def Resampler(laser,lsteps):
|
|||||||
r.set('/order/'+str(laser), 4)
|
r.set('/order/'+str(laser), 4)
|
||||||
|
|
||||||
|
|
||||||
|
def LasClientChange(clientnumber):
|
||||||
|
|
||||||
|
#
|
||||||
|
if r.get("/pl/"+str(clientnumber)+"/0") != None:
|
||||||
|
|
||||||
|
print "Switching to laser client", clientnumber
|
||||||
|
gstt.ClientNumber = clientnumber
|
||||||
|
r.set('/clientkey', "/pl/"+str(clientnumber)+"/")
|
||||||
|
print "clientkey set to", "/pl/"+str(clientnumber)+"/"
|
||||||
|
for laserid in xrange(0,gstt.LaserNumber):
|
||||||
|
r.set('/order/'+str(laserid), 5)
|
||||||
|
else:
|
||||||
|
print "Error : new laser client",clientnumber,"must send points first to","/pl/"+str(clientnumber)+"/0"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def NoteOn(note):
|
||||||
|
print "NoteOn", note
|
||||||
|
|
||||||
|
# Change laser client
|
||||||
|
if note < 8:
|
||||||
|
LasClientChange(note)
|
||||||
|
|
||||||
|
# New PL displayed
|
||||||
|
if note > 23 and note < 32:
|
||||||
|
if note - 24 > gstt.LaserNumber -1:
|
||||||
|
print "Only",gstt.LaserNumber,"asked, you dum ass !"
|
||||||
|
else:
|
||||||
|
gstt.Laser = note -24
|
||||||
|
print "Current Laser switched to",gstt.Laser
|
||||||
|
#LasClientChange(gstt.Laser)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def handler(oscpath, args):
|
def handler(oscpath, args):
|
||||||
|
|
||||||
|
print ""
|
||||||
|
print "Handler"
|
||||||
|
|
||||||
|
if oscpath[1] == "client" or oscpath[1] =="noteon":
|
||||||
|
if oscpath[1] == "client":
|
||||||
|
LasClientChange(int(args[0]))
|
||||||
|
else:
|
||||||
|
NoteOn(int(args[0]))
|
||||||
|
|
||||||
|
else:
|
||||||
pathlength = len(oscpath)
|
pathlength = len(oscpath)
|
||||||
if pathlength == 3:
|
if pathlength == 3:
|
||||||
laser = int(oscpath[2])
|
laser = int(oscpath[2])
|
||||||
else:
|
else:
|
||||||
laser = int(oscpath[3])
|
laser = int(oscpath[3])
|
||||||
|
|
||||||
|
print "args[0] :",args[0]," ", type(args[0])
|
||||||
|
|
||||||
# /grid/lasernumber value (0 or 1)
|
# /grid/lasernumber value (0 or 1)
|
||||||
if oscpath[1] == "grid":
|
if oscpath[1] == "grid":
|
||||||
|
|
||||||
@ -102,14 +151,13 @@ def handler(oscpath, args):
|
|||||||
if oscpath[1] == "black":
|
if oscpath[1] == "black":
|
||||||
|
|
||||||
if args[0] == "1":
|
if args[0] == "1":
|
||||||
print "Grid requested for laser ", laser
|
print "Black requested for laser ", laser
|
||||||
BlackOn(laser)
|
BlackOn(laser)
|
||||||
else:
|
else:
|
||||||
print "No grid for laser ", laser
|
print "No black for laser ", laser
|
||||||
UserOn(laser)
|
UserOn(laser)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# /ip/lasernumber value
|
# /ip/lasernumber value
|
||||||
if oscpath[1] == "ip":
|
if oscpath[1] == "ip":
|
||||||
print "New IP for laser ", laser
|
print "New IP for laser ", laser
|
||||||
@ -120,19 +168,20 @@ def handler(oscpath, args):
|
|||||||
# /kpps/lasernumber value
|
# /kpps/lasernumber value
|
||||||
# Live change of kpps is not implemented in newdac.py. Change will effect next startup.
|
# Live change of kpps is not implemented in newdac.py. Change will effect next startup.
|
||||||
if oscpath[1] == "kpps":
|
if oscpath[1] == "kpps":
|
||||||
print "New kpps for laser ", laser, " next startup", args[0]
|
print "New kpps for laser ", laser, " next startup", int(args[0])
|
||||||
gstt.kpps[laser]= int(args[0])
|
gstt.kpps[laser]= int(args[0])
|
||||||
settings.Write()
|
settings.Write()
|
||||||
|
|
||||||
# /angle/lasernumber value
|
# /angle/lasernumber value
|
||||||
if oscpath[1] == "angle":
|
if oscpath[1] == "angle":
|
||||||
print "New Angle modification for laser ", oscpath[2], ":", args[0]
|
print "New Angle modification for laser ", oscpath[2], ":", float(args[0])
|
||||||
gstt.finANGLE[laser] += int(args[0])
|
gstt.finANGLE[laser] += float(args[0])
|
||||||
NewEDH(laser)
|
NewEDH(laser)
|
||||||
|
"New angle", gstt.finANGLE[laser]
|
||||||
|
|
||||||
# /intens/lasernumber value
|
# /intens/lasernumber value
|
||||||
if oscpath[1] == "intens":
|
if oscpath[1] == "intens":
|
||||||
print "New intensity requested for laser ", laser, ":", args[0]
|
print "New intensity requested for laser ", laser, ":", int(args[0])
|
||||||
print "Change not implemented yet"
|
print "Change not implemented yet"
|
||||||
|
|
||||||
|
|
||||||
@ -156,24 +205,27 @@ def handler(oscpath, args):
|
|||||||
# /swap/X/lasernumber value (0 or 1)
|
# /swap/X/lasernumber value (0 or 1)
|
||||||
if oscpath[1] == "swap" and oscpath[2] == "X":
|
if oscpath[1] == "swap" and oscpath[2] == "X":
|
||||||
|
|
||||||
|
print "swapX was", gstt.swapX[laser]
|
||||||
if args[0] == "0":
|
if args[0] == "0":
|
||||||
print "swap X : -1 for laser ", laser
|
print "swap X -1 for laser ", laser
|
||||||
gstt.swapX[laser]= -1
|
gstt.swapX[laser]= -1
|
||||||
NewEDH(laser)
|
NewEDH(laser)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print "swap X : 1 for laser ", laser
|
print "swap X 1 for laser ", laser
|
||||||
gstt.swapX[laser]= 1
|
gstt.swapX[laser]= 1
|
||||||
NewEDH(laser)
|
NewEDH(laser)
|
||||||
|
|
||||||
# /swap/Y/lasernumber value (0 or 1)
|
# /swap/Y/lasernumber value (0 or 1)
|
||||||
if oscpath[1] == "swap" and oscpath[2] == "Y":
|
if oscpath[1] == "swap" and oscpath[2] == "Y":
|
||||||
|
|
||||||
|
print "swapY was", gstt.swapX[laser]
|
||||||
if args[0] == "0":
|
if args[0] == "0":
|
||||||
print "swap Y : -1 for laser ", laser
|
print "swap Y -1 for laser ", laser
|
||||||
gstt.swapY[laser]= -1
|
gstt.swapY[laser]= -1
|
||||||
NewEDH(laser)
|
NewEDH(laser)
|
||||||
else:
|
else:
|
||||||
print "swap Y : 1 for laser ", laser
|
print "swap Y 1 for laser ", laser
|
||||||
gstt.swapY[laser]= 1
|
gstt.swapY[laser]= 1
|
||||||
NewEDH(laser)
|
NewEDH(laser)
|
||||||
|
|
||||||
|
26
mainy.conf
@ -1,8 +1,8 @@
|
|||||||
[General]
|
[General]
|
||||||
set = 5
|
set = 5
|
||||||
curve = 0
|
curve = 0
|
||||||
lasernumber = 1
|
lasernumber = 2
|
||||||
debug = 1
|
debug = 0
|
||||||
ljayserverip = 127.0.0.1
|
ljayserverip = 127.0.0.1
|
||||||
nozoscip = 127.0.0.1
|
nozoscip = 127.0.0.1
|
||||||
bhoroscip = 127.0.0.1
|
bhoroscip = 127.0.0.1
|
||||||
@ -11,15 +11,15 @@ bhoroscip = 127.0.0.1
|
|||||||
color = -1
|
color = -1
|
||||||
ip = 192.168.1.4
|
ip = 192.168.1.4
|
||||||
kpps = 25000
|
kpps = 25000
|
||||||
centerx = 0
|
centerx = -695
|
||||||
centery = -650
|
centery = -2156
|
||||||
zoomx = 49.2
|
zoomx = 32.2
|
||||||
zoomy = 65.0
|
zoomy = 29.0
|
||||||
sizex = 31450
|
sizex = 31450
|
||||||
sizey = 32000
|
sizey = 32000
|
||||||
finangle = 0.0
|
finangle = 17.0
|
||||||
swapx = 1
|
swapx = 1
|
||||||
swapy = 1
|
swapy = -1
|
||||||
lsteps = [ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)]
|
lsteps = [ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)]
|
||||||
warpdest = [[-1500., 1500.],
|
warpdest = [[-1500., 1500.],
|
||||||
[ 1500., 1500.],
|
[ 1500., 1500.],
|
||||||
@ -30,15 +30,15 @@ warpdest = [[-1500., 1500.],
|
|||||||
color = -1
|
color = -1
|
||||||
ip = 192.168.1.5
|
ip = 192.168.1.5
|
||||||
kpps = 25000
|
kpps = 25000
|
||||||
centerx = 0
|
centerx = -200
|
||||||
centery = 0
|
centery = -357
|
||||||
zoomx = 48.5
|
zoomx = 81.5
|
||||||
zoomy = 50.1
|
zoomy = 50.1
|
||||||
sizex = 32000
|
sizex = 32000
|
||||||
sizey = 32000
|
sizey = 32000
|
||||||
finangle = 0.0
|
finangle = 0.0
|
||||||
swapx = 1
|
swapx = -1
|
||||||
swapy = 1
|
swapy = -1
|
||||||
lsteps = [ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)]
|
lsteps = [ (1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)]
|
||||||
warpdest = [[-1500., 1500.],
|
warpdest = [[-1500., 1500.],
|
||||||
[ 1500., 1500.],
|
[ 1500., 1500.],
|
||||||
|
@ -33,6 +33,7 @@ import random, ast
|
|||||||
import newdacp
|
import newdacp
|
||||||
import homographyp
|
import homographyp
|
||||||
import las
|
import las
|
||||||
|
import font1
|
||||||
|
|
||||||
|
|
||||||
from OSC import OSCServer, OSCClient, OSCMessage
|
from OSC import OSCServer, OSCClient, OSCMessage
|
||||||
@ -43,6 +44,7 @@ import types, thread, time
|
|||||||
r = redis.StrictRedis(host=gstt.LjayServerIP , port=6379, db=0)
|
r = redis.StrictRedis(host=gstt.LjayServerIP , port=6379, db=0)
|
||||||
args =[0,0]
|
args =[0,0]
|
||||||
|
|
||||||
|
|
||||||
def dac_process(number, pl):
|
def dac_process(number, pl):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
@ -68,7 +70,7 @@ def dac_process(number, pl):
|
|||||||
# webUI server
|
# webUI server
|
||||||
#
|
#
|
||||||
|
|
||||||
|
print "Laser client number :",gstt.ClientNumber
|
||||||
serverIP = gstt.LjayServerIP
|
serverIP = gstt.LjayServerIP
|
||||||
print "Redis IP :", serverIP
|
print "Redis IP :", serverIP
|
||||||
|
|
||||||
@ -166,17 +168,20 @@ def sendnozosc(oscaddress,oscargs=''):
|
|||||||
def handler(path, tags, args, source):
|
def handler(path, tags, args, source):
|
||||||
|
|
||||||
oscpath = path.split("/")
|
oscpath = path.split("/")
|
||||||
print "debug", gstt.debug
|
print ""
|
||||||
|
print "OSC said : ", path, oscpath, args
|
||||||
|
#print "debug", gstt.debug
|
||||||
if gstt.debug >0:
|
if gstt.debug >0:
|
||||||
print ""
|
print ""
|
||||||
print "default handler"
|
print "default handler"
|
||||||
print "Bhorosc said : ", path, oscpath, args
|
print "OSC said : ", path, oscpath, args
|
||||||
sendWSall(path + " " + str(args[0]))
|
sendWSall(path + " " + str(args[0]))
|
||||||
las.handler(oscpath,args)
|
las.handler(oscpath,args)
|
||||||
|
|
||||||
|
|
||||||
# RAW OSC Frame available ?
|
# RAW OSC Frame available ?
|
||||||
def osc_frame():
|
def osc_frame():
|
||||||
|
#print 'oscframe'
|
||||||
# clear timed_out flag
|
# clear timed_out flag
|
||||||
oscserver.timed_out = False
|
oscserver.timed_out = False
|
||||||
# handle all pending requests then return
|
# handle all pending requests then return
|
||||||
@ -185,17 +190,9 @@ def osc_frame():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# OSC Thread. Bhorosc handler and Automated status sender to UI.
|
# OSC Thread. OSC handler and Automated status sender to UI.
|
||||||
def osc_thread():
|
def osc_thread():
|
||||||
|
|
||||||
#print "Will use Redis server IP ", serverIP
|
|
||||||
|
|
||||||
'''
|
|
||||||
r = redis.StrictRedis(host=serverIP, port=6379, db=0)
|
|
||||||
print "Connection to redis server.."
|
|
||||||
print "Running..."
|
|
||||||
'''
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
@ -234,17 +231,8 @@ def osc_thread():
|
|||||||
# last number of points sent to etherdream buffer
|
# last number of points sent to etherdream buffer
|
||||||
sendWSall("/points/" + str(laserid) + " " + str(r.get('/cap/'+str(laserid))))
|
sendWSall("/points/" + str(laserid) + " " + str(r.get('/cap/'+str(laserid))))
|
||||||
|
|
||||||
sendWSall("/plframe/" + str(laserid) + " " + str(r.get('/pl/'+str(laserid))))
|
print "Sending simu frame from",'/pl/'+str(gstt.ClientNumber)+'/'+str(gstt.Laser)
|
||||||
|
sendWSall("/plframe" +" "+ r.get('/pl/'+str(gstt.ClientNumber)+'/'+str(gstt.Laser)))
|
||||||
# WIP Too much packets -> flood webUI : Draw all PL point lists in JS canvas in WebUI
|
|
||||||
|
|
||||||
'''
|
|
||||||
for pl in range(0,1):
|
|
||||||
bhorosc.sendosc("/plframe/" + str(pl),"")
|
|
||||||
for plpoint in range(0,len(gstt.PL[pl])):
|
|
||||||
bhorosc.sendosc("/plpoint/" + str(pl),"")
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -295,8 +283,9 @@ def message_received(client, server, message):
|
|||||||
print ("")
|
print ("")
|
||||||
print("WS Client(%d) said: %s" % (client['id'], message))
|
print("WS Client(%d) said: %s" % (client['id'], message))
|
||||||
|
|
||||||
|
print("WS Client(%d) said: %s" % (client['id'], message))
|
||||||
oscpath = message.split(" ")
|
oscpath = message.split(" ")
|
||||||
args[0] = float(oscpath[1])
|
args[0] = str(oscpath[1])
|
||||||
#print oscpath[0].split("/"),oscpath[1]
|
#print oscpath[0].split("/"),oscpath[1]
|
||||||
las.handler(oscpath[0].split("/"),args)
|
las.handler(oscpath[0].split("/"),args)
|
||||||
|
|
||||||
@ -306,10 +295,6 @@ def message_received(client, server, message):
|
|||||||
sendbhorosc("/on")
|
sendbhorosc("/on")
|
||||||
else:
|
else:
|
||||||
sendbhorosc("/off")
|
sendbhorosc("/off")
|
||||||
else:
|
|
||||||
|
|
||||||
print "sending to bhorosc",oscpath[0],oscpath[1]
|
|
||||||
sendbhorosc(oscpath[0],oscpath[1])
|
|
||||||
|
|
||||||
# if needed a loop back : WS Client -> server -> WS Client
|
# if needed a loop back : WS Client -> server -> WS Client
|
||||||
#sendWSall("ws"+message)
|
#sendWSall("ws"+message)
|
||||||
@ -326,30 +311,23 @@ def sendWSall(message):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Some random lists for all lasers at launch.
|
# Some random lists for all lasers at launch for laser client gstt.ClientNumber
|
||||||
print ""
|
print ""
|
||||||
print "Creating startup point lists..."
|
print "Creating startup point lists for client",gstt.ClientNumber,"..."
|
||||||
|
|
||||||
random_points = [(300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 0), (500.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280), (500.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280)]
|
|
||||||
if r.set('/pl/0', str(random_points)) == True:
|
|
||||||
print "/pl/0 ", ast.literal_eval(r.get('/pl/0'))
|
|
||||||
|
|
||||||
random_points = [(300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 0), (500.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280), (500.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280)]
|
digit_points = font1.DigitsDots(gstt.ClientNumber,16711935)
|
||||||
if r.set('/pl/1', str(random_points)) == True:
|
|
||||||
print "/pl/1 ", ast.literal_eval(r.get('/pl/1'))
|
|
||||||
|
|
||||||
random_points = [(300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 0), (500.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280), (500.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280)]
|
# Order all lasers to show the laser client number at startup -> tell all 4 laser process to USER PLs
|
||||||
if r.set('/pl/2', str(random_points)) == True:
|
|
||||||
print "/pl/2 ", ast.literal_eval(r.get('/pl/2'))
|
|
||||||
|
|
||||||
random_points = [(300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 0), (500.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280), (500.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280)]
|
|
||||||
if r.set('/pl/3', str(random_points)) == True:
|
|
||||||
print "/pl/3 ", ast.literal_eval(r.get('/pl/3'))
|
|
||||||
|
|
||||||
# Order all lasers to show these random shapes at startup -> tell all 4 laser process to USER PLs
|
|
||||||
for laserid in range(0,gstt.LaserNumber):
|
for laserid in range(0,gstt.LaserNumber):
|
||||||
|
|
||||||
|
if r.set('/pl/'+str(gstt.ClientNumber)+'/'+str(laserid), str(digit_points)) == True:
|
||||||
|
print "/pl/"+str(gstt.ClientNumber)+"/"+str(laserid)+" ", ast.literal_eval(r.get('/pl/'+str(gstt.ClientNumber)+'/'+str(laserid)))
|
||||||
|
|
||||||
r.set('/order/'+str(laserid), 0)
|
r.set('/order/'+str(laserid), 0)
|
||||||
|
|
||||||
|
if r.set("/clientkey","/pl/"+str(gstt.ClientNumber)+"/")==True:
|
||||||
|
print "sent clientkey : /pl/"+str(gstt.ClientNumber)+"/"
|
||||||
|
|
||||||
print ""
|
print ""
|
||||||
print "Etherdream connection check is NOT DISPLAYED"
|
print "Etherdream connection check is NOT DISPLAYED"
|
||||||
@ -388,10 +366,12 @@ try:
|
|||||||
print "Launching OSC server..."
|
print "Launching OSC server..."
|
||||||
print "at", bhoroscIPin, "port",str(bhoroscPORTin)
|
print "at", bhoroscIPin, "port",str(bhoroscPORTin)
|
||||||
print "Will update webUI dac status every second"
|
print "Will update webUI dac status every second"
|
||||||
thread.start_new_thread(osc_thread, ())
|
oscserver.addMsgHandler( "/noteon", las.NoteOn )
|
||||||
|
|
||||||
# Default OSC handler for all OSC incoming message
|
# Default OSC handler for all OSC incoming message
|
||||||
oscserver.addMsgHandler("default", handler)
|
oscserver.addMsgHandler("default", handler)
|
||||||
|
thread.start_new_thread(osc_thread, ())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#print server
|
#print server
|
||||||
print ""
|
print ""
|
||||||
@ -430,6 +410,11 @@ finally:
|
|||||||
print "Fin des haricots"
|
print "Fin des haricots"
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Some code previously used, for reference :
|
||||||
|
|
||||||
|
random_points = [(300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 0), (500.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280), (500.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 400.0+random.randint(-100, 100), 65280), (300.0+random.randint(-100, 100), 200.0+random.randint(-100, 100), 65280)]
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
24
newdacp.py
@ -235,6 +235,8 @@ class DAC(object):
|
|||||||
|
|
||||||
#print "init"
|
#print "init"
|
||||||
self.mylaser = mylaser
|
self.mylaser = mylaser
|
||||||
|
self.clientkey = r.get("/clientkey")
|
||||||
|
#print "Laser",self.mylaser,"Got clientkey", self.clientkey
|
||||||
#print "DAC", self.mylaser, "Handler process, connecting to", gstt.lasersIPS[mylaser]
|
#print "DAC", self.mylaser, "Handler process, connecting to", gstt.lasersIPS[mylaser]
|
||||||
self.conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
self.connstatus = self.conn.connect_ex((gstt.lasersIPS[mylaser], port))
|
self.connstatus = self.conn.connect_ex((gstt.lasersIPS[mylaser], port))
|
||||||
@ -249,17 +251,18 @@ class DAC(object):
|
|||||||
self.PL = PL
|
self.PL = PL
|
||||||
|
|
||||||
# Lower case pl is the actual point list coordinates
|
# Lower case pl is the actual point list coordinates
|
||||||
self.pl = ast.literal_eval(r.get('/pl/'+str(self.mylaser)))
|
print "Laser",self.mylaser,"asking for ckey", self.clientkey+str(self.mylaser)
|
||||||
|
self.pl = ast.literal_eval(r.get(self.clientkey + str(self.mylaser)))
|
||||||
#if self.mylaser ==0:
|
#if self.mylaser ==0:
|
||||||
#print "DAC Init Laser", self.mylaser
|
#print "DAC Init Laser", self.mylaser
|
||||||
#print "pl :", self.pl
|
#print "pl :", self.pl
|
||||||
#print "EDH/"+str(self.mylaser),r.get('/EDH/'+str(self.mylaser))
|
#print "EDH/"+str(self.mylaser),r.get('/EDH/'+str(self.mylaser))
|
||||||
if r.get('/EDH/'+str(self.mylaser)) == None:
|
if r.get('/EDH/'+str(self.mylaser)) == None:
|
||||||
print "Laser",self.mylaser,"NO EDH !! Computing one..."
|
#print "Laser",self.mylaser,"NO EDH !! Computing one..."
|
||||||
homographyp.newEDH(self.mylaser)
|
homographyp.newEDH(self.mylaser)
|
||||||
else:
|
else:
|
||||||
gstt.EDH[self.mylaser] = np.array(ast.literal_eval(r.get('/EDH/'+str(self.mylaser))))
|
gstt.EDH[self.mylaser] = np.array(ast.literal_eval(r.get('/EDH/'+str(self.mylaser))))
|
||||||
print "Laser",self.mylaser,"found its EDH in redis"
|
#print "Laser",self.mylaser,"found its EDH in redis"
|
||||||
#print gstt.EDH[self.mylaser]
|
#print gstt.EDH[self.mylaser]
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@ -355,7 +358,8 @@ class DAC(object):
|
|||||||
if order == 0:
|
if order == 0:
|
||||||
|
|
||||||
# USER point list
|
# USER point list
|
||||||
self.pl = ast.literal_eval(r.get('/pl/'+str(self.mylaser)))
|
self.pl = ast.literal_eval(r.get(self.clientkey+str(self.mylaser)))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
# Get the new EDH
|
# Get the new EDH
|
||||||
@ -376,7 +380,7 @@ class DAC(object):
|
|||||||
self.pl = grid_points
|
self.pl = grid_points
|
||||||
|
|
||||||
|
|
||||||
# Resampler Modification
|
# Resampler Change
|
||||||
if order == 4:
|
if order == 4:
|
||||||
self.resampler = ast.literal_eval(r.get('/resampler/'+str(self.mylaser)))
|
self.resampler = ast.literal_eval(r.get('/resampler/'+str(self.mylaser)))
|
||||||
print "newdacp resetting lsteps for", self.mylaser, ":",self.resampler
|
print "newdacp resetting lsteps for", self.mylaser, ":",self.resampler
|
||||||
@ -384,6 +388,16 @@ class DAC(object):
|
|||||||
gstt.stepslongline[0] = self.resampler[1]
|
gstt.stepslongline[0] = self.resampler[1]
|
||||||
gstt.stepslongline[1] = self.resampler[2]
|
gstt.stepslongline[1] = self.resampler[2]
|
||||||
gstt.stepslongline[2] = self.resampler[3]
|
gstt.stepslongline[2] = self.resampler[3]
|
||||||
|
# Back to user point list order
|
||||||
|
r.set('/order/'+str(self.mylaser), 0)
|
||||||
|
|
||||||
|
# Client Key change
|
||||||
|
if order == 5:
|
||||||
|
print "Laser",self.mylaser,"new clientkey",
|
||||||
|
self.clientkey = r.get('/clientkey')
|
||||||
|
# Back to user point list order
|
||||||
|
r.set('/order/'+str(self.mylaser), 0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
31
settings.py
@ -40,7 +40,6 @@ def Write():
|
|||||||
config.set(laser, 'swapx', str(gstt.swapX[i]))
|
config.set(laser, 'swapx', str(gstt.swapX[i]))
|
||||||
config.set(laser, 'swapy', str(gstt.swapY[i]))
|
config.set(laser, 'swapy', str(gstt.swapY[i]))
|
||||||
config.set(laser, 'warpdest', np.array2string(gstt.warpdest[i], precision=2, separator=',',suppress_small=True))
|
config.set(laser, 'warpdest', np.array2string(gstt.warpdest[i], precision=2, separator=',',suppress_small=True))
|
||||||
|
|
||||||
config.write(open(gstt.ConfigName,'w'))
|
config.write(open(gstt.ConfigName,'w'))
|
||||||
|
|
||||||
|
|
||||||
@ -76,33 +75,3 @@ print "* Reading", gstt.ConfigName, "setup file.*"
|
|||||||
config = ConfigParser.ConfigParser()
|
config = ConfigParser.ConfigParser()
|
||||||
config.read(gstt.ConfigName)
|
config.read(gstt.ConfigName)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Save all points for a given "shape" (=['Windows','0']) shapecoord is a list
|
|
||||||
# in any section of the mapping conf file
|
|
||||||
def MappingWrite(sections, shape, shapecoord):
|
|
||||||
|
|
||||||
shapestr = " ".join(str(x) for x in shapecoord)
|
|
||||||
config.set(sections[gstt.CurrentSection], shape, shapestr.replace("] [","],["))
|
|
||||||
config.write(open(gstt.ConfigName,'w'))
|
|
||||||
|
|
||||||
def MappingWriteSection(sections, shape, shapecoord):
|
|
||||||
|
|
||||||
shapestr = " ".join(str(x) for x in shapecoord)
|
|
||||||
shapestr = "[" + shapestr.replace("] [","],[") + "]"
|
|
||||||
config.set(sections, shape, shapestr)
|
|
||||||
config.write(open(gstt.ConfigName,'w'))
|
|
||||||
|
|
||||||
# Get a list of all points (="Corners") for a given "shape" = [section,option] like ['Windows','0']
|
|
||||||
def MappingRead(shape):
|
|
||||||
archi = ast.literal_eval(config.get(shape[0], shape[1]))
|
|
||||||
return archi
|
|
||||||
|
|
||||||
|
|
||||||
# Get shape numbers (i.e of windows in Windows section)
|
|
||||||
def Mapping(shape):
|
|
||||||
return len(config.options(shape))
|
|
||||||
|
|
||||||
# Get a list of all sections
|
|
||||||
def MappingSections():
|
|
||||||
return config.sections()
|
|
||||||
|
243
webui/LJ.js
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
//
|
||||||
|
// LJ.js v0.7.0
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Web Audio buttons handler
|
||||||
|
|
||||||
|
|
||||||
|
// add a listener for each element.
|
||||||
|
var message="";
|
||||||
|
var log=[];
|
||||||
|
var knobs = document.getElementsByTagName('webaudio-knob');
|
||||||
|
for(var i = 0; i < knobs.length; i++){
|
||||||
|
knobs[i].addEventListener("input",Dump,false);
|
||||||
|
knobs[i].addEventListener("change",Dump,false);
|
||||||
|
}
|
||||||
|
var sliders = document.getElementsByTagName('webaudio-slider');
|
||||||
|
for(var i = 0; i < sliders.length; i++){
|
||||||
|
sliders[i].addEventListener("input",Dump,false);
|
||||||
|
sliders[i].addEventListener("change",Dump,false);
|
||||||
|
}
|
||||||
|
var switches = document.getElementsByTagName('webaudio-switch');
|
||||||
|
for(var i = 0; i < switches.length; i++) {
|
||||||
|
switches[i].addEventListener("change",Dump,false);
|
||||||
|
}
|
||||||
|
// Process button events
|
||||||
|
function Dump(e) {
|
||||||
|
var str="";
|
||||||
|
str=e.type + " : " + e.target.id + " : " + e.target.value + " ";
|
||||||
|
//console.log(str);
|
||||||
|
log.unshift(str);
|
||||||
|
log.length=1;
|
||||||
|
str="";
|
||||||
|
for(var i=19;i>=0;--i) {
|
||||||
|
if(log[i])
|
||||||
|
str+=log[i]+"<br/>";
|
||||||
|
}
|
||||||
|
var evview=document.getElementById("events");
|
||||||
|
evview.innerHTML=str;
|
||||||
|
|
||||||
|
if (e.target.id === "noteon" && e.type ==="input")
|
||||||
|
{
|
||||||
|
console.log("only noteon change are sent not input");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log(e.target.id)
|
||||||
|
_WS.send("/" + e.target.id + " " + e.target.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// for /scale : after a change (knob is released) reset knob value to 0
|
||||||
|
if (e.target.id.substring(0,5) === "scale" && e.type === "change") {
|
||||||
|
e.target.value = 0;
|
||||||
|
console.log(e.target.id + "set to 0")
|
||||||
|
_WS.send("/" + e.target.id + " " + e.target.value);
|
||||||
|
}
|
||||||
|
// for /loffset : after a change (knob is released) reset knob value to 0
|
||||||
|
if (e.target.id.substring(0,7) === "loffset" && e.type === "change") {
|
||||||
|
e.target.value = 0;
|
||||||
|
console.log(e.target.id + "set to 0")
|
||||||
|
_WS.send("/" + e.target.id + " " + e.target.value);
|
||||||
|
}
|
||||||
|
// for /angle : after a change (knob is released) reset knob value to 0
|
||||||
|
if (e.target.id.substring(0,5) === "angle" && e.type === "change") {
|
||||||
|
e.target.value = 0;
|
||||||
|
console.log(e.target.id + "set to 0")
|
||||||
|
_WS.send("/" + e.target.id + " " + e.target.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Websocket Handler
|
||||||
|
|
||||||
|
var pl = "";
|
||||||
|
var pl2 = new Array();
|
||||||
|
var _WS = {
|
||||||
|
uri: 'ws://127.0.0.1:9001/',
|
||||||
|
ws: null,
|
||||||
|
|
||||||
|
|
||||||
|
init : function (e) {
|
||||||
|
_WS.s = new WebSocket(_WS.uri);
|
||||||
|
_WS.s.onopen = function (e) { _WS.onOpen(e); };
|
||||||
|
_WS.s.onclose = function (e) { _WS.onClose(e); };
|
||||||
|
_WS.s.onmessage = function (e) { _WS.onMessage(e); };
|
||||||
|
_WS.s.onerror = function (e) { _WS.onError(e); };
|
||||||
|
},
|
||||||
|
|
||||||
|
onOpen: function () {
|
||||||
|
_WS.showout(_WS.uri);
|
||||||
|
_WS.showout('CONNECTED');
|
||||||
|
},
|
||||||
|
|
||||||
|
onClose: function () {
|
||||||
|
_WS.showout('DISCONNECTED');
|
||||||
|
},
|
||||||
|
|
||||||
|
onMessage: function (e) {
|
||||||
|
var res = e.data.split(" ");
|
||||||
|
//console.log(e.data)
|
||||||
|
switch (res[0].substring(0,6)) {
|
||||||
|
case "/statu":
|
||||||
|
_WS.showstatus(e.data.slice(8));
|
||||||
|
break;
|
||||||
|
case "/plfra":
|
||||||
|
pl = e.data.slice(9);
|
||||||
|
//console.log(pl);
|
||||||
|
pl2 = eval(pl.replace(/[()]/g, ''));
|
||||||
|
//console.log(pl2);
|
||||||
|
break;
|
||||||
|
case "/plpoi":
|
||||||
|
console.log("plpoint");
|
||||||
|
break;
|
||||||
|
case "/clien":
|
||||||
|
console.log("New Client : "+res[1])
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
//console.log(res[0] + " " + res[1])
|
||||||
|
//console.log(res[1])
|
||||||
|
document.getElementById(res[0].slice(1)).value = res[1];
|
||||||
|
_WS.showin(e.data);
|
||||||
|
}
|
||||||
|
//_WS.showin(e.data);
|
||||||
|
},
|
||||||
|
|
||||||
|
onError: function (e) {
|
||||||
|
_WS.showin('<span style="color: red;">ERROR:</span> ' + e.data);
|
||||||
|
},
|
||||||
|
|
||||||
|
showin: function (message) {
|
||||||
|
var divtext = document.getElementById('showin');
|
||||||
|
divtext.innerHTML="";
|
||||||
|
divtext.innerHTML= message.toString();
|
||||||
|
},
|
||||||
|
|
||||||
|
showout: function (message) {
|
||||||
|
var divtext = document.getElementById('showout');
|
||||||
|
divtext.innerHTML="";
|
||||||
|
divtext.innerHTML= message.toString();
|
||||||
|
},
|
||||||
|
|
||||||
|
showstatus: function (message) {
|
||||||
|
var divtext = document.getElementById('showstatus');
|
||||||
|
divtext.innerHTML="";
|
||||||
|
divtext.innerHTML= message.toString();
|
||||||
|
},
|
||||||
|
|
||||||
|
send: function (message) {
|
||||||
|
if (!message.length) {
|
||||||
|
alert('Empty message not allowed !');
|
||||||
|
} else {
|
||||||
|
_WS.showout(message);
|
||||||
|
_WS.s.send(message);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
close: function () {
|
||||||
|
_WS.showout('GOODBYE !');
|
||||||
|
_WS.s.close();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('load', _WS.init, false);
|
||||||
|
|
||||||
|
|
||||||
|
// Menu Handler
|
||||||
|
|
||||||
|
function noMenu() {
|
||||||
|
// Set all menu button with normal button style
|
||||||
|
var x = document.getElementById("showalign");
|
||||||
|
x.className = "button";
|
||||||
|
|
||||||
|
var x = document.getElementById("showrun");
|
||||||
|
x.className = "button";
|
||||||
|
|
||||||
|
var x = document.getElementById("showcanvas");
|
||||||
|
x.className = "button";
|
||||||
|
|
||||||
|
var x = document.getElementById("showlive");
|
||||||
|
x.className = "button";
|
||||||
|
|
||||||
|
// Hide all possible main central grids.
|
||||||
|
var x = document.getElementById("mgalign");
|
||||||
|
x.style.display = "none";
|
||||||
|
|
||||||
|
var x = document.getElementById("mgcanvas");
|
||||||
|
x.style.display = "none";
|
||||||
|
|
||||||
|
var x = document.getElementById("mgrun");
|
||||||
|
x.style.display = "none";
|
||||||
|
|
||||||
|
var x = document.getElementById("mglive");
|
||||||
|
x.style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
function showAlign() {
|
||||||
|
noMenu();
|
||||||
|
var x = document.getElementById("mgalign");
|
||||||
|
x.style.display = "grid";
|
||||||
|
|
||||||
|
var x = document.getElementById("showalign");
|
||||||
|
x.className = "button:checked";
|
||||||
|
}
|
||||||
|
|
||||||
|
function showRun() {
|
||||||
|
noMenu();
|
||||||
|
var x = document.getElementById("mgrun");
|
||||||
|
x.style.display = "grid";
|
||||||
|
|
||||||
|
var x = document.getElementById("showrun");
|
||||||
|
x.className = "button:checked";
|
||||||
|
}
|
||||||
|
|
||||||
|
function showCanvas() {
|
||||||
|
noMenu();
|
||||||
|
var x = document.getElementById("mgcanvas");
|
||||||
|
x.style.display = "block";
|
||||||
|
|
||||||
|
var x = document.getElementById("showcanvas");
|
||||||
|
x.className = "button:checked";
|
||||||
|
}
|
||||||
|
|
||||||
|
function showLive() {
|
||||||
|
noMenu();
|
||||||
|
var x = document.getElementById("mglive");
|
||||||
|
x.style.display = "grid";
|
||||||
|
|
||||||
|
var x = document.getElementById("showlive");
|
||||||
|
x.className = "button:checked";
|
||||||
|
}
|
||||||
|
|
||||||
|
function buttonClicked(clicked_id) {
|
||||||
|
_WS.send("/" + clicked_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSubmit(clicked_id) {
|
||||||
|
var input = document.getElementById(clicked_id);
|
||||||
|
console.log("/" + clicked_id + " " + input.value);
|
||||||
|
_WS.send("/" + clicked_id + " " + input.value);
|
||||||
|
_WS.showout("/" + clicked_id + " " + input.value);
|
||||||
|
}
|
||||||
|
|
210
webui/index.html
@ -3,7 +3,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>LJay</title>
|
<title>LJ</title>
|
||||||
|
|
||||||
<!-- Web audio defaults -->
|
<!-- Web audio defaults -->
|
||||||
<script src="webcomponents-lite.js"></script>
|
<script src="webcomponents-lite.js"></script>
|
||||||
@ -22,7 +22,8 @@
|
|||||||
|
|
||||||
<!-- Webscoket handler -->
|
<!-- Webscoket handler -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
var pl = "";
|
||||||
|
var pl2 = new Array();
|
||||||
var _WS = {
|
var _WS = {
|
||||||
uri: 'ws://127.0.0.1:9001/',
|
uri: 'ws://127.0.0.1:9001/',
|
||||||
ws: null,
|
ws: null,
|
||||||
@ -42,7 +43,6 @@
|
|||||||
},
|
},
|
||||||
onMessage: function (e) {
|
onMessage: function (e) {
|
||||||
var res = e.data.split(" ");
|
var res = e.data.split(" ");
|
||||||
var pl = ""
|
|
||||||
//console.log(e.data)
|
//console.log(e.data)
|
||||||
//console.log(res[0].substring(0,6))
|
//console.log(res[0].substring(0,6))
|
||||||
switch (res[0].substring(0,6)) {
|
switch (res[0].substring(0,6)) {
|
||||||
@ -50,14 +50,17 @@
|
|||||||
_WS.showstatus(e.data.slice(8));
|
_WS.showstatus(e.data.slice(8));
|
||||||
break;
|
break;
|
||||||
case "/plfra":
|
case "/plfra":
|
||||||
pl = e.data.slice(11)
|
console.log(e.data.slice(11));
|
||||||
console.log(pl);
|
pl = e.data.slice(9);
|
||||||
|
//console.log(pl);
|
||||||
|
pl2 = eval(pl.replace(/[()]/g, ''));
|
||||||
|
//console.log(pl2);
|
||||||
break;
|
break;
|
||||||
case "/plpoi":
|
case "/plpoi":
|
||||||
//console.log("plpoint");
|
//console.log("plpoint");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.log(res[0] + " " + res[1])
|
//console.log(res[0] + " " + res[1])
|
||||||
//console.log(res[1])
|
//console.log(res[1])
|
||||||
document.getElementById(res[0].slice(1)).value = res[1];
|
document.getElementById(res[0].slice(1)).value = res[1];
|
||||||
}
|
}
|
||||||
@ -204,7 +207,7 @@
|
|||||||
<webaudio-switch id="swap/Y/0" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
<webaudio-switch id="swap/Y/0" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
||||||
</div>
|
</div>
|
||||||
<!-- Lasergrid 0 -->
|
<!-- Lasergrid 0 -->
|
||||||
<div class="lasergrid" style="background-image: url(knobs/lasergrid0.png);">
|
<div class="lasergrid" style="background-image: url(lasergrid0.png);">
|
||||||
|
|
||||||
<div><webaudio-param id="kpps/0" link="kpps/0" ></webaudio-param></div>
|
<div><webaudio-param id="kpps/0" link="kpps/0" ></webaudio-param></div>
|
||||||
<div><webaudio-param id="points/0" link="points/0"></webaudio-param></div>
|
<div><webaudio-param id="points/0" link="points/0"></webaudio-param></div>
|
||||||
@ -254,7 +257,7 @@
|
|||||||
<webaudio-switch id="swap/Y/1" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
<webaudio-switch id="swap/Y/1" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
||||||
</div>
|
</div>
|
||||||
<!-- Lasergrid 1 -->
|
<!-- Lasergrid 1 -->
|
||||||
<div class="lasergrid" style="background-image: url(knobs/lasergrid1.png);">
|
<div class="lasergrid" style="background-image: url(lasergrid1.png);">
|
||||||
<div><webaudio-param id="kpps/1" link="kpps/1"></webaudio-param></div>
|
<div><webaudio-param id="kpps/1" link="kpps/1"></webaudio-param></div>
|
||||||
<div><webaudio-param id="points/1" link="points/1"></webaudio-param></div>
|
<div><webaudio-param id="points/1" link="points/1"></webaudio-param></div>
|
||||||
<div class="lasertext">kPPS</div>
|
<div class="lasertext">kPPS</div>
|
||||||
@ -303,7 +306,7 @@
|
|||||||
<webaudio-switch id="swap/Y/2" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
<webaudio-switch id="swap/Y/2" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
||||||
</div>
|
</div>
|
||||||
<!-- Laser 2 grid -->
|
<!-- Laser 2 grid -->
|
||||||
<div class="lasergrid" style="background-image: url(knobs/lasergrid2.png)">
|
<div class="lasergrid" style="background-image: url(lasergrid2.png)">
|
||||||
<div><webaudio-param id="kpps/2" link="kpps/2"></webaudio-param></div>
|
<div><webaudio-param id="kpps/2" link="kpps/2"></webaudio-param></div>
|
||||||
<div><webaudio-param id="points/2" link="points/2"></webaudio-param></div>
|
<div><webaudio-param id="points/2" link="points/2"></webaudio-param></div>
|
||||||
<div class="lasertext">kPPS</div>
|
<div class="lasertext">kPPS</div>
|
||||||
@ -352,7 +355,7 @@
|
|||||||
<webaudio-switch id="swap/Y/3" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
<webaudio-switch id="swap/Y/3" value="0" height="25" width="21" tooltip="Switch-B" src="knobs/swapy.png"></webaudio-switch>
|
||||||
</div>
|
</div>
|
||||||
<!-- Laser 3 grid -->
|
<!-- Laser 3 grid -->
|
||||||
<div class="lasergrid" style="background-image: url(knobs/lasergrid3.png)">
|
<div class="lasergrid" style="background-image: url(lasergrid3.png)">
|
||||||
<div><webaudio-param id="kpps/3" link="kpps/3" ></webaudio-param></div>
|
<div><webaudio-param id="kpps/3" link="kpps/3" ></webaudio-param></div>
|
||||||
<div><webaudio-param id="points/3" link="points/3"></webaudio-param></div>
|
<div><webaudio-param id="points/3" link="points/3"></webaudio-param></div>
|
||||||
<div class="lasertext">kPPS</div>
|
<div class="lasertext">kPPS</div>
|
||||||
@ -480,50 +483,49 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- mg run icons grid -->
|
<!-- mg run icons grid -->
|
||||||
<div id="mgrun"class="mgrun">
|
<div id="mgrun"class="mgrun"> <!-- Laser Client selection grid -->
|
||||||
<!-- Curve selection grid -->
|
<div><img src="knobs/iconljay2.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay2.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconljay2.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay2.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconljay2.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconastro.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconljay2.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay2.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/client.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconllstr.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/client.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconastro.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/client.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay2.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/client.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconpose.png" alt=" " class="icongrid" /></div>
|
<div><button id ="noteon 0" onclick ="buttonClicked(this.id)" class="button:checked">0</button></div>
|
||||||
<div><button id ="noteon 0" onclick ="buttonClicked(this.id)" class="button">Map.</button></div>
|
<div><button id ="noteon 1" onclick ="buttonClicked(this.id)" class="button">1</button></div>
|
||||||
<div><button id ="noteon 1" onclick ="buttonClicked(this.id)" class="button">xPLS</button></div>
|
<div><button id ="noteon 2" onclick ="buttonClicked(this.id)" class="button">2</button></div>
|
||||||
<div><button id ="noteon 2" onclick ="buttonClicked(this.id)" class="button">Orbits</button></div>
|
<div><button id ="noteon 3" onclick ="buttonClicked(this.id)" class="button">3</button></div>
|
||||||
<div><button id ="noteon 3" onclick ="buttonClicked(this.id)" class="button">Dot</button></div>
|
<div><button id ="noteon 4" onclick ="buttonClicked(this.id)" class="button">4</button></div>
|
||||||
<div><button id ="noteon 4" onclick ="buttonClicked(this.id)" class="button">Sine</button></div>
|
<div><button id ="noteon 5" onclick ="buttonClicked(this.id)" class="button">5</button></div>
|
||||||
<div><button id ="noteon 5" onclick ="buttonClicked(this.id)" class="button">Astro</button></div>
|
<div><button id ="noteon 6" onclick ="buttonClicked(this.id)" class="button">6</button></div>
|
||||||
<div><button id ="noteon 6" onclick ="buttonClicked(this.id)" class="button:checked">Text</button></div>
|
<div><button id ="noteon 7" onclick ="buttonClicked(this.id)" class="button">7</button></div>
|
||||||
<div><button id ="noteon 7" onclick ="buttonClicked(this.id)" class="button">Pose</button></div>
|
<!-- Simulator PL selection grid -->
|
||||||
<!-- Set selection grid -->
|
<div><img src="knobs/iconpl.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay1.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconpl.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay1.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconpl.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconllstr.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconpl.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconpose.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay1.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay1.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay1.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconljay1.png" alt=" " class="icongrid" /></div>
|
<div><button id ="noteon 24" onclick ="buttonClicked(this.id)" class="button:checked">PL 0</button></div>
|
||||||
<div><button id ="noteon 8" onclick ="buttonClicked(this.id)" class="button:checked">Set 0</button></div>
|
<div><button id ="noteon 25" onclick ="buttonClicked(this.id)" class="button">PL 1</button></div>
|
||||||
<div><button id ="noteon 9" onclick ="buttonClicked(this.id)" class="button">Set 1</button></div>
|
<div><button id ="noteon 26" onclick ="buttonClicked(this.id)" class="button">PL 2</button></div>
|
||||||
<div><button id ="noteon 10" onclick ="buttonClicked(this.id)" class="button">LLSTR</button></div>
|
<div><button id ="noteon 27" onclick ="buttonClicked(this.id)" class="button">PL 3</button></div>
|
||||||
<div><button id ="noteon 11" onclick ="buttonClicked(this.id)" class="button">Franken</button></div>
|
<div></div>
|
||||||
<div><button id ="noteon 12" onclick ="buttonClicked(this.id)" class="button">Ex.</button></div>
|
<div></div>
|
||||||
<div><button id ="noteon 13" onclick ="buttonClicked(this.id)" class="button">5.</button></div>
|
<div></div>
|
||||||
<div><button id ="noteon 14" onclick ="buttonClicked(this.id)" class="button">6</button></div>
|
<div></div>
|
||||||
<div><button id ="noteon 15" onclick ="buttonClicked(this.id)" class="button">7</button></div>
|
|
||||||
<!-- Laser selection grid -->
|
<!-- Laser selection grid -->
|
||||||
<div><img src="img/iconlaser.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconlaser.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconlaser.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconlaser.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconlaser.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconlaser.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconlaser.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconlaser.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><button id ="noteon 16" onclick ="buttonClicked(this.id)" class="button:checked">0</button></div>
|
<div><button id ="noteon 16" onclick ="buttonClicked(this.id)" class="button:checked">0</button></div>
|
||||||
<div><button id ="noteon 17" onclick ="buttonClicked(this.id)" class="button">1</button></div>
|
<div><button id ="noteon 17" onclick ="buttonClicked(this.id)" class="button">1</button></div>
|
||||||
<div><button id ="noteon 18" onclick ="buttonClicked(this.id)" class="button">2</button></div>
|
<div><button id ="noteon 18" onclick ="buttonClicked(this.id)" class="button">2</button></div>
|
||||||
@ -532,19 +534,19 @@
|
|||||||
<div></div>
|
<div></div>
|
||||||
<div></div>
|
<div></div>
|
||||||
<div></div>
|
<div></div>
|
||||||
<!-- Simulator PL selection grid -->
|
<!-- Hidden grid -->
|
||||||
<div><img src="img/iconsimu.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconsimu.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconsimu.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconsimu.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><img src="img/iconblack.png" alt=" " class="icongrid" /></div>
|
<div><img src="knobs/iconblack.png" alt=" " class="icongrid" /></div>
|
||||||
<div><button id ="noteon 24" onclick ="buttonClicked(this.id)" class="button:checked">PL 0</button></div>
|
<div></div>
|
||||||
<div><button id ="noteon 25" onclick ="buttonClicked(this.id)" class="button">PL 1</button></div>
|
<div></div>
|
||||||
<div><button id ="noteon 26" onclick ="buttonClicked(this.id)" class="button">PL 2</button></div>
|
<div></div>
|
||||||
<div><button id ="noteon 27" onclick ="buttonClicked(this.id)" class="button">PL 3</button></div>
|
<div></div>
|
||||||
<div></div>
|
<div></div>
|
||||||
<div></div>
|
<div></div>
|
||||||
<div></div>
|
<div></div>
|
||||||
@ -688,88 +690,42 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<!-- Point list draw -->
|
<!-- Point list draw -->
|
||||||
<script>
|
<script type="text/javascript">
|
||||||
|
|
||||||
// Store Reference To The Canvas & Set Context
|
// Store Reference To The Canvas & Set Context
|
||||||
var canvas = document.getElementById("canvas");
|
var canvas = document.getElementById("canvas");
|
||||||
var ctx = canvas.getContext("2d");
|
var ctx = canvas.getContext("2d");
|
||||||
|
var lastpoint = { x: 0, y: 0 };
|
||||||
//var re = document.getElementById('speed');
|
|
||||||
//re.addEventListener('change', function(){
|
|
||||||
// speed = re.value;
|
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
function draw() {
|
function draw() {
|
||||||
|
|
||||||
// Clear Canvas At The Start Of Every Frame
|
// Clear Canvas At The Start Of Every Frame
|
||||||
ctx.clearRect(0,0,400,400);
|
ctx.clearRect(0,0,400,400);
|
||||||
|
if (pl2.length > 0)
|
||||||
|
{
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.moveTo(Math.random() * 220, Math.random() * 220);
|
ctx.moveTo(lastpoint.x , lastpoint.y );
|
||||||
|
|
||||||
// var xA = new Array();
|
// Draw Lines
|
||||||
// var yA = new Array();
|
for (var i = 0; i < pl2.length/3; i++) {
|
||||||
//for (var i=0; i<=100, i++){
|
ctx.lineTo(pl2[i*3]*0.7, pl2[1+(i*3)]*0.7);
|
||||||
//xA[i] = ;
|
|
||||||
//yA[i] = ;
|
|
||||||
//}
|
|
||||||
|
|
||||||
// Draw Additional Randomly Placed Lines
|
|
||||||
for (var i = 0; i < 25; i++) {
|
|
||||||
ctx.lineTo(Math.random() * 400, Math.random() * 400);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.strokeStyle = "#888";
|
ctx.strokeStyle = "#888";
|
||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
|
lastpoint.x = pl2[i*3];
|
||||||
// Call Draw Function Again To Continue
|
lastpoint.y = pl2[1+(i*3)];
|
||||||
// Drawing To Canvas To Create Animation
|
}
|
||||||
|
// Call Draw Function Again To Create Animation
|
||||||
window.requestAnimationFrame(draw);
|
window.requestAnimationFrame(draw);
|
||||||
}
|
}
|
||||||
|
|
||||||
<!--
|
|
||||||
|
|
||||||
//var speed = 100;
|
|
||||||
var lastpoint = { x: 0, y: 0 };
|
|
||||||
var pt = { x: 0, y: 0 };
|
|
||||||
|
|
||||||
// fade background a bit...
|
|
||||||
ctx.globalAlpha = 0.1;
|
|
||||||
ctx.fillStyle = '#000';
|
|
||||||
ctx.fillRect(0, 0, 400, 400);
|
|
||||||
ctx.globalAlpha = 1.0;
|
|
||||||
for (var i=0; i<=100; i++){
|
|
||||||
//var pt = seg.points[point];
|
|
||||||
pt.x = Math.random() * 400;
|
|
||||||
pt.y = Math.random() * 400;
|
|
||||||
// console.log('draw', pt);
|
|
||||||
var newpoint = {
|
|
||||||
x: pt.x,
|
|
||||||
y: pt.y
|
|
||||||
//x: 200 + 190 * pt.x / 32768,
|
|
||||||
//y: 200 - 190 * pt.y / 32768
|
|
||||||
};
|
|
||||||
ctx.strokeStyle = "#888";
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.moveTo(lastpoint.x, lastpoint.y);
|
|
||||||
ctx.lineTo(newpoint.x, newpoint.y);
|
|
||||||
ctx.closePath();
|
|
||||||
ctx.stroke();
|
|
||||||
|
|
||||||
lastpoint.x = newpoint.x;
|
|
||||||
lastpoint.y = newpoint.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Initialize The Draw Function
|
// Initialize The Draw Function
|
||||||
draw();
|
draw();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
<!-- non displayed items, for code reference
|
<!-- non displayed items, for code reference
|
||||||
|
BIN
webui/knobs/client.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
webui/knobs/iconamiral.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
webui/knobs/iconastro.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
webui/knobs/iconblack.png
Normal file
After Width: | Height: | Size: 604 B |
BIN
webui/knobs/iconlaser.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
webui/knobs/iconljay1.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
webui/knobs/iconljay2.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
webui/knobs/iconllstr.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
webui/knobs/iconpl.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
webui/knobs/iconpong.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
webui/knobs/iconpose.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
webui/knobs/iconsimu.png
Normal file
After Width: | Height: | Size: 25 KiB |
324
webui/ljaygrid.css
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
|
||||||
|
.maingrid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 900px;
|
||||||
|
grid-template-raw: 1fr 1fr 1fr 1fr;
|
||||||
|
grid-gap: 1px;
|
||||||
|
background-color: #222;
|
||||||
|
padding: 5px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
}
|
||||||
|
.mgtitle {
|
||||||
|
display: grid;
|
||||||
|
height: 90px;
|
||||||
|
grid-template-columns: 130px 70px 80px 600px;
|
||||||
|
background-color: #111;
|
||||||
|
transition: all .3s ease;
|
||||||
|
padding-top: 10px;
|
||||||
|
border-color: #445;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
.mgstatus {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 250px 150px 1fr;
|
||||||
|
grid-template-raw: 30px;
|
||||||
|
grid-column-gap: 1px;
|
||||||
|
grid-row-gap: 1px;
|
||||||
|
border-color: #334;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
background-color: #111;
|
||||||
|
font-size: small;
|
||||||
|
color:#444;
|
||||||
|
font-family: sans-serif, Helvetica, Verdana, Arial;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
font-family: 'hobeaux-rococeaux-background', Helvetica;
|
||||||
|
}
|
||||||
|
.mgalign {
|
||||||
|
display: grid;
|
||||||
|
height: 400px;
|
||||||
|
grid-template-columns: 144px 144px 138px 138px 10px;
|
||||||
|
grid-template-rows: 1Fr;
|
||||||
|
background-color: #151515;
|
||||||
|
border-color: #445;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
.mgcanvas {
|
||||||
|
display: none;
|
||||||
|
height: 400px;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
grid-template-rows: 1Fr;
|
||||||
|
background-color: #151515;
|
||||||
|
border-color: #445;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
.mglive {
|
||||||
|
display: none;
|
||||||
|
height: 400px;
|
||||||
|
grid-template-columns: 138px 138px 512px 1Fr;
|
||||||
|
grid-template-rows: 1Fr;
|
||||||
|
background-color: #151515;
|
||||||
|
border-color: #445;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
.mgrun {
|
||||||
|
display: none;
|
||||||
|
height: 400px;
|
||||||
|
grid-template-columns: 66px 66px 66px 66px 66px 66px 66px 66px;
|
||||||
|
grid-template-rows: 66px 17px 69px 17px 66px 17px 66px 17px;
|
||||||
|
background-color: #000;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
border-color: #445;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
grid-gap: 1px;
|
||||||
|
transition: all .3s ease;
|
||||||
|
}
|
||||||
|
.mgfooter {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
grid-template-raw: 25px;
|
||||||
|
grid-column-gap: 1px;
|
||||||
|
grid-row-gap: 1px;
|
||||||
|
border-color: #334;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
background-color: #111;
|
||||||
|
font-size: small;
|
||||||
|
font-family: sans-serif, Helvetica, Verdana, Arial;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
font-family: 'hobeaux-rococeaux-background', Helvetica;
|
||||||
|
}
|
||||||
|
.topgrid {
|
||||||
|
display: grid;
|
||||||
|
height: 80px;
|
||||||
|
grid-template-columns: 60px 75px 40px 60px 75px 60px 75px 60px 75px;
|
||||||
|
background-color: #111;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
grid-gap: 1px;
|
||||||
|
border-color: #445;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
transition: all .3s ease;
|
||||||
|
}
|
||||||
|
.laserbox {
|
||||||
|
display: grid;
|
||||||
|
height: 390px;
|
||||||
|
width: 132px;
|
||||||
|
grid-template-columns: 124px;
|
||||||
|
grid-template-rows: 15px 32px 325px;
|
||||||
|
background-color: #111;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 4px;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
border-color: #334;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
.lasergrid {
|
||||||
|
display: grid;
|
||||||
|
height: 323px;
|
||||||
|
width: 124px;
|
||||||
|
grid-template-columns: 62px 62px;
|
||||||
|
grid-template-rows: 30px 19px 8px 55px 20px 19px 8px 55px 25px 19px 8px 55px 19px;
|
||||||
|
background-color: #111;
|
||||||
|
line-height: 1;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
color:#88c;
|
||||||
|
}
|
||||||
|
.lissabox {
|
||||||
|
display: grid;
|
||||||
|
height: 353px;
|
||||||
|
width: 126px;
|
||||||
|
grid-template-columns: 124px;
|
||||||
|
grid-template-rows: 15px 338px;
|
||||||
|
background-color: #111;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 6px;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
border-color: #334;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
.spacer {
|
||||||
|
display: grid;
|
||||||
|
height: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lissagrid {
|
||||||
|
display: grid;
|
||||||
|
height: 323px;
|
||||||
|
width: 124px;
|
||||||
|
grid-template-columns: 60px 60px ;
|
||||||
|
grid-template-rows: 55px 25px 15px 8px 55px 25px 15px 8px 55px 25px 15px;
|
||||||
|
background-color: #111;
|
||||||
|
line-height: 1;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.withaibox {
|
||||||
|
display: grid;
|
||||||
|
height: 353px;
|
||||||
|
width: 126px;
|
||||||
|
grid-template-columns: 124px;
|
||||||
|
grid-template-rows: 15px 338px;
|
||||||
|
background-color: #111;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 6px;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
border-color: #334;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
.withaigrid {
|
||||||
|
display: grid;
|
||||||
|
height: 323px;
|
||||||
|
width: 124px;
|
||||||
|
grid-template-columns: 60px 60px ;
|
||||||
|
grid-template-rows: 55px 25px 15px 8px 55px 25px 15px 8px 55px 25px 15px;
|
||||||
|
background-color: #111;
|
||||||
|
line-height: 1;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.projgrid {
|
||||||
|
display: grid;
|
||||||
|
height: 140px;
|
||||||
|
width: 194px;
|
||||||
|
grid-template-columns: 1Fr 1Fr 1Fr;
|
||||||
|
grid-template-rows: 25px 8px 55px 25px 15px;
|
||||||
|
background-color: #111;
|
||||||
|
line-height: 1;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
border-color: #334;
|
||||||
|
border-style: groove;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lasertext {
|
||||||
|
font-size: small;
|
||||||
|
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
.lasertextxs {
|
||||||
|
font-size: x-small;
|
||||||
|
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lsttgrid {
|
||||||
|
display: grid;
|
||||||
|
height: 20px;
|
||||||
|
grid-template-columns: 10px 10px 25px 25px;
|
||||||
|
grid-template-rows: 15px 15px 15px 15px 15px;
|
||||||
|
grid-gap: 1px;
|
||||||
|
justify-items: center;
|
||||||
|
align-items: center;
|
||||||
|
transition: all .3s ease;
|
||||||
|
}
|
||||||
|
.onoffgrid {
|
||||||
|
display: grid;
|
||||||
|
height: 14px;
|
||||||
|
grid-template-columns: 1Fr;
|
||||||
|
grid-template-rows: 15px 110px;
|
||||||
|
justify-items: center;
|
||||||
|
transition: all .3s ease;
|
||||||
|
}
|
||||||
|
.icongrid {
|
||||||
|
padding: 2px;
|
||||||
|
width: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
#showin {
|
||||||
|
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||||
|
color :#444;
|
||||||
|
width: 150px;
|
||||||
|
height: 25px;
|
||||||
|
padding-top: 4px;
|
||||||
|
|
||||||
|
}
|
||||||
|
#showout {
|
||||||
|
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||||
|
color: #444;
|
||||||
|
width: 150px;
|
||||||
|
height: 25px;
|
||||||
|
padding-top: 4px;
|
||||||
|
}
|
||||||
|
#events {
|
||||||
|
font-family: Helvetica, Verdana, Arial, sans-serif;
|
||||||
|
color: #444;
|
||||||
|
width: 150px;
|
||||||
|
height: 25px;
|
||||||
|
padding-top: 4px;
|
||||||
|
}
|
||||||
|
.button {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding: 8px 5px;
|
||||||
|
border: 1px solid #404040;
|
||||||
|
background: #141414;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, from(#141414), to(#141414));
|
||||||
|
background: -moz-linear-gradient(top, #141414, #141414);
|
||||||
|
background: linear-gradient(to bottom, #141414, #141414);
|
||||||
|
font: normal normal normal 11px arial;
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.button:hover,
|
||||||
|
.button:focus {
|
||||||
|
padding: 8px 5px;
|
||||||
|
border: 1px solid #b6b6b6;
|
||||||
|
background: #181818;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, from(#181818), to(#181818));
|
||||||
|
background: -moz-linear-gradient(top, #181818, #181818);
|
||||||
|
background: linear-gradient(to bottom, #181818, #181818);
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.button:active {
|
||||||
|
padding: 8px 5px;
|
||||||
|
background: #0c0c0c;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, from(#0c0c0c), to(#141414));
|
||||||
|
background: -moz-linear-gradient(top, #0c0c0c, #141414);
|
||||||
|
background: linear-gradient(to bottom, #0c0c0c, #141414);
|
||||||
|
border: 1px solid #6666B6;
|
||||||
|
}
|
||||||
|
.button:checked {
|
||||||
|
padding: 8px 5px;
|
||||||
|
background: #c0c0c0;
|
||||||
|
color: #0c0c0c;
|
||||||
|
border: 1px solid #6666B6;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
border-radius: 5px;
|
||||||
|
font: normal normal normal 11px arial;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.submit {
|
||||||
|
background: #0c0c0c;
|
||||||
|
color: #c0c0c0;
|
||||||
|
width: 90px;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 15px;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, from(#0c0c0c), to(#141414));
|
||||||
|
background: -moz-linear-gradient(top, #0c0c0c, #141414);
|
||||||
|
background: linear-gradient(to bottom, #0c0c0c, #141414);
|
||||||
|
border: 1px solid #445;
|
||||||
|
}
|
||||||
|
|