[vtkusers] key press event in vtkWeb

ivan rodriguez ivandiegorodriguez at gmail.com
Mon Dec 3 11:35:34 EST 2018


Thanks a lot!

On Mon, Dec 3, 2018 at 5:33 PM Sebastien Jourdain <
sebastien.jourdain at kitware.com> wrote:

> 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 <
> ivandiegorodriguez at gmail.com> wrote:
>
>> 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 <
>> sebastien.jourdain at kitware.com> wrote:
>>
>>> 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 <
>>> ivandiegorodriguez at gmail.com> wrote:
>>>
>>>> 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 <
>>>> sebastien.jourdain at kitware.com> wrote:
>>>>
>>>>> 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 <
>>>>> ivandiegorodriguez at gmail.com> wrote:
>>>>>
>>>>>> 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)
>>>>>>
>>>>>> _______________________________________________
>>>>>> Powered by www.kitware.com
>>>>>>
>>>>>> Visit other Kitware open-source projects at
>>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>>
>>>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>>>
>>>>>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>>>>>
>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>> https://public.kitware.com/mailman/listinfo/vtkusers
>>>>>>
>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/vtkusers/attachments/20181203/7bb45687/attachment.html>


More information about the vtkusers mailing list