forked from Kitware/ParaView
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpvpytonapp.py
85 lines (66 loc) · 2.73 KB
/
pvpytonapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from PyQt4 import QtCore, QtGui, QtNetwork
from paraview import simple as pvsimple
from vtk.qt4 import QVTKRenderWindowInteractor
class ParaViewClient(QtCore.QObject):
def __init__(self, port, serverHost=None, serverPort=11111):
self.tcpServer = QtNetwork.QTcpServer()
if not self.tcpServer.listen(QtNetwork.QHostAddress.Any, port):
print 'Could not list on port %d' % port
return
self.tcpServer.newConnection.connect(self.acceptClient)
self.timer = QtCore.QTimer()
self.timer.setSingleShot(True)
self.timer.timeout.connect(self.render)
if serverHost:
pvsimple.Connect(serverHost, serverPort)
self.createPipeline()
self.setupManipulators()
self.widget = \
QVTKRenderWindowInteractor.QVTKRenderWindowInteractor(\
rw=self.renderView.GetRenderWindow(),
iren=self.renderView.GetInteractor())
self.widget.Initialize()
self.widget.Start()
self.widget.show()
pvsimple.Render(self.renderView)
def setupManipulators(self):
cm = self.renderView.GetProperty("CameraManipulators")
cm.AddProxy(pvsimple.servermanager.rendering.TrackballRotate().SMProxy)
zoom = pvsimple.servermanager.rendering.TrackballZoom()
zoom.Button = 'Right Button'
cm.AddProxy(zoom.SMProxy)
pan = pvsimple.servermanager.rendering.TrackballPan1()
pan.Button = 'Center Button'
cm.AddProxy(pan.SMProxy)
pan2 = pvsimple.servermanager.rendering.TrackballPan1()
pan2.Button = 'Left Button'
pan2.Shift = True
pan2.Control = True
cm.AddProxy(pan2.SMProxy)
self.renderView.UpdateVTKObjects()
def createPipeline(self):
pass
def acceptClient(self):
self.connection = self.tcpServer.nextPendingConnection()
self.connection.readyRead.connect(self.readData)
self.tcpServer.close()
def render(self):
pvsimple.Render(self.renderView)
def readData(self):
instr = QtCore.QDataStream(self.connection)
if self.connection.bytesAvailable >= 8:
self.renderView.GetActiveCamera().Azimuth(instr.readDouble())
if not self.timer.isActive():
self.timer.start(30)
if self.connection.bytesAvailable() >= 8:
QtCore.QTimer.singleShot(30, self.readData)
if __name__ == '__main__':
class SimpleClient(ParaViewClient):
def createPipeline(self):
self.renderView = pvsimple.CreateRenderView()
pvsimple.Sphere()
pvsimple.Show()
app = QtGui.QApplication(['ParaView Python App'])
#s = ParaViewClient(12345, 'localhost')
s = SimpleClient(12345)
app.exec_()