scientific visualization using vtk

72
Scientific Visualization Scientific Visualization Using VTK Using VTK Robert Putnam [email protected] Scientific Visualization Using VTK – Spring 2012

Upload: dolan

Post on 20-Mar-2016

80 views

Category:

Documents


2 download

DESCRIPTION

Scientific Visualization Using VTK. Robert Putnam [email protected]. Scientific Visualization Using VTK – Spring 2012. Outline. Introduction VTK overview VTK data geometry/topology Case study Interactive session. Scientific Visualization Using VTK – Spring 2012. Introduction. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Scientific Visualization Using VTK

Scientific Visualization Using VTKScientific Visualization Using VTK

Robert [email protected]

Scientific Visualization Using VTK – Spring 2012

Page 2: Scientific Visualization Using VTK

OutlineOutline

• Introduction• VTK overview• VTK data geometry/topology• Case study• Interactive session

Scientific Visualization Using VTK – Spring 2012

Page 3: Scientific Visualization Using VTK

IntroductionIntroduction

Scientific Visualization Using VTK – Spring 2012

*Adapted from The ParaView Tutorial, Moreland

• Visualization: converting raw data to a form that is viewable and understandable to humans.

• Scientific visualization: specifically concerned with data that has a well-defined representation in 2D or 3D space (e.g., from simulation mesh or scanner).

Page 4: Scientific Visualization Using VTK

VTKVTKVisualization Toolkit

– Inception at GE in 1993; since 1998 spun off to “Kitware”, supported by Sandia Labs.

– Open source– Set of object-oriented class libraries for visualization and data analysis– Several language interfaces

• C++• Tcl• Java• Python

– Portable (MS Windows, Linux, OSX)– Active developer community– Good documentation available, free and otherwise– Professional support services available from Kitware

Scientific Visualization Using VTK – Spring 2012

Page 5: Scientific Visualization Using VTK

Generic visualization pipelineGeneric visualization pipeline

Scientific Visualization Using VTK – Spring 2012

Source(s) Filters(s) Output - - - - - - - - - - - - - - - - - - - - -

data/geometry/topology graphics

Page 6: Scientific Visualization Using VTK

VTK terminology/modelVTK terminology/model

Scientific Visualization Using VTK – Spring 2012

Source Filter Renderer

- - - - - - - - - - - - - - - - - - - - -

data/geometry/topology graphics

Mapper

Page 7: Scientific Visualization Using VTK

VTK terminology/modelVTK terminology/model

Scientific Visualization Using VTK – Spring 2012

Source/ Reader

Filter Renderer

- - - - - - - - - - - - - - - - - - - - -

data/geometry/topology graphics

Mapper

“Scene"

Lights, Camera

DataObject ProcessObject

Actor

RenderWindow

Page 8: Scientific Visualization Using VTK

vtkStructuredGridReader *reader = vtkStructuredGridReader::New(); reader->SetFileName("density.vtk"); reader->Update();

vtkContourFilter *iso = vtkContourFilter::New(); iso->SetInputConnection(reader->GetOutputPort()); iso->SetValue(0,0.26);

vtkPolyDataMapper *isoMapper = vtkPolyDataMapper::New(); isoMapper->SetInputConnection(iso->GetOutputPort());

vtkActor *isoActor = vtkActor::New(); isoActor->SetMapper(isoMapper);

vtkRenderer *ren1 = vtkRenderer::New(); ren1->AddActor(isoActor);

vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->SetSize(500,500); renWin->AddRenderer(ren1);

Pipeline -> Sample CodePipeline -> Sample Code

Scientific Visualization Using VTK – Spring 2012

Reader

Filter

Mapper

Actor

Renderer

RenderWindow

Page 9: Scientific Visualization Using VTK

C++ v. TclC++ v. Tcl

• C++

• Tcl

Scientific Visualization Using VTK – Spring 2012

vtkStructuredGridReader readerreader SetFileName "density.vtk"reader Update

vtkContourFilter isoiso SetInputConnection [reader GetOutputPort]iso SetValue 0 .26

vtkStructuredGridReader *reader = vtkStructuredGridReader::New();reader->SetFileName("density.vtk");reader->Update();

vtkContourFilter *iso = vtkCountourFilter::New();iso->SetInputConnection(reader->GetOutputPort());iso->SetValue(0, .26);

Page 10: Scientific Visualization Using VTK

Coding tip of the day!Coding tip of the day!

• Google “VTK class list”, or• Go to:

http://www.vtk.org/doc/nightly/html/annotated.html

Scientific Visualization Using VTK – Spring 2012

Page 11: Scientific Visualization Using VTK

VTK – Geometry v. TopologyVTK – Geometry v. Topology Geometry of a dataset ~= points

Scientific Visualization Using VTK – Spring 2012

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

Topology ~= connections among points, which define cells

So, what’s the topology here?

Page 12: Scientific Visualization Using VTK

VTK – Geometry v. TopologyVTK – Geometry v. Topology

Scientific Visualization Using VTK – Spring 2012

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

Page 13: Scientific Visualization Using VTK

VTK – Geometry v. TopologyVTK – Geometry v. Topology

Scientific Visualization Using VTK – Spring 2012

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

