Skip to content

Delaunay2D

Repository source: Delaunay2D

Description

This example generates a set of points aligned with an XY grid with random heights (z values). The Delaunay2D filter "magically" knows how to triangulate this type of point set because it projects the points by default onto the XY axis and then performs a 2D Delaunay triangulation. The result is a mesh on the input points.

Other languages

See (Cxx), (Python)

Question

If you have a question about this example, please use the VTK Discourse Forum

Code

Delaunay2D.java

import vtk.vtkRenderWindow;
import vtk.vtkActor;
import vtk.vtkNativeLibrary;
import vtk.vtkPolyDataMapper;
import vtk.vtkNamedColors;
import vtk.vtkRenderer;
import vtk.vtkRenderWindowInteractor;
import vtk.vtkDelaunay2D;
import vtk.vtkPoints;
import vtk.vtkPolyData;
import vtk.vtkVertexGlyphFilter;

public class Delaunay2D 
{
  //-----------------------------------------------------------------
  // 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 PointActor Color 
    double PointActorColor[] = new double[4];
    //Renderer Background Color
    double Bgcolor[] = new double[4];
    //MeshActorColor
    double MeshActorColor[] = new double[4];

    colors.GetColor("Coral", PointActorColor);
    colors.GetColor("DimGray", Bgcolor);
    colors.GetColor("Aquamarine", MeshActorColor);

    //Create a set of heighs on a grid.
    // This is often called a "terrain map".

    vtkPoints Points = new vtkPoints();  

    int GridSize = 10;
    for(int x = 0; x < GridSize; x++)
    {
      for(int y = 0; y < GridSize; y++)
      {
        Points.InsertNextPoint(x, y, (x+y)/(y+1));
      }
    }

    //Add the grid points to a polydata object
    vtkPolyData PolyData = new vtkPolyData();
    PolyData.SetPoints(Points);


    //Triangulate the grid points
    vtkDelaunay2D Delaunay = new vtkDelaunay2D();
    Delaunay.SetInputData(PolyData);

    vtkPolyDataMapper MeshMapper = new vtkPolyDataMapper();
    MeshMapper.SetInputConnection(Delaunay.GetOutputPort());

    vtkActor MeshActor = new vtkActor();
    MeshActor.SetMapper(MeshMapper);
    MeshActor.GetProperty().SetColor(MeshActorColor);
    MeshActor.GetProperty().EdgeVisibilityOn();


    vtkVertexGlyphFilter GlyphFilter = new vtkVertexGlyphFilter();
    GlyphFilter.SetInputData(PolyData);

    vtkPolyDataMapper PointMapper = new vtkPolyDataMapper();
    PointMapper.SetInputConnection(GlyphFilter.GetOutputPort());

    vtkActor PointActor = new vtkActor();
    PointActor.GetProperty().SetColor(PointActorColor);
    PointActor.GetProperty().SetPointSize(5);
    PointActor.SetMapper(PointMapper);

    //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);

    // Visualise the arrow
    ren.AddActor(PointActor);
    ren.AddActor(MeshActor);
    ren.SetBackground(Bgcolor);

    renWin.SetSize(300, 300);
    renWin.Render();

    iren.Initialize();
    iren.Start();

  } 
}