Mercurial > code > home > repos > light9
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 |
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 | 4 import sys, logging |
463 | 5 |
6 sys.path.append("lib") | |
7 import qt4reactor | |
8 qt4reactor.install() | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
9 |
463 | 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 | 13 from louie import dispatcher |
466 | 14 from PyQt4.QtGui import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QMainWindow |
463 | 15 from OpenGL.GL import * |
16 from OpenGL.GLU import * | |
17 | |
18 from light9 import networking, Patch, showconfig, dmxclient, updatefreq, prof | |
19 from light9.namespaces import L9 | |
20 from lightsim.openglsim import Surface | |
21 | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
22 log = logging.getLogger() |
1858 | 23 logging.basicConfig( |
24 format= | |
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 | 28 |
466 | 29 def filenamesForChan(graph, chan): |
30 for lyr in graph.objects(chan, L9['previewLayer']): | |
31 for imgPath in graph.objects(lyr, L9['path']): | |
32 yield imgPath | |
33 | |
1858 | 34 |
466 | 35 _lastLevels = None |
1858 | 36 |
37 | |
463 | 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 | 42 |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
43 def received(dmxLevels): |
466 | 44 global _lastLevels |
45 if dmxLevels == _lastLevels: | |
46 return | |
47 _lastLevels = dmxLevels | |
468 | 48 |
1858 | 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 | 59 for imgPath in filenamesForChan(graph, chan): |
60 level[str(imgPath)] = lev | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
61 |
463 | 62 oglSurface.newLevels(levels=level) |
1858 | 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 | 67 |
466 | 68 class StatusKeys(QWidget): |
69 """listens for dispatcher signal 'status' and displays the key/value args""" | |
1858 | 70 |
466 | 71 def __init__(self, parent): |
72 QWidget.__init__(self) | |
73 self.layout = QVBoxLayout() | |
74 self.setLayout(self.layout) | |
1858 | 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 | 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 | 80 row = QWidget() |
81 self.layout.addWidget(row) | |
82 cols = QHBoxLayout() | |
83 row.setLayout(cols) | |
84 lab1 = QLabel(key) | |
85 lab2 = QLabel(value) | |
86 cols.addWidget(lab1) | |
87 cols.addWidget(lab2) | |
88 self.row[key] = lab2 | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
89 else: |
466 | 90 lab = self.row[key] |
91 lab.setText(value) | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
92 |
1858 | 93 |
466 | 94 class Window(QMainWindow): |
1858 | 95 |
463 | 96 def __init__(self, filenames): |
466 | 97 QMainWindow.__init__(self, None) |
98 self.setWindowTitle(dmxclient._id) | |
352
9d1f323fb3d3
new bin/lightsim tied to dmxserver
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
99 |
466 | 100 w = QWidget() |
101 self.setCentralWidget(w) | |
102 mainLayout = QVBoxLayout() | |
103 w.setLayout(mainLayout) | |
1858 | 104 |
105 self.glWidget = Surface(self, filenames, imgRescaleTo=128 * 2) | |
466 | 106 |
107 mainLayout.addWidget(self.glWidget) | |
108 | |
109 status = StatusKeys(mainLayout) | |
1858 | 110 mainLayout.addWidget(status) |
111 | |
463 | 112 |
466 | 113 def requiredImages(graph): |
114 """filenames that we'll need to show, based on a config structure | |
115 like this: | |
116 ch:frontLeft a :Channel; | |
117 :previewLayer [ :path "lightsim/skyline/front-left.png" ] . | |
118 """ | |
119 filenames = [] | |
120 for lyr in graph.objects(None, L9['previewLayer']): | |
121 for p in graph.objects(lyr, L9['path']): | |
122 filenames.append(str(p)) | |
123 return filenames | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
124 |
1858 | 125 |
463 | 126 if __name__ == '__main__': |
127 app = reactor.qApp | |
128 | |
129 graph = showconfig.getGraph() | |
353
941cfe1e1691
lightsim now reads levels from dmxserver
drewp@bigasterisk.com
parents:
352
diff
changeset
|
130 |
466 | 131 window = Window(requiredImages(graph)) |
463 | 132 window.show() |
133 | |
623
46d319974176
move networking settings to config.n3
drewp@bigasterisk.com
parents:
468
diff
changeset
|
134 serv = Proxy(networking.dmxServer.url) |
466 | 135 pollFreq = updatefreq.Updatefreq() |
136 LoopingCall(poll, graph, serv, pollFreq, window.glWidget).start(.05) | |
463 | 137 |
138 reactor.run() |