or

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

Page 14: Scientific Visualization Using VTK

VTK – Geometry v. TopologyVTK – Geometry v. Topology

Scientific Visualization Using VTK – Spring 2012

or

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

or

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

Page 15: Scientific Visualization Using VTK

VTK – Geometry v. TopologyVTK – Geometry v. Topology

Scientific Visualization Using VTK – Spring 2012

or

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

or

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

or

0,1 1,1 2,1 3,1

0,0 1,0 2,0 3,0

Page 16: Scientific Visualization Using VTK

Geometry/Topology StructureGeometry/Topology Structure Geometry/topology may be regular or irregular

– Regular (structured)• need to store only beginning position, spacing, number of points• smaller memory footprint per cell (topology can be generated on the fly)• examples: image data, rectilinear grid, structured grid

– Irregular (unstructured)• information can be represented more densely where it changes quickly • higher memory footprint (topology must be explicitly written) but more freedom• examples: polygonal data, unstructured grid

Scientific Visualization Using VTK – Spring 2012

Page 17: Scientific Visualization Using VTK

Characteristics of DataCharacteristics of Data Data is organized into datasets for visualization

– Datasets consist of two pieces• organizing structure

– points (geometry)– cells (topology)

• data attributes associated with the structure– File format derived from organizing structure

Scientific Visualization Using VTK – Spring 2012

Data is discrete– Interpolation functions generate data values in between known points

Page 18: Scientific Visualization Using VTK

Examples of Dataset TypesExamples of Dataset Types Structured Points (Image Data)

– regular in both topology and geometry– examples: lines, pixels, voxels– applications: imaging CT, MRI

Rectilinear Grid– regular topology but geometry only partially

regular– examples: pixels, voxels

Structured Grid (Curvilinear)– regular topology and irregular geometry– applications: fluid flow, heat transfer

Scientific Visualization Using VTK – Spring 2012

Page 19: Scientific Visualization Using VTK

Examples of Dataset Types (cont)Examples of Dataset Types (cont) Polygonal Data

– irregular in both topology and geometry– examples: vertices, polyvertices, lines,

polylines, polygons, triangle strips

Unstructured Grid – irregular in both topology and geometry– examples: any combination of cells– applications: finite element analysis,

structural design, vibration

Scientific Visualization Using VTK – Spring 2012

Page 20: Scientific Visualization Using VTK

Examples of Cell TypesExamples of Cell Types

Scientific Visualization Using VTK – Spring 2012

Page 21: Scientific Visualization Using VTK

Data AttributesData Attributes Data attributes associated with the organizing structure

– Scalars • single valued• examples: temperature, pressure, density, elevation

– Vectors• magnitude and direction• examples: velocity, momentum

– Normals • direction vectors (magnitude of 1) used for shading

– Texture Coordinates• used to map a point in Cartesian space into 1, 2, or 3D texture space• used for texture mapping

– Tensors • 3x3 only• examples: stress, strain

Scientific Visualization Using VTK – Spring 2012

Page 22: Scientific Visualization Using VTK

File Format – Structured PointsFile Format – Structured Points

Scientific Visualization Using VTK – Spring 2012

Editor structured-points.vtk:# vtk DataFile Version 3.0

first dataset

ASCII

DATASET STRUCTURED_POINTS

DIMENSIONS 3 4 5

ORIGIN 0 0 0

SPACING 1 1 2

POINT_DATA 60

SCALARS temp-point float

LOOKUP_TABLE default

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

Page 23: Scientific Visualization Using VTK

File Format – Structured PointsFile Format – Structured Points

Scientific Visualization Using VTK – Spring 2012

Editor structured-points.vtk:# vtk DataFile Version 3.0

first dataset

ASCII

DATASET STRUCTURED_POINTS

DIMENSIONS 3 4 5

ORIGIN 0 0 0

SPACING 1 1 2

POINT_DATA 60

SCALARS temp-point float

LOOKUP_TABLE default

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

0 0 0 1 1 1 1 1 1 0 0 0

Page 24: Scientific Visualization Using VTK

File Format – Structured PointsFile Format – Structured Points

Scientific Visualization Using VTK – Spring 2012

Editor structured-points2.vtk:# vtk DataFile Version 3.0

first dataset

ASCII

DATASET STRUCTURED_POINTS

DIMENSIONS 3 4 5

ORIGIN 0 0 0

SPACING 1 1 2

CELL_DATA 24

SCALARS temp-cell float

LOOKUP_TABLE default

0 0 1 1 0 0

0 0 1 1 0 0

0 0 1 1 0 0

0 0 1 1 0 0

Page 25: Scientific Visualization Using VTK

File Format – Structured PointsFile Format – Structured Points

Scientific Visualization Using VTK – Spring 2012

Editor structured-points2.vtk:# vtk DataFile Version 3.0

first dataset

ASCII

DATASET STRUCTURED_POINTS

DIMENSIONS 3 4 5

ORIGIN 0 0 0

SPACING 1 1 2

CELL_DATA 24

SCALARS temp-cell float

LOOKUP_TABLE default

0 0 1 1 0 0

0 0 1 1 0 0

0 0 1 1 0 0

0 0 1 1 0 0

