Discussion:
[vtkusers] key press event in vtkWeb
ivan rodriguez
2018-12-03 15:46:46 UTC
Permalink
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)
Sebastien Jourdain via vtkusers
2018-12-03 15:54:03 UTC
Permalink
The event handling needs to happen on the client side (JS) which should
then trigger a RPC call to the server to adjust the resolution of the
server data. I don't think we register any key listener in the browser
that's why they don't get forwarded to the server.
Post by ivan rodriguez
Hello,
I'm using the module vtkWeb for Remote Rendering, following this simple
*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
import argparse
# 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
#
=============================================================================
self.parent = renderer.GetInteractor()
self.resolution=5
self.cone = cone
self.AddObserver("KeyPressEvent",self.keyPressEvent)
key = self.parent.GetKeySym()
print(key)
self.cone.SetResolution(self.resolution)
self.resolution+=1
return
# Application configuration
view = None
authKey = "wslink-secret"
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)
# 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
#
=============================================================================
# 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)
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
http://www.vtk.org/Wiki/VTK_FAQ
Search the list archives at: http://markmail.org/search/?q=vtkusers
https://public.kitware.com/mailman/listinfo/vtkusers
ivan rodriguez
2018-12-03 16:22:28 UTC
Permalink
Thanks for the explanation! I don't really know how to add a listener on
the client side so I'll really appreciate any help with that. Do you have
some example or do you know if there are some examples online about that?







On Mon, Dec 3, 2018 at 5:12 PM Sebastien Jourdain <
I'm not saying it is not the way to go. You just need to add a listener on
the client side for the keyPress and forward that to the server.
That's it. Nothing more than that.
On Mon, Dec 3, 2018 at 9:06 AM ivan rodriguez <
Thanks for the quick response!
I have an application written in VTK doing an animation through a
timerCallback and using key events and I wanted to have a similar version
for the browser.
So if vtkWeb is not the right way to go, do you know if vtk.js could be a
good option for that?
Thanks!
On Mon, Dec 3, 2018 at 4:54 PM Sebastien Jourdain <
Post by Sebastien Jourdain via vtkusers
The event handling needs to happen on the client side (JS) which should
then trigger a RPC call to the server to adjust the resolution of the
server data. I don't think we register any key listener in the browser
that's why they don't get forwarded to the server.
On Mon, Dec 3, 2018 at 8:47 AM ivan rodriguez <
Post by ivan rodriguez
Hello,
I'm using the module vtkWeb for Remote Rendering, following this simple
*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
import argparse
# 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
#
=============================================================================
self.parent = renderer.GetInteractor()
self.resolution=5
self.cone = cone
self.AddObserver("KeyPressEvent",self.keyPressEvent)
key = self.parent.GetKeySym()
print(key)
self.cone.SetResolution(self.resolution)
self.resolution+=1
return
# Application configuration
view = None
authKey = "wslink-secret"
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)
# 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
#
=============================================================================
# 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)
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
http://www.vtk.org/Wiki/VTK_FAQ
Search the list archives at: http://markmail.org/search/?q=vtkusers
https://public.kitware.com/mailman/listinfo/vtkusers
Sebastien Jourdain via vtkusers
2018-12-03 16:32:51 UTC
Permalink
Below is an example, but Google should be able to help you also on the JS
side...
https://github.com/Kitware/vtk-js/blob/master/Sources/Rendering/Core/RenderWindowInteractor/index.js#L214-L222

Then for the RPC part you can find some inspiration there even if it is on
ParaView
https://github.com/Kitware/paraviewweb-examples

Just FYI, if that make sense for what you are trying to do, we have support
contract that could speed up the process on your end.

HTH,

