Mercurial > code > home > repos > light9
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 |
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 | 5 import sys, logging |
463 | 6 |
7 sys.path.append("lib") | |
8 import qt4reactor | |
9 qt4reactor.install() | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
10 |
463 | 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 | 14 from louie import dispatcher |
466 | 15 from PyQt4.QtGui import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QMainWindow |
463 | 16 from OpenGL.GL import * |
17 from OpenGL.GLU import * | |
18 | |
19 from light9 import networking, Patch, showconfig, dmxclient, updatefreq, prof | |
20 from light9.namespaces import L9 | |
21 from lightsim.openglsim import Surface | |
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 | 27 def filenamesForChan(graph, chan): |
28 for lyr in graph.objects(chan, L9['previewLayer']): | |
29 for imgPath in graph.objects(lyr, L9['path']): | |
30 yield imgPath | |
31 | |
32 _lastLevels = None | |
463 | 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 | 38 global _lastLevels |
39 if dmxLevels == _lastLevels: | |
40 return | |
41 _lastLevels = dmxLevels | |
468 | 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 | 53 for imgPath in filenamesForChan(graph, chan): |
54 level[str(imgPath)] = lev | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
55 |
463 | 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 | 60 class StatusKeys(QWidget): |
61 """listens for dispatcher signal 'status' and displays the key/value args""" | |
62 def __init__(self, parent): | |
63 QWidget.__init__(self) | |
64 self.layout = QVBoxLayout() | |
65 self.setLayout(self.layout) | |
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 | 71 row = QWidget() |
72 self.layout.addWidget(row) | |
73 cols = QHBoxLayout() | |
74 row.setLayout(cols) | |
75 lab1 = QLabel(key) | |
76 lab2 = QLabel(value) | |
77 cols.addWidget(lab1) | |
78 cols.addWidget(lab2) | |
79 self.row[key] = lab2 | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
80 else: |
466 | 81 lab = self.row[key] |
82 lab.setText(value) | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
83 |
466 | 84 class Window(QMainWindow): |
463 | 85 def __init__(self, filenames): |
466 | 86 QMainWindow.__init__(self, None) |
87 self.setWindowTitle(dmxclient._id) | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
88 |
466 | 89 w = QWidget() |
90 self.setCentralWidget(w) | |
91 mainLayout = QVBoxLayout() | |
92 w.setLayout(mainLayout) | |
463 | 93 |
466 | 94 self.glWidget = Surface(self, filenames, imgRescaleTo=128*2) |
95 | |
96 mainLayout.addWidget(self.glWidget) | |
97 | |
98 status = StatusKeys(mainLayout) | |
99 mainLayout.addWidget(status) | |
463 | 100 |
466 | 101 def requiredImages(graph): |
102 """filenames that we'll need to show, based on a config structure | |
103 like this: | |
104 ch:frontLeft a :Channel; | |
105 :previewLayer [ :path "lightsim/skyline/front-left.png" ] . | |
106 """ | |
107 filenames = [] | |
108 for lyr in graph.objects(None, L9['previewLayer']): | |
109 for p in graph.objects(lyr, L9['path']): | |
110 filenames.append(str(p)) | |
111 return filenames | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
112 |
463 | 113 if __name__ == '__main__': |
114 app = reactor.qApp | |
115 | |
116 graph = showconfig.getGraph() | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
117 |
466 | 118 window = Window(requiredImages(graph)) |
463 | 119 window.show() |
120 | |
121 serv = Proxy(networking.dmxServerUrl()) | |
466 | 122 pollFreq = updatefreq.Updatefreq() |
123 LoopingCall(poll, graph, serv, pollFreq, window.glWidget).start(.05) | |
463 | 124 |
125 reactor.run() | |
126 |