Page 26: Scientific Visualization Using VTK

Structured Points – C++ codeStructured Points – C++ code

Scientific Visualization Using VTK – Spring 2012

Editor structured-points.cxx:vtkStructuredPointsReader *reader = vtkStructuredPointsReader::New();

reader->SetFileName("structured-points.vtk");

reader->Update();

vtkLookupTable *lut = vtkLookupTable::New();

lut->SetNumberOfColors(2);

lut->SetTableValue(0, 0.0, 0.0, 1.0, 1);

lut->SetTableValue(1, 1.0, 0.0, 0.0, 1);

vtkDataSetMapper *mapper = vtkDataSetMapper::New();

mapper->SetInputConnection(reader->GetOutputPort());

mapper->SetLookupTable(lut);

vtkActor *actor = vtkActor::New();

actor->SetMapper(mapper);

actor->GetProperty()->EdgeVisibilityOn();

actor->GetProperty()->SetLineWidth(2);

Page 27: Scientific Visualization Using VTK

Structured Points – C++ code (cont.)Structured Points – C++ code (cont.)

Scientific Visualization Using VTK – Spring 2012

Editor structured-points.cxx:vtkRenderer *ren1 = vtkRenderer::New();

ren1->AddActor(actor);

ren1->SetBackground(0.5,0.5,0.5);

vtkRenderWindow *renWin = vtkRenderWindow::New();

renWin->AddRenderer(ren1);

renWin->SetSize(500,500);

vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();

iren->SetRenderWindow(renWin);

iren->Initialize();

iren->Start();

Page 28: Scientific Visualization Using VTK

Work flow – Case StudyWork flow – Case Study BU Space Physics simulation

Meteor trails in the ionosphere Data wrangling:

Consolidate datafiles (from parallel code), create single binary datafile

Add VTK header:

Scientific Visualization Using VTK – Spring 2012

# vtk DataFile Version 3.0output of reassemble.cBINARYDATASET STRUCTURED_POINTSORIGIN 0.0 0.0 0.0SPACING 1.0 1.0 1.0DIMENSIONS 512 64 128POINT_DATA 4194304SCALARS plasma floatLOOKUP_TABLE default

Page 29: Scientific Visualization Using VTK

Work flow – Case StudyWork flow – Case Study Use Tcl for fast development/testing:

Scientific Visualization Using VTK – Spring 2012

vtkStructuredPointsReader reader reader SetFileName "opp.vtk" reader Update

vtkContourFilter iso iso SetInputConnection [reader GetOutputPort] iso SetValue 0 0.1

. . .

Page 30: Scientific Visualization Using VTK

Work flow – Case StudyWork flow – Case Study Add gaussian filter :

Scientific Visualization Using VTK – Spring 2012

vtkImageGaussianSmooth gaussian gaussian SetInputConnection [reader GetOutputPort] gaussian SetDimensionality 3 gaussian SetRadiusFactor 1 vtkContourFilter iso iso SetInputConnection [gaussian GetOutputPort] iso SetValue 0 0.1

. . .

Page 31: Scientific Visualization Using VTK

Work flow – Case StudyWork flow – Case Study Add more isosurfaces :

Scientific Visualization Using VTK – Spring 2012

vtkContourFilter iso iso SetInputConnection [gaussian GetOutputPort] iso SetValue 0 1.0 iso SetValue 1 0.5 iso SetValue 2 0.1

Page 32: Scientific Visualization Using VTK

Work flow – Case StudyWork flow – Case Study Port to C++, add cutplane, transparency :

Scientific Visualization Using VTK – Spring 2012

vtkPlane *plane = vtkPlane::New(); plane->SetOrigin(256,2,63.5); plane->SetNormal(0,1,0);

vtkCutter *planeCut = vtkCutter::New(); planeCut->SetInputConnection(reader>GetOutputPort()); planeCut->SetCutFunction(plane);

vtkActor *isoActor = vtkActor::New(); isoActor->SetMapper(isoMapper); isoActor->GetProperty()->SetOpacity(iv_opacity);

Page 33: Scientific Visualization Using VTK

Work flow – Case StudyWork flow – Case Study Change color map, use script to loop over *.vtk, generate multiple

jpegs, read into Adobe Premiere, produce animation:

Scientific Visualization Using VTK – Spring 2012

Page 34: Scientific Visualization Using VTK

VTK – Getting Started - UIVTK – Getting Started - UI

Scientific Visualization Using VTK – Spring 2012

Unix Shell: katana:% cone2

Page 35: Scientific Visualization Using VTK

Keyboard shortcutsKeyboard shortcuts

Scientific Visualization Using VTK – Spring 2012

j – joystick (continuous) modet – trackball mode

c –camera move modea –actor move mode

left mouse – rotate x,yctrl - left mouse – rotate zmiddle mouse –panright mouse –zoom

r –reset cameras/w –surface/wireframee (or q) –exit

Page 36: Scientific Visualization Using VTK

Code – simple.cxxCode – simple.cxx

Scientific Visualization Using VTK – Spring 2012

Editor: simple.cxx #include <stdio.h>

#include <stdlib.h>

#include "vtk-include.h"