Seb
Post by ivan rodriguez
Thanks for the explanation! I don't really know how to add a listener on
the client side so I'll really appreciate any help with that. Do you have
some example or do you know if there are some examples online about that?
On Mon, Dec 3, 2018 at 5:12 PM Sebastien Jourdain <
I'm not saying it is not the way to go. You just need to add a listener
on the client side for the keyPress and forward that to the server.
That's it. Nothing more than that.
On Mon, Dec 3, 2018 at 9:06 AM ivan rodriguez <
Thanks for the quick response!
I have an application written in VTK doing an animation through a
timerCallback and using key events and I wanted to have a similar version
for the browser.
So if vtkWeb is not the right way to go, do you know if vtk.js could be
a good option for that?
Thanks!
On Mon, Dec 3, 2018 at 4:54 PM Sebastien Jourdain <
Post by Sebastien Jourdain via vtkusers
The event handling needs to happen on the client side (JS) which should
then trigger a RPC call to the server to adjust the resolution of the
server data. I don't think we register any key listener in the browser
that's why they don't get forwarded to the server.
On Mon, Dec 3, 2018 at 8:47 AM ivan rodriguez <
Post by ivan rodriguez
Hello,
I'm using the module vtkWeb for Remote Rendering, following this
*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
import argparse
# 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
#
=============================================================================
self.parent = renderer.GetInteractor()
self.resolution=5
self.cone = cone
self.AddObserver("KeyPressEvent",self.keyPressEvent)
key = self.parent.GetKeySym()
print(key)
self.cone.SetResolution(self.resolution)
self.resolution+=1
return
# Application configuration
view = None
authKey = "wslink-secret"
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)
# 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
#
=============================================================================
# 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)
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
http://www.vtk.org/Wiki/VTK_FAQ
Search the list archives at: http://markmail.org/search/?q=vtkusers
https://public.kitware.com/mailman/listinfo/vtkusers
ivan rodriguez
2018-12-03 16:35:34 UTC
Permalink
Thanks a lot!

On Mon, Dec 3, 2018 at 5:33 PM Sebastien Jourdain <
Post by Sebastien Jourdain via vtkusers
Below is an example, but Google should be able to help you also on the JS
side...
https://github.com/Kitware/vtk-js/blob/master/Sources/Rendering/Core/RenderWindowInteractor/index.js#L214-L222
Then for the RPC part you can find some inspiration there even if it is on
ParaView
https://github.com/Kitware/paraviewweb-examples
Just FYI, if that make sense for what you are trying to do, we have
support contract that could speed up the process on your end.
HTH,
Seb
On Mon, Dec 3, 2018 at 9:22 AM ivan rodriguez <
Post by ivan rodriguez
Thanks for the explanation! I don't really know how to add a listener on
the client side so I'll really appreciate any help with that. Do you have
some example or do you know if there are some examples online about that?
On Mon, Dec 3, 2018 at 5:12 PM Sebastien Jourdain <
I'm not saying it is not the way to go. You just need to add a listener
on the client side for the keyPress and forward that to the server.
That's it. Nothing more than that.
On Mon, Dec 3, 2018 at 9:06 AM ivan rodriguez <
Thanks for the quick response!
I have an application written in VTK doing an animation through a
timerCallback and using key events and I wanted to have a similar version
for the browser.
So if vtkWeb is not the right way to go, do you know if vtk.js could be
a good option for that?
Thanks!
On Mon, Dec 3, 2018 at 4:54 PM Sebastien Jourdain <
Post by Sebastien Jourdain via vtkusers
The event handling needs to happen on the client side (JS) which
should then trigger a RPC call to the server to adjust the resolution of
the server data. I don't think we register any key listener in the browser
that's why they don't get forwarded to the server.
On Mon, Dec 3, 2018 at 8:47 AM ivan rodriguez <
Post by ivan rodriguez
Hello,
I'm using the module vtkWeb for Remote Rendering, following this
*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
import argparse
# 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
#
=============================================================================
self.parent = renderer.GetInteractor()
self.resolution=5
self.cone = cone
self.AddObserver("KeyPressEvent",self.keyPressEvent)
key = self.parent.GetKeySym()
print(key)
self.cone.SetResolution(self.resolution)
self.resolution+=1
return
# Application configuration
view = None
authKey = "wslink-secret"
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)
# 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
#
=============================================================================
# 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)
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
http://www.vtk.org/Wiki/VTK_FAQ
Search the list archives at: http://markmail.org/search/?q=vtkusers
https://public.kitware.com/mailman/listinfo/vtkusers
Loading...