Skip to content

TransformPipeline

vtk-examples/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 question about this example, 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();
  }
}