int main(int argc, char *argv[]) {

vtkRenderer *ren1 = vtkRenderer::New();

ren1->SetBackground(0.0,0.0,0.0);

vtkRenderWindow *renWin = vtkRenderWindow::New();

renWin->SetSize(500,500);

renWin->AddRenderer(ren1);

renWin->Render();

sleep(2);

}

Page 37: Scientific Visualization Using VTK

ExerciseExercise

Scientific Visualization Using VTK – Spring 2012

Editor: simple2.cxx

Change background color to gray (or fuchsia, etc.)

Page 38: Scientific Visualization Using VTK

Code – ExerciseCode – Exercise

Scientific Visualization Using VTK – Spring 2012

Editor: simple2.cxx int main(int argc, char *argv[]) {

vtkRenderer *ren1 = vtkRenderer::New();

ren1->SetBackground(0.5,0.5,0.5);

vtkRenderWindow *renWin = vtkRenderWindow::New();

renWin->SetSize(500,500);

renWin->AddRenderer(ren1);

renWin->Render();

sleep(2);

}

Page 39: Scientific Visualization Using VTK

Code – cone2.cxxCode – cone2.cxx

Scientific Visualization Using VTK – Spring 2012

Editor cone2.cxx:vtkConeSource *cone = vtkConeSource::New();

cone->SetResolution(100);

vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();

coneMapper->SetInputConnection(cone->GetOutputPort());

vtkActor *coneActor = vtkActor::New();

coneActor->SetMapper(coneMapper);

coneActor->GetProperty()->SetColor(1.0, 0.0, 0.0);

vtkRenderer *ren1 = vtkRenderer::New();

ren1->SetBackground(0.0,0.0,0.0);

ren1->AddActor(coneActor);

vtkRenderWindow *renWin = vtkRenderWindow::New();

renWin->SetSize(500,500);

renWin->AddRenderer(ren1);

vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();

iren->SetRenderWindow(renWin);

iren->Initialize();

iren->Start();

Page 40: Scientific Visualization Using VTK

ExerciseExercise

Scientific Visualization Using VTK – Spring 2012

Editor: cone3.cxx

Add coneActor2, and color it green. (Copy coneActor, and make appropriate changes. Remember to add the new actor to the render window [near the end of the “pipeline”].)

Optional: to rotate, scale and set the position away from the origin, use the following:

coneActor2->RotateZ(90); coneActor2->SetScale(0.5,0.5,0.5); coneActor2->SetPosition(-1.0,0.0,0.0);

Otherwise, use ‘a’ to use mouse to separate the green and red cones.

Page 41: Scientific Visualization Using VTK

Code – ExerciseCode – Exercise

Scientific Visualization Using VTK – Spring 2012

Editor: cone3.cxx. . .

vtkActor *coneActor2 = vtkActor::New();

coneActor2->SetMapper(coneMapper);

coneActor2->GetProperty()->SetColor(0.0, 1.0, 0.0);

coneActor2->RotateZ(90);

coneActor2->SetScale(0.5,0.5,0.5);

coneActor2->SetPosition(-1.0,0.0,0.0);

. . .

ren1->AddActor(coneActor);

ren1->AddActor(coneActor2);

. . .

Page 42: Scientific Visualization Using VTK

VTK - ReadersVTK - Readers Image and Volume Readers

– vtkStructuredPointsReader - read VTK structured points data files– vtkSLCReader - read SLC structured points files– vtkTIFFReader - read files in TIFF format– vtkVolumeReader - read image (volume) files– vtkVolume16Reader - read 16-bit image (volume) files

Structured Grid Readers– vtkStructuredGridReader - read VTK structured grid data files– vtkPLOT3DReader - read structured grid PLOT3D files

Rectilinear Grid Readers– vtkRectilinearGridReader - read VTK rectilinear grid data files

Unstructured Grid Readers– vtkUnstructuredGridReader - read VTK unstructured grid data files

Scientific Visualization Using VTK – Spring 2012

Page 43: Scientific Visualization Using VTK

VTK - ReadersVTK - Readers Polygonal Data Readers

– vtkPolyDataReader - read VTK polygonal data files– vtkBYUReader - read MOVIE.BYU files– vtkMCubesReader - read binary marching cubes files– vtkOBJReader - read Wavefront (Maya) .obj files– vtkPLYReader - read Stanford University PLY polygonal data files– vtkSTLReader - read stereo-lithography files– vtkUGFacetReader - read EDS Unigraphic facet files

Image and Volume Readers (add’l)– vtkBMPReader - read PC bitmap files– vtkDEMReader - read digital elevation model files– vtkJPEGReader - read JPEG files– vtkImageReader - read various image files– vtkPNMReader - read PNM (ppm, pgm, pbm) files– vtkPNGRReader - read Portable Network Graphic files

Scientific Visualization Using VTK – Spring 2012

Page 44: Scientific Visualization Using VTK

File Format – Structured GridFile Format – Structured Grid

Scientific Visualization Using VTK – Spring 2012

Editor density.vtk:# vtk DataFile Version 3.0

vtk sample data

ASCII

DATASET STRUCTURED_GRID

DIMENSIONS 57 33 25

POINTS 47025 float

