Skip to content


# TransformPipeline

VTKEx/Java/PolyData/TransformPipeline

### Description

This example demonstrate how to connect a transformation for keeping coordinate one actor relative to another.

Other languages

See (Cxx)

Question

If you have a simple question about this example contact us at VTKExProject If your question is more complex and may require extended discussion, please use the VTK Discourse Forum

### Code

TransformPipeline.java

    import vtk.vtkActor;
    import vtk.vtkNamedColors;
    import vtk.vtkNativeLibrary;
    import vtk.vtkPolyDataMapper;
    import vtk.vtkRenderWindow;
    import vtk.vtkRenderWindowInteractor;
    import vtk.vtkRenderer;
    import vtk.vtkCylinderSource;
    import vtk.vtkTransform;

    public class TransformPipeline
    {
      // -----------------------------------------------------------------
      // Load VTK library and print which library was not properly loaded
      static
      {
        if (!vtkNativeLibrary.LoadAllNativeLibraries())
        {
          for (vtkNativeLibrary lib : vtkNativeLibrary.values())
          {
            if (!lib.IsLoaded())
            {
              System.out.println(lib.GetLibraryName() + " not loaded");
            }
          }
        }
        vtkNativeLibrary.DisableOutputWindow(null);
      }
      // -----------------------------------------------------------------

      public static void main(String args[])
      {
       vtkNamedColors colors = new vtkNamedColors();

       //For arm Color
       double armColor[] = new double[4];
       //For forearm Color
       double forearmColor[] = new double[4];
       //For hand Color
       double handColor[] = new double[4];
       //Renderer Background Color
       double Bgcolor[] = new double[4];

       colors.GetColor("DarkKhaki", armColor);
       colors.GetColor("Blue", forearmColor);
       colors.GetColor("GreenYellow", handColor);
       colors.GetColor("MidnightBlue", Bgcolor);

       //arm
       vtkCylinderSource arm = new vtkCylinderSource();
       arm.SetRadius(8);
       arm.SetHeight(20);
       arm.SetResolution(20);

       vtkPolyDataMapper armMapper = new vtkPolyDataMapper();
       armMapper.SetInputConnection(arm.GetOutputPort());

       vtkTransform armTransform = new vtkTransform();

       vtkActor armActor = new vtkActor();
       armActor.SetUserTransform(armTransform);
       armActor.SetMapper(armMapper);
       armActor.GetProperty().SetColor(armColor);

       //forearm
       vtkCylinderSource forearm = new vtkCylinderSource();
       forearm.SetRadius(6);
       forearm.SetHeight(15);
       forearm.SetResolution(20);
       forearm.SetCenter(0, 10.5, -2.5);;

       vtkPolyDataMapper forearmMapper = new vtkPolyDataMapper();
       forearmMapper.SetInputConnection(forearm.GetOutputPort());

       vtkTransform forearmTransform = new vtkTransform();
       forearmTransform.SetInput(armTransform);

       vtkActor forearmActor = new vtkActor();
       forearmActor.SetUserTransform(forearmTransform);
       forearmActor.SetMapper(forearmMapper);
       forearmActor.GetProperty().SetColor(forearmColor);

       //hand
       vtkCylinderSource hand = new vtkCylinderSource();
       hand.SetRadius(4);
       hand.SetHeight(10);
       hand.SetResolution(20);
       hand.SetCenter(0, 18.5, -2.5);

       vtkPolyDataMapper handMapper = new vtkPolyDataMapper();
       handMapper.SetInputConnection(hand.GetOutputPort());

       vtkTransform handTransform = new vtkTransform();
       handTransform.SetInput(forearmTransform);

       vtkActor handActor = new vtkActor();
       handActor.SetUserTransform(handTransform);
       handActor.SetMapper(handMapper);
       handActor.GetProperty().SetColor(handColor);

       // Create the renderer, render window and interactor.
       vtkRenderer ren = new vtkRenderer();
       vtkRenderWindow renWin = new vtkRenderWindow();
       renWin.AddRenderer(ren);
       vtkRenderWindowInteractor iren = new vtkRenderWindowInteractor();
       iren.SetRenderWindow(renWin);

       ren.AddActor(armActor);
       ren.AddActor(forearmActor);
       ren.AddActor(handActor);
       ren.SetBackground(Bgcolor);
       renWin.Render();

       //execution of robot arm motion
       for (int i = 0; i<45; i++)
       {
        armTransform.Identity();
        armTransform.RotateZ(-i);
        renWin.Render();
       }
       //execution of robot forearm motion
       for (int i = 0; i<45; i++)
       {
        forearmTransform.Identity();
        forearmTransform.RotateZ(i);
        renWin.Render();
       }
       iren.Start();
      }
    }