Mercurial > code > home > repos > light9
annotate bin/lightsim @ 1858:7772cc48e016
reformat all python
Ignore-this: 1135b78893f8b3d31badddda7f45678f
author | drewp@bigasterisk.com |
---|---|
date | Tue, 21 May 2019 23:56:12 +0000 |
parents | b5efddd80dad |
children | f066d6e874db |
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 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() |
1858 | 24 logging.basicConfig( |
25 format= | |
26 "%(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
|
27 log.setLevel(logging.DEBUG) |
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
28 |
1858 | 29 |
466 | 30 def filenamesForChan(graph, chan): |
31 for lyr in graph.objects(chan, L9['previewLayer']): | |
32 for imgPath in graph.objects(lyr, L9['path']): | |
33 yield imgPath | |
34 | |
1858 | 35 |
466 | 36 _lastLevels = None |
1858 | 37 |
38 | |
463 | 39 def poll(graph, serv, pollFreq, oglSurface): |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
40 pollFreq.update() |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
41 dispatcher.send("status", key="pollFreq", value=str(pollFreq)) |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
42 d = serv.callRemote("currentlevels", dmxclient._id) |
1858 | 43 |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
44 def received(dmxLevels): |
466 | 45 global _lastLevels |
46 if dmxLevels == _lastLevels: | |
47 return | |
48 _lastLevels = dmxLevels | |
468 | 49 |
1858 | 50 level = {} # filename : level |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
51 for i, lev in enumerate(dmxLevels): |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
52 if lev == 0: |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
53 continue |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
54 |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
55 try: |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
56 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
|
57 except KeyError: |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
58 continue |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
59 |
466 | 60 for imgPath in filenamesForChan(graph, chan): |
61 level[str(imgPath)] = lev | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
62 |
463 | 63 oglSurface.newLevels(levels=level) |
1858 | 64 |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
65 d.addCallback(received) |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
66 return d |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
67 |
1858 | 68 |
466 | 69 class StatusKeys(QWidget): |
70 """listens for dispatcher signal 'status' and displays the key/value args""" | |
1858 | 71 |
466 | 72 def __init__(self, parent): |
73 QWidget.__init__(self) | |
74 self.layout = QVBoxLayout() | |
75 self.setLayout(self.layout) | |
1858 | 76 self.row = {} # key name : (Frame, value Label) |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
77 dispatcher.connect(self.status, "status") |
1858 | 78 |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
79 def status(self, key, value): |
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
80 if key not in self.row: |
466 | 81 row = QWidget() |
82 self.layout.addWidget(row) | |
83 cols = QHBoxLayout() | |
84 row.setLayout(cols) | |
85 lab1 = QLabel(key) | |
86 lab2 = QLabel(value) | |
87 cols.addWidget(lab1) | |
88 cols.addWidget(lab2) | |
89 self.row[key] = lab2 | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
90 else: |
466 | 91 lab = self.row[key] |
92 lab.setText(value) | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
93 |
1858 | 94 |
466 | 95 class Window(QMainWindow): |
1858 | 96 |
463 | 97 def __init__(self, filenames): |
466 | 98 QMainWindow.__init__(self, None) |
99 self.setWindowTitle(dmxclient._id) | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
100 |
466 | 101 w = QWidget() |
102 self.setCentralWidget(w) | |
103 mainLayout = QVBoxLayout() | |
104 w.setLayout(mainLayout) | |
1858 | 105 |
106 self.glWidget = Surface(self, filenames, imgRescaleTo=128 * 2) | |
466 | 107 |
108 mainLayout.addWidget(self.glWidget) | |
109 | |
110 status = StatusKeys(mainLayout) | |
1858 | 111 mainLayout.addWidget(status) |
112 | |
463 | 113 |
466 | 114 def requiredImages(graph): |
115 """filenames that we'll need to show, based on a config structure | |
116 like this: | |
117 ch:frontLeft a :Channel; | |
118 :previewLayer [ :path "lightsim/skyline/front-left.png" ] . | |
119 """ | |
120 filenames = [] | |
121 for lyr in graph.objects(None, L9['previewLayer']): | |
122 for p in graph.objects(lyr, L9['path']): | |
123 filenames.append(str(p)) | |
124 return filenames | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
125 |
1858 | 126 |
463 | 127 if __name__ == '__main__': |
128 app = reactor.qApp | |
129 | |
130 graph = showconfig.getGraph() | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
131 |
466 | 132 window = Window(requiredImages(graph)) |
463 | 133 window.show() |
134 | |
623
46d319974176
move networking settings to config.n3
drewp@bigasterisk.com
parents:
468
diff
changeset
|
135 serv = Proxy(networking.dmxServer.url) |
466 | 136 pollFreq = updatefreq.Updatefreq() |
137 LoopingCall(poll, graph, serv, pollFreq, window.glWidget).start(.05) | |
463 | 138 |
139 reactor.run() |