2.667 -3.77476 23.8329 2.94346 -3.74825 23.6656 3.21986 -3.72175 23.4982

3.50007 -3.70204 23.3738 3.9116 -3.72708 23.5319 4.1656 -3.69529 23.3312

. . .

POINT_DATA 47025

SCALARS Density float

0.639897 0.239841 0.252319 0.255393 0.252118 0.246661 0.240134 0.234116 0.229199

0.225886 0.224268 0.224647 0.231496 0.246895 0.26417 0.27585 0.278987 0.274621

. . .

VECTORS Momentum float

0 0 0 13.753 -5.32483 -19.964 42.3106 -15.57 -43.0034

64.2447 -13.3958 -46.2281 73.7861 -4.83205 -36.3829 88.3374 6.23797 -22.8846

. . .

Page 45: Scientific Visualization Using VTK

Clipping, Cutting, SubsamplingClipping, Cutting, SubsamplingSelection Algorithms - Clipping

• can reveal internal details of surface • VTK - vtkClipDataSet

- Cutting/Slicing• cutting through a dataset with a surface• VTK - vtkCutter

- Subsampling• reduces data size by selecting a subset of

the original data• VTK - vtkExtractGrid

Scientific Visualization Using VTK – Spring 2012

Page 46: Scientific Visualization Using VTK

Code – ClippingCode – Clipping

Scientific Visualization Using VTK – Spring 2012

Editor: clipping.cxxvtkStructuredGridReader *reader = vtkStructuredGridReader::New();

reader->SetFileName("density.vtk");

reader->Update();

vtkPlane *plane = vtkPlane::New();

plane->SetOrigin(reader->GetOutput()->GetCenter());

plane->SetNormal(-0.287, 0, 0.9579);

vtkClipDataSet *clip = vtkClipDataSet::New();

clip->SetInputConnection(reader->GetOutputPort());

clip->SetClipFunction(plane);

clip->InsideOutOn();

vtkDataSetMapper *clipMapper = vtkDataSetMapper::New();

clipMapper->SetInputConnection(clip->GetOutputPort());

clipMapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *clipActor = vtkActor::New();

clipActor->SetMapper(clipMapper);

Page 47: Scientific Visualization Using VTK

Code – Cutplane/SlicingCode – Cutplane/Slicing

Scientific Visualization Using VTK – Spring 2012

Editor: cutplane.cxxvtkStructuredGridReader *reader = vtkStructuredGridReader::New();

reader->SetFileName("density.vtk");

reader->Update();

vtkPlane *plane = vtkPlane::New();

plane->SetOrigin(reader->GetOutput()->GetCenter());

plane->SetNormal(-0.287, 0, 0.9579);

vtkCutter *planeCut = vtkCutter::New();

planeCut->SetInputConnection(reader->GetOutputPort());

planeCut->SetCutFunction(plane);

vtkPolyDataMapper *cutMapper = vtkPolyDataMapper::New();

cutMapper->SetInputConnection(planeCut->GetOutputPort());

cutMapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *cutActor = vtkActor::New();

cutActor->SetMapper(cutMapper);*To see the cutplane with a colorbar guide, try ‘cutplane-with-colorbar’.

Page 48: Scientific Visualization Using VTK

Code – ExtractGridCode – ExtractGrid

Scientific Visualization Using VTK – Spring 2012

Editor: extract.cxxvtkStructuredGridReader *reader = vtkStructuredGridReader::New();

reader->SetFileName("density.vtk");

reader->Update();

vtkExtractGrid *extract = vtkExtractGrid::New();

extract->SetInputConnection(reader->GetOutputPort());

extract->SetVOI(-1000,1000,-1000,1000,7,10);

vtkDataSetMapper *extractMapper = vtkDataSetMapper::New();

extractMapper->SetInputConnection(extract->GetOutputPort());

extractMapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *extractActor = vtkActor::New();

extractActor->SetMapper(extractMapper);

*Optional: enable EdgeVisibility inExtractActor.

Page 49: Scientific Visualization Using VTK

Color MappingColor Mapping Scalar Algorithms

– Color Mapping • maps scalar data to colors• implemented by using scalar values as an index into a color

lookup table

– VTK • vtkLookupTable• vtkDataSetMapper

Scientific Visualization Using VTK – Spring 2012

Page 50: Scientific Visualization Using VTK

Code – Color MappingCode – Color Mapping

Scientific Visualization Using VTK – Spring 2012

Editor: colormap.numcolors.cxx. . .

vtkStructuredGridReader *reader = vtkStructuredGridReader::New();

reader->SetFileName("subset.vtk");

reader->Update();

vtkLookupTable *lut = vtkLookupTable::New();

lut->SetNumberOfColors(16);

lut->SetHueRange(0.0, 0.667);

vtkDataSetMapper *mapper = vtkDataSetMapper::New();

mapper->SetInputConnection(reader->GetOutputPort());

mapper->SetLookupTable(lut);

mapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *actor = vtkActor::New();

actor->SetMapper(mapper);

Page 51: Scientific Visualization Using VTK

ExerciseExercise

Scientific Visualization Using VTK – Spring 2012

* Change the number of colors in colormap

* Reverse the Hue Range

