GRASS and VTK

From GRASS-Wiki
Jump to navigation Jump to search

Export for VTK

Modules


Workflows

  1. Load 3D model data into GRASS with r3.in.ascii. (see Help with 3D)
  2. Split 3D raster map into individual layers, and stack them all into one map. (see the r.stack addon module)
  3. Run r.colors with the -e equalize histogram flag to balance the colors nicely over the entire 3D dataset.
  4. Export the new color rules with r.colors.out_vtk.
  5. Load in Paraview or similar, create a movie. (animated screenshot)


vtkGRASSBridge

vtkGRASSBrige provides a VTK/C++ interface to most of the GRASS GIS raster and vector C library functions. Its using an intuitive class structure to hide the complexity of the GRASS libraries.

Additionally, the vtkGRASSBridge provides access to GRASS C library functions for Python and Java, using the VTK wrapper.

Reader to convert GRASS datasets (raster, vector) into VTK datasets are provided for raster and vector data. All vtkImage- and vtkPolyDataAlgorithms can be used to process GRASS raster and vector data. vtkImages can be directly written as GRASS raster maps into a GRASS location.

This library can be used to build comprehensive 3D visualisation of GRASS GIS data with Java, Python and C++, as well as base for complex multithreaded image and vector filter to process GRASS GIS datasets i.e: as backend for WPS server.

Using vtkGRASSBridge in Python

Here a small Python example to triangulate vector points from the North Carolina demo data set with the VTK delaunay filter class:

# The purpose of this example is
# to read a grass vector map without topology information
# into the VTK poly data format and processing that map with vtkDelaunay2D.
# The processed data is written as VTK XML file to the file system

# Init grass variables
init = vtkGRASSInit()

# Now build the pipeline
# read the vector map without creating topology
reader = vtkGRASSVectorPolyDataReader() # The reader does not need topology information
reader.SetVectorName("elev_lid792_randpts")

# Setup the delaunay triangulation
delaunay = vtkDelaunay2D()
delaunay.SetInputConnection(reader.GetOutputPort())

# write the data as XML with base64 encoding
writer = vtkXMLPolyDataWriter()
writer.SetFileName("/tmp/test.vtk")
writer.SetInputConnection(delaunay.GetOutputPort())
writer.Write()

Import of VTK data into GRASS

Implemented in the VTK-GRASS-Bridge:

Links