[vtkusers] Basic Animation Code
David Doria
daviddoria+vtk at gmail.com
Wed Jan 6 14:06:59 EST 2010
Wed, Jan 6, 2010 at 2:01 PM, Bryan P. Conrad <conrabp at ortho.ufl.edu> wrote:
> David,
> Thanks for the example using a timer! That is much better than the hack I suggested earlier. Here is a python version of your example if anyone is interested:
>
>
> import vtk
>
> class vtkTimerCallback():
> def __init__(self):
> self.timer_count = 0
>
> def execute(self,obj,event):
> print self.timer_count
> self.actor.SetPosition(self.timer_count, self.timer_count,0);
> iren = obj
> iren.GetRenderWindow().Render()
> self.timer_count += 1
>
>
> def main():
> #Create a sphere
> sphereSource = vtk.vtkSphereSource()
> sphereSource.SetCenter(0.0, 0.0, 0.0)
> sphereSource.SetRadius(5)
>
> #Create a mapper and actor
> mapper = vtk.vtkPolyDataMapper()
> mapper.SetInputConnection(sphereSource.GetOutputPort())
> actor = vtk.vtkActor()
> actor.SetMapper(mapper)
> prop = actor.GetProperty()
>
> # Setup a renderer, render window, and interactor
> renderer = vtk.vtkRenderer()
> renderWindow = vtk.vtkRenderWindow()
> #renderWindow.SetWindowName("Test")
>
> renderWindow.AddRenderer(renderer);
> renderWindowInteractor = vtk.vtkRenderWindowInteractor()
> renderWindowInteractor.SetRenderWindow(renderWindow)
>
> #Add the actor to the scene
> renderer.AddActor(actor)
> renderer.SetBackground(1,1,1) # Background color white
>
> #Render and interact
> renderWindow.Render()
>
> # Initialize must be called prior to creating timer events.
> renderWindowInteractor.Initialize()
>
> # Sign up to receive TimerEvent
> cb = vtkTimerCallback()
> cb.actor = actor
> renderWindowInteractor.AddObserver('TimerEvent', cb.execute)
> timerId = renderWindowInteractor.CreateRepeatingTimer(100);
>
> #start the interaction and timer
> renderWindowInteractor.Start()
>
>
> if __name__ == '__main__':
> main()
>
> ____________________________
> Bryan P. Conrad, Ph.D.
> Senior Engineer
>
> Department of Orthopaedics and Rehabilitation
> University of Florida
> PO Box 112727
> Gainesville, FL 32611
> Phone: 352.273.7412
> Fax: 352.273.7407
>
>
> -----Original Message-----
> From: vtkusers-bounces at vtk.org [mailto:vtkusers-bounces at vtk.org] On Behalf Of David Doria
> Sent: Wednesday, January 06, 2010 1:37 PM
> Cc: vtkusers at vtk.org
> Subject: Re: [vtkusers] Basic Animation Code
>
> On Wed, Jan 6, 2010 at 1:21 PM, David Doria <daviddoria+vtk at gmail.com> wrote:
>> On Wed, Jan 6, 2010 at 9:07 AM, David Gobbi <david.gobbi at gmail.com> wrote:
>>> On Tue, Jan 5, 2010 at 9:28 PM, David Doria <daviddoria+vtk at gmail.com> wrote:
>>>> On Wed, Dec 16, 2009 at 10:27 PM, Leon Danon <kernelblaha at gmail.com> wrote:
>>>>> Hi All,
>>>>>
>>>>> I'm attempting (and failing) to run a simple animated model where the
>>>>> position and colour of an actor (in my case a cylider) changes, while at the
>>>>> same time being rendered.
>>>>> I have done a bit of googling, but have come up with nothing very useful. My
>>>>> understanding is that it should be done with threads (one for the renderer,
>>>>> the other for the model).
>>>>> Does anyone have a simple example in C++ of how this would be implemented.
>>>>> It would be greatly appreciated.
>>>>> Thanks
>>>>> Leon
>>>>
>>>> Surely someone knows how to do this? Is an example of what you want
>>>> something like a loop to move an object across the scene?
>>>>
>>>> pseudo code:
>>>>
>>>> for(xposition = 1; xposition < 10; xposition++)
>>>> {
>>>> actor.setposition(xposition,0,0);
>>>> render scene
>>>> }
>>>>
>>>> Can anyone translate to VTK?
>>>>
>>>> Thanks,
>>>>
>>>> David
>>>
>>> In general, animation should be done with timer events, because timers
>>> don't interfere with the other event handling in an application.
>>>
>>> Using for/while loops for animation will block the application from
>>> doing anything _but_ the animation until the loop has completed.
>>> Threads don't add much benefit over timers and are tricky to use
>>> because a global VTK mutex lock would be needed, and mistakes in the
>>> use of threads can easily lead to freezing, crashing, and other
>>> unpredictable application behavior.
>>>
>>> The example Rendering/Testing/Cxx/TestInteractorTimers.cxx gives some
>>> good clues about how animation can be done in VTK (there are probably
>>> other, better examples but this one is in C++ and not Tcl or Python).
>>>
>>> David
>>
>>
>> Here is a demo of using a timer:
>> http://www.cmake.org/Wiki/VTK/Examples/Utilities/Timer
>>
>> I'm working on a demo of moving a sphere across a scene. I'll post it
>> here when it is done (probably over the weekend).
>>
>> Thanks,
>>
>> David D.
>>
>
> By this weekend, I mean this hour, because I am addicted to examples....
>
> http://www.cmake.org/Wiki/VTK/Examples/Utilities/Animation
>
> Thanks,
>
> David
Great - I put it on the wiki:
http://www.cmake.org/Wiki/VTK/Examples/Python/Animation
Thanks,
David
More information about the vtkusers
mailing list