* Change the Scalar Range [or see what happens if you don’t set it]mapper SetScalarRange 0.0 0.7

Page 52: Scientific Visualization Using VTK

ContouringContouring Scalar Algorithms (cont)

– Contouring• construct a boundary between distinct regions, two steps:

– explore space to find points near contour– connect points into contour (2D) or surface (3D)

• 2D contour map (isoline):– applications: elevation contours from topography, pressure contours

(weather maps) from meteorology3D isosurface:• 3D isosurface:

– applications: tissue surfaces from tomography, constant pressure or temperature in fluid flow, implicit surfaces from math and CAD

– VTK• vtkContourFilter

Scientific Visualization Using VTK – Spring 2012

Page 53: Scientific Visualization Using VTK

Code – Contour (isoline)Code – Contour (isoline)

Scientific Visualization Using VTK – Spring 2012

Editor: contour.single.cxx. . .

vtkStructuredGridReader *reader = vtkStructuredGridReader::New();

reader->SetFileName("subset.vtk");

reader->Update();

vtkContourFilter *iso = vtkContourFilter::New();

iso->SetInputConnection(reader->GetOutputPort());

iso->SetValue(0,0.26);

vtkPolyDataMapper *isoMapper = vtkPolyDataMapper::New();

isoMapper->SetInputConnection(iso->GetOutputPort());

isoMapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *isoActor = vtkActor::New();

isoActor->SetMapper(isoMapper);

. . .

Page 54: Scientific Visualization Using VTK

Code – Contour (isosurface)Code – Contour (isosurface)

Scientific Visualization Using VTK – Spring 2012

Editor: isosurface.cxx. . .

vtkStructuredGridReader *reader = vtkStructuredGridReader::New();

