[vtkusers] Animation without polling?

John Platt jcplatt at dsl.pipex.com
Fri Sep 11 04:51:30 EDT 2009


Hi,

After rendering each frame, allow any queued messages to be processed -

case vtkCommand::AnimationCueTickEvent:

{

    .....



    self->Render();

    // Allow interaction with the scene and UI.

    self->Pump();

}

break;



This is an MFC implementation of Pump() -



BOOL Pump()

{

    MSG msg;

    while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )

    {

        if ( ! AfxGetThread()->PumpMessage() )

        {

            ::PostQuitMessage( 0 );

            return FALSE;

        }

    }

    LONG lIdle = 0;

    while ( AfxGetThread()->OnIdle( lIdle++ ) );

    return TRUE;

}



This seems to works OK on Windows.



HTH



John.

  ----- Original Message ----- 
  From: Guido Rodriguez 
  To: mark.gooding at gmail.com 
  Cc: vtkusers at vtk.org 
  Sent: Friday, September 11, 2009 8:57 AM
  Subject: Re: [vtkusers] Animation without polling?


  Mark, thank you.
  I have found an example, how vtkAnimationCues and vtkAnimationScenes can be used, at http://www.vtk.org/pipermail/vtkusers/2005-April/079340.html. I didn't know these animation classes before, and find them very helpful.

  But for the specific problem, how to run an animation parallel to listening to mouse/key events, I don't see how this helps, yet.
  The example above starts animation with
    scene->Play();
  How can this coexist with a call to vtkRenderWindowInteractor::Start()?
  Both calls run their own event loop, the one handling animation events, the other handling interaction events.

  I'm looking forward to your more detailed information.

  Regards,
  Guido

  > Date: Thu, 10 Sep 2009 17:06:39 +0100
  > Subject: Re: [vtkusers] Animation without polling?
  > From: mark.gooding at gmail.com
  > To: guidorodriguez1952 at hotmail.com
  > CC: vtkusers at vtk.org
  > 
  > you shouldn't have to write a complete vtkRenderWindowInteractor, just
  > add an observe to handle AnimationCueTickEvents
  > 
  > http://www.vtk.org/doc/nightly/html/classvtkCommand.html
  > 
  > i'll try to send you more detailed information later. I don't have my
  > software which did animation to hand right now.
  > 
  > Mark
  > 
  > 
  > 2009/9/10 Guido Rodriguez <guidorodriguez1952 at hotmail.com>:
  > > Dear VTK users/developers,
  > > I ask for guidance, how animated visualization is done right with VTK. What
  > > I have in mind is an application which calculates, let's say, a temperature
  > > field, which changes in time. Whenever the field is completely calculated
  > > for the next time step, the visualization should be updated. In parallel,
  > > the user should be able to work with the mouse/key controls to rotate the
  > > view, zoom, interact with 3D widgets, etc.
  > >
  > > The obvious way would be to run VTK in one thread, and the calculation in
  > > another. Each finished calculation step would notify VTK to update. But it
  > > doesn't work like this. At least not with the X windows system. When I call
  > > some pipeline's Update() function from a different thread, I get an "invalid
  > > thread access".
  > >
  > > Next attempt. I implement an event buffer, which is written to by the
  > > calculation thread, and which is read from by the VTK thread. This works
  > > like a charm. Now VTK can check whether an update is necessary and get the
  > > required data from the event buffer. But _when_ does VTK check for updates?
  > > I can't seem to find a solution which sets VTK to sleep until either a
  > > mouse/key event happens or until the calculation thread releases some lock,
  > > simply because any VTK callback waiting for notification from a different
  > > thread would stop VTK from reacting to mouse/key events during this period.
  > >
  > > The only solution I can see is to add a timer event like every 10 ms, which
  > > checks the event buffer for updates. This works, but is it recommended?
  > > Threading libraries have introduced locks and notification to avoid the
  > > overhead from polling at interactive rates for events that may occur only
  > > every few seconds. How can good multithreading programming styles be applied
  > > to VTK?
  > >
  > > I hope the problem is clear. Can a different thread trigger pipeline updates
  > > under X windows? Or do I have to write my own vtkRenderWindowInteractor?
  > >
  > > Regards,
  > > Guido
  > > ________________________________
  > > With Windows Live, you can organize, edit, and share your photos.
  > > _______________________________________________
  > > 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
  > >
  > > Follow this link to subscribe/unsubscribe:
  > > http://www.vtk.org/mailman/listinfo/vtkusers
  > >
  > >


------------------------------------------------------------------------------
  Share your memories online with anyone you want anyone you want. 


------------------------------------------------------------------------------


  _______________________________________________
  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

  Follow this link to subscribe/unsubscribe:
  http://www.vtk.org/mailman/listinfo/vtkusers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090911/9a15b37c/attachment.htm>


More information about the vtkusers mailing list