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_()
|