# Animation

VTKExamples/Java/Visualization/Animation

### Description

This example demonstrates how to create a simple animation. A timer is used to move a sphere across a scene.

### Code

Animation.java

    import vtk.*;

    public class Animation
    {

      static
      {
        System.loadLibrary("vtkCommonJava");
        System.loadLibrary("vtkFilteringJava");
        System.loadLibrary("vtkIOJava");
        System.loadLibrary("vtkImagingJava");
        System.loadLibrary("vtkGraphicsJava");
        System.loadLibrary("vtkRenderingJava");
      }

      static class vtkTimerCallback
      {
        void Execute()
        {
          ++this.TimerCount;
          System.out.println(this.TimerCount);
          actor.SetPosition(this.TimerCount, this.TimerCount,0);
          iren.GetRenderWindow().Render();
        }

        private int TimerCount = 0;
        public vtkActor actor;
        public vtkRenderWindowInteractor iren;
      }

      public static void main(String[] args)
      {
        //Create a sphere
        vtkSphereSource sphereSource = new vtkSphereSource();
        sphereSource.SetCenter(0.0, 0.0, 0.0);
        sphereSource.SetRadius(5.0);
        sphereSource.Update();

        //Create a mapper and actor
        vtkPolyDataMapper mapper = new vtkPolyDataMapper();
        mapper.SetInputConnection(sphereSource.GetOutputPort());
        vtkActor actor = new vtkActor();
        actor.SetMapper(mapper);

        //Create a renderer, render window, and interactor
        vtkRenderer renderer = new vtkRenderer();
        vtkRenderWindow renderWindow = new vtkRenderWindow();
        renderWindow.AddRenderer(renderer);
        vtkRenderWindowInteractor renderWindowInteractor = new 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
        vtkTimerCallback cb = new vtkTimerCallback();
        cb.actor = actor;
        cb.iren = renderWindowInteractor;
        renderWindowInteractor.AddObserver("TimerEvent", cb, "Execute");

        int timerId = renderWindowInteractor.CreateRepeatingTimer(100);
        System.out.println("timerId: " + timerId);

        //start the interaction and timer
        renderWindowInteractor.Start();
      }
    }