annotate bin/lightsim @ 2050:7ed414bdaab9

wip porting asco to TS and not-jquery
author drewp@bigasterisk.com
date Wed, 11 May 2022 00:07:13 -0700
parents 5bcb950024af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
729
b5efddd80dad update more shbang lines
Drew Perttula <drewp@bigasterisk.com>
parents: 623
diff changeset
1 #!bin/python
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
2
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
3 import run_local
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
4 import sys, logging
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
5
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
6 sys.path.append("lib")
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
7 import qt4reactor
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
8 qt4reactor.install()
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
9
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
10 from twisted.internet import reactor
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
11 from twisted.internet.task import LoopingCall
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
12 from twisted.web.xmlrpc import Proxy
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
13 from louie import dispatcher
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
14 from PyQt4.QtGui import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QMainWindow
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
15 from OpenGL.GL import *
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
16 from OpenGL.GLU import *
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
17
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
18 from light9 import networking, Patch, showconfig, dmxclient, updatefreq, prof
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
19 from light9.namespaces import L9
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
20 from lightsim.openglsim import Surface
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
21
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
22 log = logging.getLogger()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
23 logging.basicConfig(
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
24 format=
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
25 "%(asctime)s %(levelname)-5s %(name)s %(filename)s:%(lineno)d: %(message)s")
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
26 log.setLevel(logging.DEBUG)
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
27
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
28
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
29 def filenamesForChan(graph, chan):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
30 for lyr in graph.objects(chan, L9['previewLayer']):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
31 for imgPath in graph.objects(lyr, L9['path']):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
32 yield imgPath
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
33
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
34
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
35 _lastLevels = None
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
36
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
37
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
38 def poll(graph, serv, pollFreq, oglSurface):
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
39 pollFreq.update()
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
40 dispatcher.send("status", key="pollFreq", value=str(pollFreq))
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
41 d = serv.callRemote("currentlevels", dmxclient._id)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
42
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
43 def received(dmxLevels):
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
44 global _lastLevels
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
45 if dmxLevels == _lastLevels:
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
46 return
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
47 _lastLevels = dmxLevels
468
2d9c85c98be6 start new baypiggies talk
drewp@bigasterisk.com
parents: 466
diff changeset
48
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
49 level = {} # filename : level
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
50 for i, lev in enumerate(dmxLevels):
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
51 if lev == 0:
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
52 continue
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
53
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
54 try:
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
55 chan = Patch.get_channel_uri(Patch.get_channel_name(i + 1))
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
56 except KeyError:
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
57 continue
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
58
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
59 for imgPath in filenamesForChan(graph, chan):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
60 level[str(imgPath)] = lev
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
61
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
62 oglSurface.newLevels(levels=level)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
63
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
64 d.addCallback(received)
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
65 return d
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
66
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
67
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
68 class StatusKeys(QWidget):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
69 """listens for dispatcher signal 'status' and displays the key/value args"""
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
70
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
71 def __init__(self, parent):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
72 QWidget.__init__(self)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
73 self.layout = QVBoxLayout()
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
74 self.setLayout(self.layout)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
75 self.row = {} # key name : (Frame, value Label)
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
76 dispatcher.connect(self.status, "status")
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
77
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
78 def status(self, key, value):
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
79 if key not in self.row:
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
80 row = QWidget()
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
81 self.layout.addWidget(row)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
82 cols = QHBoxLayout()
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
83 row.setLayout(cols)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
84 lab1 = QLabel(key)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
85 lab2 = QLabel(value)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
86 cols.addWidget(lab1)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
87 cols.addWidget(lab2)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
88 self.row[key] = lab2
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
89 else:
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
90 lab = self.row[key]
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
91 lab.setText(value)
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
92
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
93
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
94 class Window(QMainWindow):
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
95
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
96 def __init__(self, filenames):
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
97 QMainWindow.__init__(self, None)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
98 self.setWindowTitle(dmxclient._id)
352
9d1f323fb3d3 new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
99
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
100 w = QWidget()
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
101 self.setCentralWidget(w)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
102 mainLayout = QVBoxLayout()
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
103 w.setLayout(mainLayout)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
104
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
105 self.glWidget = Surface(self, filenames, imgRescaleTo=128 * 2)
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
106
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
107 mainLayout.addWidget(self.glWidget)
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
108
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
109 status = StatusKeys(mainLayout)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
110 mainLayout.addWidget(status)
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
111
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
112
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
113 def requiredImages(graph):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
114 """filenames that we'll need to show, based on a config structure
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
115 like this:
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
116 ch:frontLeft a :Channel;
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
117 :previewLayer [ :path "lightsim/skyline/front-left.png" ] .
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
118 """
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
119 filenames = []
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
120 for lyr in graph.objects(None, L9['previewLayer']):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
121 for p in graph.objects(lyr, L9['path']):
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
122 filenames.append(str(p))
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
123 return filenames
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
124
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 729
diff changeset
125
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
126 if __name__ == '__main__':
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
127 app = reactor.qApp
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
128
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
129 graph = showconfig.getGraph()
353
941cfe1e1691 lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents: 352
diff changeset
130
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
131 window = Window(requiredImages(graph))
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
132 window.show()
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
133
623
46d319974176 move networking settings to config.n3
drewp@bigasterisk.com
parents: 468
diff changeset
134 serv = Proxy(networking.dmxServer.url)
466
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
135 pollFreq = updatefreq.Updatefreq()
f69ba5ac17c5 qt version of lightsim now works
drewp@bigasterisk.com
parents: 463
diff changeset
136 LoopingCall(poll, graph, serv, pollFreq, window.glWidget).start(.05)
463
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
137
60b49f6c2027 start porting lightsim to qt
drewp@bigasterisk.com
parents: 356
diff changeset
138 reactor.run()