annotate bin/lightsim @ 468:2d9c85c98be6

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