reader->SetFileName(“density.vtk");

reader->Update();

vtkContourFilter *iso = vtkContourFilter::New();

iso->SetInputConnection(reader->GetOutputPort());

iso->SetValue(0,0.26);

vtkPolyDataMapper *isoMapper = vtkPolyDataMapper::New();

isoMapper->SetInputConnection(iso->GetOutputPort());

isoMapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *isoActor = vtkActor::New();

isoActor->SetMapper(isoMapper);

. . .

Page 55: Scientific Visualization Using VTK

Scalar GenerationScalar Generation Scalar Algorithms (cont)

– Scalar Generation• extract scalars from part of data• example: extracting z coordinate (elevation) from terrain data to

create scalar values

– VTK• vtkElevationFilter

Scientific Visualization Using VTK – Spring 2012

Page 56: Scientific Visualization Using VTK

Code – Scalar GenerationCode – Scalar Generation

Scientific Visualization Using VTK – Spring 2012

Editor: hawaii.color.cxxvtkPolyDataReader *hawaii = vtkPolyDataReader::New();

hawaii->SetFileName("honolulu.vtk");

hawaii->Update();

hawaii->GetOutput()->GetBounds(bounds);

vtkElevationFilter *elevation = vtkElevationFilter::New();

elevation->SetInputConnection(hawaii->GetOutputPort());

elevation->SetLowPoint(0,0,bounds[4]);

elevation->SetHighPoint(0,0,bounds[5]);

vtkLookupTable *lut = vtkLookupTable::New();

lut->SetHueRange(0.7,0);

vtkDataSetMapper *hawaiiMapper = vtkDataSetMapper::New();

hawaiiMapper->SetInputConnection(elevation->GetOutputPort());

hawaiiMapper->SetLookupTable(lut);

vtkActor *hawaiiActor = vtkActor::New();

hawaiiActor->SetMapper(hawaiiMapper);

Page 57: Scientific Visualization Using VTK

Scalar generation – Color MapScalar generation – Color Map

Scientific Visualization Using VTK – Spring 2012

Editor: hawaii.color2.cxxvtkLookupTable *lut = vtkLookupTable::New();lut->SetNumberOfColors(9);lut->SetTableValue(0, 0.0, 0.40, 0.8, 1);lut->SetTableValue(1, 0.0, 0.75, 0.2, 1);lut->SetTableValue(2, 0.25, 0.625, 0.5, 1);lut->SetTableValue(3, 0.0, 0.5, 0.25, 1);lut->SetTableValue(4, 0.5, 0.365, 0.0, 1);lut->SetTableValue(5, 0.75, 0.625, 0.25, 1);lut->SetTableValue(6, 1.0, 0.75, 0.625, 1);lut->SetTableValue(7, 1.0, 0.75, 0.5, 1);lut->SetTableValue(8, 1.0, 1, 1, 1);

Page 58: Scientific Visualization Using VTK

HedgehogsHedgehogs Vector Algorithms

– Hedgehogs • oriented scaled line for each vector• scale indicates magnitude• color indicates magnitude, pressure,

temperature, or any variable

– VTK• vtkHedgeHog

Scientific Visualization Using VTK – Spring 2012

Page 59: Scientific Visualization Using VTK

Code – HedgeHogsCode – HedgeHogs

Scientific Visualization Using VTK – Spring 2012

Editor: hedgehog.cxxvtkStructuredGridReader *reader = vtkStructuredGridReader::New();

reader->SetFileName("density.vtk");

reader->Update();

vtkHedgeHog *hhog = vtkHedgeHog::New();

hhog->SetInputConnection(reader->GetOutputPort());

hhog->SetScaleFactor(0.001);

vtkPolyDataMapper *hhogMapper = vtkPolyDataMapper::New();

hhogMapper->SetInputConnection(hhog->GetOutputPort());

hhogMapper->SetLookupTable(lut);

hhogMapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *hhogActor = vtkActor::New();

hhogActor->SetMapper(hhogMapper);

Page 60: Scientific Visualization Using VTK

Oriented GlyphsOriented Glyphs Vector Algorithms (cont)

– Oriented Glyphs• orientation indicates direction• scale indicates magnitude• color indicates magnitude, pressure,

temperature, or any variable

– VTK• vtkGlyph3D

Scientific Visualization Using VTK – Spring 2012

Page 61: Scientific Visualization Using VTK

Code – Oriented GlyphsCode – Oriented Glyphs

Scientific Visualization Using VTK – Spring 2012

Editor: glyph.cxxvtkArrowSource *arrow = vtkArrowSource::New();arrow->SetTipResolution(6);arrow->SetTipRadius(0.1);arrow->SetTipLength(0.35);arrow->SetShaftResolution(6);arrow->SetShaftRadius(0.03);

vtkGlyph3D *glyph = vtkGlyph3D::New();glyph->SetInputConnection(extract->GetOutputPort());glyph->SetSource(arrow->GetOutput());glyph->SetVectorModeToUseVector();glyph->SetColorModeToColorByScalar();glyph->SetScaleModeToDataScalingOff();glyph->OrientOn();glyph->SetScaleFactor(0.25);

vtkPolyDataMapper *glyphMapper = vtkPolyDataMapper::New();glyphMapper->SetInputConnection(glyph->GetOutputPort());glyphMapper->SetLookupTable(lut);glyphMapper->SetScalarRange(reader->GetOutput()->GetScalarRange());

Page 62: Scientific Visualization Using VTK

Field LinesField Lines Vector Algorithms (cont)

– Field Lines• Fluid flow is described by a vector field in three dimensions for steady (fixed time)

flows or four dimensions for unsteady (time varying) flows• Three techniques for determining flow

– Pathline (Trace)• tracks particle through unsteady (time-varying) flow• shows particle trajectories over time• rake releases particles from multiple positions at the same time instant• reveals compression, vorticity

– Streamline• tracks particle through steady (fixed-time) flow• holds flow steady at a fixed time• snapshot of flow at a given time instant

– Streakline• particles released from the same position over a time interval (time-varying)• snapshot of the variation of flow over time• example: dye steadily injected into fluid at a fixed point

Scientific Visualization Using VTK – Spring 2012

Page 63: Scientific Visualization Using VTK

Field LinesField LinesStreamlines

• Lines show particle flow • VTK – vtkStreamTracer

Streamlets• half way between streamlines and glyphs• VTK - vtkStreamTracer, vtkGlyph3D

Streamribbon• rake of two particles to create a ribbon• VTK - vtkStreamTracer, vtkRuledSurfaceFilter

Streamtube• circular rake of particles to create a tube• VTK - vtkStreamTracer, vtkTubeFilter

Scientific Visualization Using VTK – Spring 2012

Page 64: Scientific Visualization Using VTK

Code – StreamlinesCode – Streamlines

Scientific Visualization Using VTK – Spring 2012

Editor: streamLines.cxxvtkPointSource *seeds = vtkPointSource::New();seeds->SetRadius(3.0);seeds->SetCenter(reader->GetOutput()->GetCenter());seeds->SetNumberOfPoints(100);

vtkRungeKutta4 *integ = vtkRungeKutta4::New();

vtkStreamTracer *streamer = vtkStreamTracer::New();streamer->SetInputConnection(reader->GetOutputPort());streamer->SetSourceConnection(seeds->GetOutputPort());streamer->SetMaximumPropagation(100);streamer->SetIntegrationDirectionToBoth();streamer->SetIntegrator(integ);

vtkPolyDataMapper *mapStreamLines = vtkPolyDataMapper::New();mapStreamLines->SetInputConnection(streamer->GetOutputPort());mapStreamLines->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *streamLineActor = vtkActor::New();streamLineActor->SetMapper(mapStreamLines);

Page 65: Scientific Visualization Using VTK

Code – StreamtubesCode – Streamtubes

Scientific Visualization Using VTK – Spring 2012

Editor: streamTubes.varyRadius.cxxvtkPointSource *seeds = vtkPointSource::New();seeds->SetRadius(1.0);seeds->SetCenter(1.5, 0.01, 27);seeds->SetNumberOfPoints(50);

vtkRungeKutta4 *integ = vtkRungeKutta4::New();

vtkStreamTracer *streamer = vtkStreamTracer::New();streamer->SetInputConnection(reader->GetOutputPort());streamer->SetSourceConnection(seeds->GetOutputPort());…vtkTubeFilter *streamTube = vtkTubeFilter::New();streamTube->SetInputConnection(streamer->GetOutputPort());streamTube->SetRadius(0.01);streamTube->SetNumberOfSides(6);streamTube->SetVaryRadiusToVaryRadiusByScalar();

vtkPolyDataMapper *mapStreamTube = vtkPolyDataMapper::New();mapStreamTube->SetInputConnection(streamTube->GetOutputPort());mapStreamTube->SetScalarRange(reader->GetOutput()->GetScalarRange());

vtkActor *streamTubeActor = vtkActor::New();streamTubeActor->SetMapper(mapStreamTube);

Page 66: Scientific Visualization Using VTK

AnnotationAnnotationAnnotation

– used for annotating visualization– VTK

• vtkScalarBarActor• vtkTextMapper• vtkScaledTextActor

Scientific Visualization Using VTK – Spring 2012

Page 67: Scientific Visualization Using VTK

Code – colorBarCode – colorBar

Scientific Visualization Using VTK – Spring 2012

Editor: colorBar.cxxvtkStructuredGridReader *reader = vtkStructuredGridReader::New();reader->SetFileName("density.vtk");reader->Update();

vtkScalarBarActor *scalarBar = vtkScalarBarActor::New();scalarBar->SetLookupTable(lut);scalarBar->SetTitle("Combustor Density Magnitude");scalarBar->SetNumberOfLabels(2);scalarBar->GetPositionCoordinate()->SetValue(0.1, 0.01);scalarBar->SetOrientationToHorizontal();scalarBar->SetWidth(0.8);scalarBar->SetHeight(0.09);

vtkRenderer *ren1 = vtkRenderer::New();ren1->SetBackground(0.5,0.5,0.5);ren1->AddActor(streamTubeActor);ren1->AddActor(outlineActor);ren1->AddActor(scalarBar);

Page 68: Scientific Visualization Using VTK

VTK - WritersVTK - Writers Polygonal Data Writers

– vtkBYUWriter - write MOVIE.BYU files– vtkCGMWriter - write 2D polygonal data as a CGM file– vtkIVWriter - write Inventor files– vtkMCubesWriter - write triangles in marching cubes format– vtkPolyDataWriter - write VTK polygonal data files– vtkPLYWriter - write Standford University PLY polygonal data files– vtkSTLWriter - write stereo-lithography files

Image and Volume writers– vtkBMPwriter - write PC bitmap files– vtkJPEGwriter - write images in JPEG format– vtkPostscriptWriter – write image files in Postscript format– vtkPNMwriter - write PNM (ppm, pgm, pbm) image files– vtkPNGwriter - write image file in Portable Network Graphic format– vtkTIFFWriter – write image files in TIFF format– vtkStructuredPointsWriter – write a vtkStructuredPoints file

Scientific Visualization Using VTK – Spring 2012

Page 69: Scientific Visualization Using VTK

Saving ImagesSaving ImagesSaving Images

– common formats:• jpeg (lossy)• png (lossless) • postscript• tiff (lossless)

– VTK•vtkWindowToImageFilter•vtkRenderLargeImage

Scientific Visualization Using VTK – Spring 2012

Page 70: Scientific Visualization Using VTK

Code – Saving ImagesCode – Saving Images

Scientific Visualization Using VTK – Spring 2012

Editor: output.cxxvtkRenderer *ren1 = vtkRenderer::New();ren1->AddActor(streamTubeActor);ren1->ResetCamera();ren1->GetActiveCamera()->Dolly(1.25);ren1->ResetCameraClippingRange();

vtkRenderWindow *renWin = vtkRenderWindow::New();renWin->PointSmoothingOn();renWin->LineSmoothingOn();renWin->PolygonSmoothingOn();renWin->AddRenderer(ren1);renWin->SetSize(500,500);renWin->Render();

vtkWindowToImageFilter *w2if = vtkWindowToImageFilter::New();w2if->SetInput(renWin);

vtkTIFFWriter *writer = vtkTIFFWriter::New();writer->SetInputConnection(w2if->GetOutputPort());writer->SetFileName("image.tif");writer->Write();

vtkRenderLargeImage *renderLarge = vtkRenderLargeImage::New();renderLarge->SetInput(ren1);renderLarge->SetMagnification(4);

vtkTIFFWriter *lwriter = vtkTIFFWriter::New();lwriter->SetInputConnection(renderLarge->GetOutputPort());lwriter->SetFileName("./largeimage.tif");lwriter->Write();

Page 71: Scientific Visualization Using VTK

VTK - ResourcesVTK - Resources

Scientific Visualization Using VTK – Spring 2012

IS&T tutorials– Scientific Visualization Using VTK www.bu.edu/tech/research/training/tutorials/vtk/ – VTK Examples www.bu.edu/tech/research/training/scv-software-packages/vtk/vtk_examples/

Texts– The Visualization Toolkit, 4th Edition, Kitware, Inc, 2006.– The VTK User’s Guide, 5th Edition, Kitware, Inc, 2006.

Websites– www.vtk.org– www.kitware.com– www.vtk.org/doc/release/5.4/html/classes.html

Wiki– www.vtk.org/Wiki/VTK

Mailing Lists– www.vtk.org/VTK/help/mailing.html

Page 72: Scientific Visualization Using VTK

Questions?Questions? Tutorial survey:

- http://scv.bu.edu/survey/tutorial_evaluation.html

Scientific Visualization Using VTK – Spring 2012