ivan rodriguez
2018-12-03 15:46:46 UTC
Hello,
I'm using the module vtkWeb for Remote Rendering, following this simple
python example:
*https://github.com/dmreagan/vtk-remote-render/blob/master/server/vtk_server.py
<https://github.com/dmreagan/vtk-remote-render/blob/master/server/vtk_server.py>*
and I have modified it in order to include a keyPress event. The code works
but the
key event is not working . Please find my code below (the only modification
from the link is the class MyInteractorStyle ).
I'll really appreciate any help with this!
Thanks !!
##########################################################################
##########################################################################
# import to process args
import sys
import os
# import vtk modules.
import vtk
from vtk.web import protocols
from vtk.web import wslink as vtk_wslink
from wslink import server
try:
import argparse
except ImportError:
# since Python 2.6 and earlier don't have argparse, we simply provide
# the source for the same as _argparse and we use it instead.
from vtk.util import _argparse as argparse
#
=============================================================================
# Create custom ServerProtocol class to handle clients requests
#
=============================================================================
class MyInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self,renderer, cone):
self.parent = renderer.GetInteractor()
self.resolution=5
self.cone = cone
self.AddObserver("KeyPressEvent",self.keyPressEvent)
def keyPressEvent(self,obj,event):
key = self.parent.GetKeySym()
if key == 'l':
print(key)
self.cone.SetResolution(self.resolution)
self.resolution+=1
return
class _WebCone(vtk_wslink.ServerProtocol):
# Application configuration
view = None
authKey = "wslink-secret"
def initialize(self):
global renderer, renderWindow, renderWindowInteractor, cone,
mapper, actor
# Bring used components
self.registerVtkWebProtocol(protocols.vtkWebMouseHandler())
self.registerVtkWebProtocol(protocols.vtkWebViewPort())
self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery())
self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery())
# Update authentication key to use
self.updateSecret(_WebCone.authKey)
# Create default pipeline (Only once for all the session)
if not _WebCone.view:
# VTK specific code
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
cone = vtk.vtkConeSource()
mapper = vtk.vtkPolyDataMapper()
actor = vtk.vtkActor()
mapper.SetInputConnection(cone.GetOutputPort())
actor.SetMapper(mapper)
renderWindowInteractor.SetInteractorStyle(MyInteractorStyle(renderWindow,
cone))
renderer.AddActor(actor)
renderer.ResetCamera()
renderWindow.Render()
# VTK Web application specific
_WebCone.view = renderWindow
self.getApplication().GetObjectIdMap().SetActiveObject("VIEW",
renderWindow)
# renderWindowInteractor.Start()
#
=============================================================================
# Main: Parse args and start server
#
=============================================================================
if __name__ == "__main__":
# Create argument parser
parser = argparse.ArgumentParser(description="VTK/Web Cone
web-application")
# Add default arguments
server.add_arguments(parser)
# Extract arguments
args = parser.parse_args()
# Configure our current application
_WebCone.authKey = args.authKey
# Start server
server.start_webserver(options=args, protocol=_WebCone)
I'm using the module vtkWeb for Remote Rendering, following this simple
python example:
*https://github.com/dmreagan/vtk-remote-render/blob/master/server/vtk_server.py
<https://github.com/dmreagan/vtk-remote-render/blob/master/server/vtk_server.py>*
and I have modified it in order to include a keyPress event. The code works
but the
key event is not working . Please find my code below (the only modification
from the link is the class MyInteractorStyle ).
I'll really appreciate any help with this!
Thanks !!
##########################################################################
##########################################################################
# import to process args
import sys
import os
# import vtk modules.
import vtk
from vtk.web import protocols
from vtk.web import wslink as vtk_wslink
from wslink import server
try:
import argparse
except ImportError:
# since Python 2.6 and earlier don't have argparse, we simply provide
# the source for the same as _argparse and we use it instead.
from vtk.util import _argparse as argparse
#
=============================================================================
# Create custom ServerProtocol class to handle clients requests
#
=============================================================================
class MyInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self,renderer, cone):
self.parent = renderer.GetInteractor()
self.resolution=5
self.cone = cone
self.AddObserver("KeyPressEvent",self.keyPressEvent)
def keyPressEvent(self,obj,event):
key = self.parent.GetKeySym()
if key == 'l':
print(key)
self.cone.SetResolution(self.resolution)
self.resolution+=1
return
class _WebCone(vtk_wslink.ServerProtocol):
# Application configuration
view = None
authKey = "wslink-secret"
def initialize(self):
global renderer, renderWindow, renderWindowInteractor, cone,
mapper, actor
# Bring used components
self.registerVtkWebProtocol(protocols.vtkWebMouseHandler())
self.registerVtkWebProtocol(protocols.vtkWebViewPort())
self.registerVtkWebProtocol(protocols.vtkWebViewPortImageDelivery())
self.registerVtkWebProtocol(protocols.vtkWebViewPortGeometryDelivery())
# Update authentication key to use
self.updateSecret(_WebCone.authKey)
# Create default pipeline (Only once for all the session)
if not _WebCone.view:
# VTK specific code
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
cone = vtk.vtkConeSource()
mapper = vtk.vtkPolyDataMapper()
actor = vtk.vtkActor()
mapper.SetInputConnection(cone.GetOutputPort())
actor.SetMapper(mapper)
renderWindowInteractor.SetInteractorStyle(MyInteractorStyle(renderWindow,
cone))
renderer.AddActor(actor)
renderer.ResetCamera()
renderWindow.Render()
# VTK Web application specific
_WebCone.view = renderWindow
self.getApplication().GetObjectIdMap().SetActiveObject("VIEW",
renderWindow)
# renderWindowInteractor.Start()
#
=============================================================================
# Main: Parse args and start server
#
=============================================================================
if __name__ == "__main__":
# Create argument parser
parser = argparse.ArgumentParser(description="VTK/Web Cone
web-application")
# Add default arguments
server.add_arguments(parser)
# Extract arguments
args = parser.parse_args()
# Configure our current application
_WebCone.authKey = args.authKey
# Start server
server.start_webserver(options=args, protocol=_WebCone)