An Example - Building an Airflow Visualization through an Office
The Data Structure
We intend to visualize an office, 20x20x21. Thus, our data takes the shape of a structured grid (20x20x21), where we have data values at each point in the grid.

The Data Values
At each of the 8,400 points in our grid, we have two data values - the pressure at that point, and the velocity of the air at that point. Note that pressure is scalar, and velocity is a vector. Thus, for a given point in the grid, we'll have:
        velocity = (x,y,z)
        pressure = p
The Basic Program Structure

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader *reader;
  vtkStructuredGridOutlineFilter *outline;

  vtkPolyMapper *mapOutline;

  vtkActor      *outlineActor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();


  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);


  ren->AddActors(outlineActor);
  ren->SetBackground(0.7,0.7,0.7);
  renWin->SetSize(750,500);
  renWin->Render();
}

And the results!

Ugh. This looks like garbage. It doesn't look anything like an office. Let's see if changing our camera position will help.

Adding a Camera

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader *reader;
  vtkStructuredGridOutlineFilter *outline;

  vtkCamera     *aCamera;

  vtkPolyMapper *mapOutline;

  vtkActor      *outlineActor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();


  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);

  aCamera = new vtkCamera;
    aCamera->SetClippingRange(0.726079,36.3039);
    aCamera->SetFocalRange(2.43584,2.15046,1.11104);
    aCamera->SetPosition(-4.76183, -10.4426, 3.17203);
    aCamera->CalcViewPlaneNormal();
    aCamera->SetViewUp(0.0511273,0.132773,0.989827);
    aCamera->SetViewAngle(18.604);

  ren->SetActiveCamera(aCamera);

  ren->AddActors(outlineActor);
  ren->SetBackground(0.7,0.7,0.7);
  renWin->SetSize(750,500);
  renWin->Render();
}

Much better! Now let's start to add furniture.

A Few Tables Might Be Nice

To do this, we'll throw a coupla' polygons in the right places.

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader          *reader;
  vtkStructuredGridOutlineFilter   *outline;
  vtkStructuredGridGeometryFilter  *table1;
  vtkStructuredGridGeometryFilter  *table2;

  vtkCamera     *aCamera;

  vtkPolyMapper *mapOutline;
  vtkPolyMapper *mapTable1;
  vtkPolyMapper *mapTable2;

  vtkActor      *outlineActor;
  vtkActor      *table1Actor;
  vtkActor      *table2Actor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();

  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Now, we'll add our tables!
  table1 = new vtkStructuredGridGeometryFilter;
    table1->SetInput(reader->GetOutput());
    table1->SetExtent(11,15,7,9,8,8);

  mapTable1 = new vtkPolyMapper;
    mapTable1->SetInput(table1->GetOutput());
    mapTable1->ScalarsVisibleOff();

  table1Actor = new vtkActor;
    table1Actor->SetMapper(mapTable1);
    table1Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  table2 = new vtkStructuredGridGeometryFilter;
    table2->SetInput(reader->GetOutput());
    table2->SetExtent(11,15,10,12,8,8);

  mapTable2 = new vtkPolyMapper;
    mapTable2->SetInput(table2->GetOutput());
    mapTable2->ScalarsVisibleOff();

  table2Actor = new vtkActor;
    table2Actor->SetMapper(mapTable2);
    table2Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);


  ren->AddActors(outlineActor);
  ren->AddActors(table1Actor);
  ren->AddActors(table2Actor);
  ren->SetBackground(0.7,0.7,0.7);

  aCamera = new vtkCamera;
    aCamera->SetClippingRange(0.726079,36.3039);
    aCamera->SetFocalPoint(2.43584,2.15046,1.11104);
    aCamera->SetPosition(-4.76183, -10.4426, 3.17203);
    aCamera->CalcViewPlaneNormal();
    aCamera->SetViewUp(0.0511273,0.132773,0.989827);
    aCamera->SetViewAngle(18.604);

  ren->SetActiveCamera(aCamera);

  renWin->SetSize(750,500);
  renWin->Render();
}

What's an Office Without Filing Cabinets?

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader          *reader;
  vtkStructuredGridOutlineFilter   *outline;
  vtkStructuredGridGeometryFilter  *table1;
  vtkStructuredGridGeometryFilter  *table2;
  vtkStructuredGridGeometryFilter  *filingCabinet1;
  vtkStructuredGridGeometryFilter  *filingCabinet2;

  vtkCamera     *aCamera;

  vtkPolyMapper *mapOutline;
  vtkPolyMapper *mapTable1;
  vtkPolyMapper *mapTable2;
  vtkPolyMapper *mapFilingCabinet1;
  vtkPolyMapper *mapFilingCabinet2;

  vtkActor      *outlineActor;
  vtkActor      *table1Actor;
  vtkActor      *table2Actor;
  vtkActor      *filingCabinet1Actor;
  vtkActor      *filingCabinet2Actor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();

  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Now, we'll add our tables!
  table1 = new vtkStructuredGridGeometryFilter;
    table1->SetInput(reader->GetOutput());
    table1->SetExtent(11,15,7,9,8,8);
  mapTable1 = new vtkPolyMapper;
    mapTable1->SetInput(table1->GetOutput());
    mapTable1->ScalarsVisibleOff();
  table1Actor = new vtkActor;
    table1Actor->SetMapper(mapTable1);
    table1Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  table2 = new vtkStructuredGridGeometryFilter;
    table2->SetInput(reader->GetOutput());
    table2->SetExtent(11,15,10,12,8,8);
  mapTable2 = new vtkPolyMapper;
    mapTable2->SetInput(table2->GetOutput());
    mapTable2->ScalarsVisibleOff();
  table2Actor = new vtkActor;
    table2Actor->SetMapper(mapTable2);
    table2Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  // Next, some filing cabinets.
  filingCabinet1 = new vtkStructuredGridGeometryFilter;
    filingCabinet1->SetInput(reader->GetOutput());
    filingCabinet1->SetExtent(15,15,7,9,0,8);

  mapFilingCabinet1 = new vtkPolyMapper;
    mapFilingCabinet1->SetInput(filingCabinet1->GetOutput());
    mapFilingCabinet1->ScalarsVisibleOff();

  filingCabinet1Actor = new vtkActor;
    filingCabinet1Actor->SetMapper(mapFilingCabinet1);
    filingCabinet1Actor->GetProperty()->SetColor(0.8,0.8,0.6);

  filingCabinet2 = new vtkStructuredGridGeometryFilter;
    filingCabinet2->SetInput(reader->GetOutput());
    filingCabinet2->SetExtent(15,15,10,12,0,8);

  mapFilingCabinet2 = new vtkPolyMapper;
    mapFilingCabinet2->SetInput(filingCabinet2->GetOutput());
    mapFilingCabinet2->ScalarsVisibleOff();

  filingCabinet2Actor = new vtkActor;
    filingCabinet2Actor->SetMapper(mapFilingCabinet2);
    filingCabinet2Actor->GetProperty()->SetColor(0.8,0.8,0.6);


  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);

  ren->AddActors(outlineActor);
  ren->AddActors(table1Actor);
  ren->AddActors(table2Actor);
  ren->AddActors(filingCabinet1Actor);
  ren->AddActors(filingCabinet2Actor);
  ren->SetBackground(0.7,0.7,0.7);

  aCamera = new vtkCamera;
    aCamera->SetClippingRange(0.726079,36.3039);
    aCamera->SetFocalPoint(2.43584,2.15046,1.11104);
    aCamera->SetPosition(-4.76183, -10.4426, 3.17203);
    aCamera->CalcViewPlaneNormal();
    aCamera->SetViewUp(0.0511273,0.132773,0.989827);
    aCamera->SetViewAngle(18.604);

  ren->SetActiveCamera(aCamera);

  renWin->SetSize(750,500);
  renWin->Render();
}

(Don't tell me these don't look like file cabinets. It's a virtual world out there.)

Without Books, We Couldn't Do This.

Here come some bookcases.

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader          *reader;
  vtkStructuredGridOutlineFilter   *outline;
  vtkStructuredGridGeometryFilter  *table1;
  vtkStructuredGridGeometryFilter  *table2;
  vtkStructuredGridGeometryFilter  *filingCabinet1;
  vtkStructuredGridGeometryFilter  *filingCabinet2;
  vtkStructuredGridGeometryFilter  *bookShelf1Top;
  vtkStructuredGridGeometryFilter  *bookShelf1Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf1Front;
  vtkStructuredGridGeometryFilter  *bookShelf1Back;
  vtkStructuredGridGeometryFilter  *bookShelf1LHS;
  vtkStructuredGridGeometryFilter  *bookShelf1RHS;
  vtkStructuredGridGeometryFilter  *bookShelf2Top;
  vtkStructuredGridGeometryFilter  *bookShelf2Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf2Front;
  vtkStructuredGridGeometryFilter  *bookShelf2Back;
  vtkStructuredGridGeometryFilter  *bookShelf2LHS;
  vtkStructuredGridGeometryFilter  *bookShelf2RHS;

  vtkCamera     *aCamera;

  vtkPolyMapper *mapOutline;
  vtkPolyMapper *mapTable1;
  vtkPolyMapper *mapTable2;
  vtkPolyMapper *mapFilingCabinet1;
  vtkPolyMapper *mapFilingCabinet2;
  vtkPolyMapper *mapBookShelf1Top;
  vtkPolyMapper *mapBookShelf1Bottom;
  vtkPolyMapper *mapBookShelf1Front;
  vtkPolyMapper *mapBookShelf1Back;
  vtkPolyMapper *mapBookShelf1LHS;
  vtkPolyMapper *mapBookShelf1RHS;
  vtkPolyMapper *mapBookShelf2Top;
  vtkPolyMapper *mapBookShelf2Bottom;
  vtkPolyMapper *mapBookShelf2Front;
  vtkPolyMapper *mapBookShelf2Back;
  vtkPolyMapper *mapBookShelf2LHS;
  vtkPolyMapper *mapBookShelf2RHS;

  vtkActor      *outlineActor;
  vtkActor      *table1Actor;
  vtkActor      *table2Actor;
  vtkActor      *filingCabinet1Actor;
  vtkActor      *filingCabinet2Actor;
  vtkActor      *bookShelf1TopActor;
  vtkActor      *bookShelf1BottomActor;
  vtkActor      *bookShelf1FrontActor;
  vtkActor      *bookShelf1BackActor;
  vtkActor      *bookShelf1LHSActor;
  vtkActor      *bookShelf1RHSActor;
  vtkActor      *bookShelf2TopActor;
  vtkActor      *bookShelf2BottomActor;
  vtkActor      *bookShelf2FrontActor;
  vtkActor      *bookShelf2BackActor;
  vtkActor      *bookShelf2LHSActor;
  vtkActor      *bookShelf2RHSActor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();

  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Now, we'll add our tables!
  table1 = new vtkStructuredGridGeometryFilter;
    table1->SetInput(reader->GetOutput());
    table1->SetExtent(11,15,7,9,8,8);
  mapTable1 = new vtkPolyMapper;
    mapTable1->SetInput(table1->GetOutput());
    mapTable1->ScalarsVisibleOff();
  table1Actor = new vtkActor;
    table1Actor->SetMapper(mapTable1);
    table1Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  table2 = new vtkStructuredGridGeometryFilter;
    table2->SetInput(reader->GetOutput());
    table2->SetExtent(11,15,10,12,8,8);
  mapTable2 = new vtkPolyMapper;
    mapTable2->SetInput(table2->GetOutput());
    mapTable2->ScalarsVisibleOff();
  table2Actor = new vtkActor;
    table2Actor->SetMapper(mapTable2);
    table2Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  // Next, some filing cabinets.
  filingCabinet1 = new vtkStructuredGridGeometryFilter;
    filingCabinet1->SetInput(reader->GetOutput());
    filingCabinet1->SetExtent(15,15,7,9,0,8);
  mapFilingCabinet1 = new vtkPolyMapper;
    mapFilingCabinet1->SetInput(filingCabinet1->GetOutput());
    mapFilingCabinet1->ScalarsVisibleOff();
  filingCabinet1Actor = new vtkActor;
    filingCabinet1Actor->SetMapper(mapFilingCabinet1);
    filingCabinet1Actor->GetProperty()->SetColor(0.8,0.8,0.6);

  filingCabinet2 = new vtkStructuredGridGeometryFilter;
    filingCabinet2->SetInput(reader->GetOutput());
    filingCabinet2->SetExtent(15,15,10,12,0,8);
  mapFilingCabinet2 = new vtkPolyMapper;
    mapFilingCabinet2->SetInput(filingCabinet2->GetOutput());
    mapFilingCabinet2->ScalarsVisibleOff();
  filingCabinet2Actor = new vtkActor;
    filingCabinet2Actor->SetMapper(mapFilingCabinet2);
    filingCabinet2Actor->GetProperty()->SetColor(0.8,0.8,0.6);


  // A few bookshelves for good measure.
  bookShelf1Top = new vtkStructuredGridGeometryFilter;
    bookShelf1Top->SetInput(reader->GetOutput());
    bookShelf1Top->SetExtent(13,13,0,4,0,11);
  mapBookShelf1Top = new vtkPolyMapper;
    mapBookShelf1Top->SetInput(bookShelf1Top->GetOutput());
    mapBookShelf1Top->ScalarsVisibleOff();
  bookShelf1TopActor = new vtkActor;
    bookShelf1TopActor->SetMapper(mapBookShelf1Top);
    bookShelf1TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf1Bottom->SetInput(reader->GetOutput());
    bookShelf1Bottom->SetExtent(20,20,0,4,0,11);
  mapBookShelf1Bottom = new vtkPolyMapper;
    mapBookShelf1Bottom->SetInput(bookShelf1Bottom->GetOutput());
    mapBookShelf1Bottom->ScalarsVisibleOff();
  bookShelf1BottomActor = new vtkActor;
    bookShelf1BottomActor->SetMapper(mapBookShelf1Bottom);
    bookShelf1BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Front = new vtkStructuredGridGeometryFilter;
    bookShelf1Front->SetInput(reader->GetOutput());
    bookShelf1Front->SetExtent(13,20,0,0,0,11);
  mapBookShelf1Front = new vtkPolyMapper;
    mapBookShelf1Front->SetInput(bookShelf1Front->GetOutput());
    mapBookShelf1Front->ScalarsVisibleOff();
  bookShelf1FrontActor = new vtkActor;
    bookShelf1FrontActor->SetMapper(mapBookShelf1Front);
    bookShelf1FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Back = new vtkStructuredGridGeometryFilter;
    bookShelf1Back->SetInput(reader->GetOutput());
    bookShelf1Back->SetExtent(13,20,4,4,0,11);
  mapBookShelf1Back = new vtkPolyMapper;
    mapBookShelf1Back->SetInput(bookShelf1Back->GetOutput());
    mapBookShelf1Back->ScalarsVisibleOff();
  bookShelf1BackActor = new vtkActor;
    bookShelf1BackActor->SetMapper(mapBookShelf1Back);
    bookShelf1BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1LHS = new vtkStructuredGridGeometryFilter;
    bookShelf1LHS->SetInput(reader->GetOutput());
    bookShelf1LHS->SetExtent(13,20,0,4,0,0);
  mapBookShelf1LHS = new vtkPolyMapper;
    mapBookShelf1LHS->SetInput(bookShelf1LHS->GetOutput());
    mapBookShelf1LHS->ScalarsVisibleOff();
  bookShelf1LHSActor = new vtkActor;
    bookShelf1LHSActor->SetMapper(mapBookShelf1LHS);
    bookShelf1LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1RHS = new vtkStructuredGridGeometryFilter;
    bookShelf1RHS->SetInput(reader->GetOutput());
    bookShelf1RHS->SetExtent(13,20,0,4,11,11);
  mapBookShelf1RHS = new vtkPolyMapper;
    mapBookShelf1RHS->SetInput(bookShelf1RHS->GetOutput());
    mapBookShelf1RHS->ScalarsVisibleOff();
  bookShelf1RHSActor = new vtkActor;
    bookShelf1RHSActor->SetMapper(mapBookShelf1RHS);
    bookShelf1RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);
  

  bookShelf2Top = new vtkStructuredGridGeometryFilter;
    bookShelf2Top->SetInput(reader->GetOutput());
    bookShelf2Top->SetExtent(13,13,15,19,0,11);
  mapBookShelf2Top = new vtkPolyMapper;
    mapBookShelf2Top->SetInput(bookShelf2Top->GetOutput());
    mapBookShelf2Top->ScalarsVisibleOff();
  bookShelf2TopActor = new vtkActor;
    bookShelf2TopActor->SetMapper(mapBookShelf2Top);
    bookShelf2TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf2Bottom->SetInput(reader->GetOutput());
    bookShelf2Bottom->SetExtent(20,20,15,19,0,11);
  mapBookShelf2Bottom = new vtkPolyMapper;
    mapBookShelf2Bottom->SetInput(bookShelf2Bottom->GetOutput());
    mapBookShelf2Bottom->ScalarsVisibleOff();
  bookShelf2BottomActor = new vtkActor;
    bookShelf2BottomActor->SetMapper(mapBookShelf2Bottom);
    bookShelf2BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Front = new vtkStructuredGridGeometryFilter;
    bookShelf2Front->SetInput(reader->GetOutput());
    bookShelf2Front->SetExtent(13,20,15,15,0,11);
  mapBookShelf2Front = new vtkPolyMapper;
    mapBookShelf2Front->SetInput(bookShelf2Front->GetOutput());
    mapBookShelf2Front->ScalarsVisibleOff();
  bookShelf2FrontActor = new vtkActor;
    bookShelf2FrontActor->SetMapper(mapBookShelf2Front);
    bookShelf2FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Back = new vtkStructuredGridGeometryFilter;
    bookShelf2Back->SetInput(reader->GetOutput());
    bookShelf2Back->SetExtent(13,20,19,19,0,11);
  mapBookShelf2Back = new vtkPolyMapper;
    mapBookShelf2Back->SetInput(bookShelf2Back->GetOutput());
    mapBookShelf2Back->ScalarsVisibleOff();
  bookShelf2BackActor = new vtkActor;
    bookShelf2BackActor->SetMapper(mapBookShelf2Back);
    bookShelf2BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2LHS = new vtkStructuredGridGeometryFilter;
    bookShelf2LHS->SetInput(reader->GetOutput());
    bookShelf2LHS->SetExtent(13,20,15,19,0,0);
  mapBookShelf2LHS = new vtkPolyMapper;
    mapBookShelf2LHS->SetInput(bookShelf2LHS->GetOutput());
    mapBookShelf2LHS->ScalarsVisibleOff();
  bookShelf2LHSActor = new vtkActor;
    bookShelf2LHSActor->SetMapper(mapBookShelf2LHS);
    bookShelf2LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2RHS = new vtkStructuredGridGeometryFilter;
    bookShelf2RHS->SetInput(reader->GetOutput());
    bookShelf2RHS->SetExtent(13,20,15,19,11,11);
  mapBookShelf2RHS = new vtkPolyMapper;
    mapBookShelf2RHS->SetInput(bookShelf2RHS->GetOutput());
    mapBookShelf2RHS->ScalarsVisibleOff();
  bookShelf2RHSActor = new vtkActor;
    bookShelf2RHSActor->SetMapper(mapBookShelf2RHS);
    bookShelf2RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);



  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);

  ren->AddActors(outlineActor);
  ren->AddActors(table1Actor);
  ren->AddActors(table2Actor);
  ren->AddActors(filingCabinet1Actor);
  ren->AddActors(filingCabinet2Actor);
  ren->AddActors(bookShelf1TopActor);
  ren->AddActors(bookShelf1BottomActor);
  ren->AddActors(bookShelf1FrontActor);
  ren->AddActors(bookShelf1BackActor);
  ren->AddActors(bookShelf1LHSActor);
  ren->AddActors(bookShelf1RHSActor);
  ren->AddActors(bookShelf2TopActor);
  ren->AddActors(bookShelf2BottomActor);
  ren->AddActors(bookShelf2FrontActor);
  ren->AddActors(bookShelf2BackActor);
  ren->AddActors(bookShelf2LHSActor);
  ren->AddActors(bookShelf2RHSActor);

  ren->SetBackground(0.7,0.7,0.7);

  aCamera = new vtkCamera;
    aCamera->SetClippingRange(0.726079,36.3039);
    aCamera->SetFocalPoint(2.43584,2.15046,1.11104);
    aCamera->SetPosition(-4.76183, -10.4426, 3.17203);
    aCamera->CalcViewPlaneNormal();
    aCamera->SetViewUp(0.0511273,0.132773,0.989827);
    aCamera->SetViewAngle(18.604);

  ren->SetActiveCamera(aCamera);

  renWin->SetSize(750,500);
  renWin->Render();
}

Graduate Students Like Windows
(Not necessarily the Microsoft kind)

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader          *reader;
  vtkStructuredGridOutlineFilter   *outline;
  vtkStructuredGridGeometryFilter  *table1;
  vtkStructuredGridGeometryFilter  *table2;
  vtkStructuredGridGeometryFilter  *filingCabinet1;
  vtkStructuredGridGeometryFilter  *filingCabinet2;
  vtkStructuredGridGeometryFilter  *bookShelf1Top;
  vtkStructuredGridGeometryFilter  *bookShelf1Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf1Front;
  vtkStructuredGridGeometryFilter  *bookShelf1Back;
  vtkStructuredGridGeometryFilter  *bookShelf1LHS;
  vtkStructuredGridGeometryFilter  *bookShelf1RHS;
  vtkStructuredGridGeometryFilter  *bookShelf2Top;
  vtkStructuredGridGeometryFilter  *bookShelf2Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf2Front;
  vtkStructuredGridGeometryFilter  *bookShelf2Back;
  vtkStructuredGridGeometryFilter  *bookShelf2LHS;
  vtkStructuredGridGeometryFilter  *bookShelf2RHS;
  vtkStructuredGridGeometryFilter  *window;

  vtkCamera     *aCamera;

  vtkPolyMapper *mapOutline;
  vtkPolyMapper *mapTable1;
  vtkPolyMapper *mapTable2;
  vtkPolyMapper *mapFilingCabinet1;
  vtkPolyMapper *mapFilingCabinet2;
  vtkPolyMapper *mapBookShelf1Top;
  vtkPolyMapper *mapBookShelf1Bottom;
  vtkPolyMapper *mapBookShelf1Front;
  vtkPolyMapper *mapBookShelf1Back;
  vtkPolyMapper *mapBookShelf1LHS;
  vtkPolyMapper *mapBookShelf1RHS;
  vtkPolyMapper *mapBookShelf2Top;
  vtkPolyMapper *mapBookShelf2Bottom;
  vtkPolyMapper *mapBookShelf2Front;
  vtkPolyMapper *mapBookShelf2Back;
  vtkPolyMapper *mapBookShelf2LHS;
  vtkPolyMapper *mapBookShelf2RHS;
  vtkPolyMapper *mapWindow;

  vtkActor      *outlineActor;
  vtkActor      *table1Actor;
  vtkActor      *table2Actor;
  vtkActor      *filingCabinet1Actor;
  vtkActor      *filingCabinet2Actor;
  vtkActor      *bookShelf1TopActor;
  vtkActor      *bookShelf1BottomActor;
  vtkActor      *bookShelf1FrontActor;
  vtkActor      *bookShelf1BackActor;
  vtkActor      *bookShelf1LHSActor;
  vtkActor      *bookShelf1RHSActor;
  vtkActor      *bookShelf2TopActor;
  vtkActor      *bookShelf2BottomActor;
  vtkActor      *bookShelf2FrontActor;
  vtkActor      *bookShelf2BackActor;
  vtkActor      *bookShelf2LHSActor;
  vtkActor      *bookShelf2RHSActor;
  vtkActor      *windowActor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();

  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Now, we'll add our tables!
  table1 = new vtkStructuredGridGeometryFilter;
    table1->SetInput(reader->GetOutput());
    table1->SetExtent(11,15,7,9,8,8);
  mapTable1 = new vtkPolyMapper;
    mapTable1->SetInput(table1->GetOutput());
    mapTable1->ScalarsVisibleOff();
  table1Actor = new vtkActor;
    table1Actor->SetMapper(mapTable1);
    table1Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  table2 = new vtkStructuredGridGeometryFilter;
    table2->SetInput(reader->GetOutput());
    table2->SetExtent(11,15,10,12,8,8);
  mapTable2 = new vtkPolyMapper;
    mapTable2->SetInput(table2->GetOutput());
    mapTable2->ScalarsVisibleOff();
  table2Actor = new vtkActor;
    table2Actor->SetMapper(mapTable2);
    table2Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  // Next, some filing cabinets.
  filingCabinet1 = new vtkStructuredGridGeometryFilter;
    filingCabinet1->SetInput(reader->GetOutput());
    filingCabinet1->SetExtent(15,15,7,9,0,8);
  mapFilingCabinet1 = new vtkPolyMapper;
    mapFilingCabinet1->SetInput(filingCabinet1->GetOutput());
    mapFilingCabinet1->ScalarsVisibleOff();
  filingCabinet1Actor = new vtkActor;
    filingCabinet1Actor->SetMapper(mapFilingCabinet1);
    filingCabinet1Actor->GetProperty()->SetColor(0.8,0.8,0.6);

  filingCabinet2 = new vtkStructuredGridGeometryFilter;
    filingCabinet2->SetInput(reader->GetOutput());
    filingCabinet2->SetExtent(15,15,10,12,0,8);
  mapFilingCabinet2 = new vtkPolyMapper;
    mapFilingCabinet2->SetInput(filingCabinet2->GetOutput());
    mapFilingCabinet2->ScalarsVisibleOff();
  filingCabinet2Actor = new vtkActor;
    filingCabinet2Actor->SetMapper(mapFilingCabinet2);
    filingCabinet2Actor->GetProperty()->SetColor(0.8,0.8,0.6);


  // A few bookshelves for good measure.
  bookShelf1Top = new vtkStructuredGridGeometryFilter;
    bookShelf1Top->SetInput(reader->GetOutput());
    bookShelf1Top->SetExtent(13,13,0,4,0,11);
  mapBookShelf1Top = new vtkPolyMapper;
    mapBookShelf1Top->SetInput(bookShelf1Top->GetOutput());
    mapBookShelf1Top->ScalarsVisibleOff();
  bookShelf1TopActor = new vtkActor;
    bookShelf1TopActor->SetMapper(mapBookShelf1Top);
    bookShelf1TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf1Bottom->SetInput(reader->GetOutput());
    bookShelf1Bottom->SetExtent(20,20,0,4,0,11);
  mapBookShelf1Bottom = new vtkPolyMapper;
    mapBookShelf1Bottom->SetInput(bookShelf1Bottom->GetOutput());
    mapBookShelf1Bottom->ScalarsVisibleOff();
  bookShelf1BottomActor = new vtkActor;
    bookShelf1BottomActor->SetMapper(mapBookShelf1Bottom);
    bookShelf1BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Front = new vtkStructuredGridGeometryFilter;
    bookShelf1Front->SetInput(reader->GetOutput());
    bookShelf1Front->SetExtent(13,20,0,0,0,11);
  mapBookShelf1Front = new vtkPolyMapper;
    mapBookShelf1Front->SetInput(bookShelf1Front->GetOutput());
    mapBookShelf1Front->ScalarsVisibleOff();
  bookShelf1FrontActor = new vtkActor;
    bookShelf1FrontActor->SetMapper(mapBookShelf1Front);
    bookShelf1FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Back = new vtkStructuredGridGeometryFilter;
    bookShelf1Back->SetInput(reader->GetOutput());
    bookShelf1Back->SetExtent(13,20,4,4,0,11);
  mapBookShelf1Back = new vtkPolyMapper;
    mapBookShelf1Back->SetInput(bookShelf1Back->GetOutput());
    mapBookShelf1Back->ScalarsVisibleOff();
  bookShelf1BackActor = new vtkActor;
    bookShelf1BackActor->SetMapper(mapBookShelf1Back);
    bookShelf1BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1LHS = new vtkStructuredGridGeometryFilter;
    bookShelf1LHS->SetInput(reader->GetOutput());
    bookShelf1LHS->SetExtent(13,20,0,4,0,0);
  mapBookShelf1LHS = new vtkPolyMapper;
    mapBookShelf1LHS->SetInput(bookShelf1LHS->GetOutput());
    mapBookShelf1LHS->ScalarsVisibleOff();
  bookShelf1LHSActor = new vtkActor;
    bookShelf1LHSActor->SetMapper(mapBookShelf1LHS);
    bookShelf1LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1RHS = new vtkStructuredGridGeometryFilter;
    bookShelf1RHS->SetInput(reader->GetOutput());
    bookShelf1RHS->SetExtent(13,20,0,4,11,11);
  mapBookShelf1RHS = new vtkPolyMapper;
    mapBookShelf1RHS->SetInput(bookShelf1RHS->GetOutput());
    mapBookShelf1RHS->ScalarsVisibleOff();
  bookShelf1RHSActor = new vtkActor;
    bookShelf1RHSActor->SetMapper(mapBookShelf1RHS);
    bookShelf1RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);
  

  bookShelf2Top = new vtkStructuredGridGeometryFilter;
    bookShelf2Top->SetInput(reader->GetOutput());
    bookShelf2Top->SetExtent(13,13,15,19,0,11);
  mapBookShelf2Top = new vtkPolyMapper;
    mapBookShelf2Top->SetInput(bookShelf2Top->GetOutput());
    mapBookShelf2Top->ScalarsVisibleOff();
  bookShelf2TopActor = new vtkActor;
    bookShelf2TopActor->SetMapper(mapBookShelf2Top);
    bookShelf2TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf2Bottom->SetInput(reader->GetOutput());
    bookShelf2Bottom->SetExtent(20,20,15,19,0,11);
  mapBookShelf2Bottom = new vtkPolyMapper;
    mapBookShelf2Bottom->SetInput(bookShelf2Bottom->GetOutput());
    mapBookShelf2Bottom->ScalarsVisibleOff();
  bookShelf2BottomActor = new vtkActor;
    bookShelf2BottomActor->SetMapper(mapBookShelf2Bottom);
    bookShelf2BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Front = new vtkStructuredGridGeometryFilter;
    bookShelf2Front->SetInput(reader->GetOutput());
    bookShelf2Front->SetExtent(13,20,15,15,0,11);
  mapBookShelf2Front = new vtkPolyMapper;
    mapBookShelf2Front->SetInput(bookShelf2Front->GetOutput());
    mapBookShelf2Front->ScalarsVisibleOff();
  bookShelf2FrontActor = new vtkActor;
    bookShelf2FrontActor->SetMapper(mapBookShelf2Front);
    bookShelf2FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Back = new vtkStructuredGridGeometryFilter;
    bookShelf2Back->SetInput(reader->GetOutput());
    bookShelf2Back->SetExtent(13,20,19,19,0,11);
  mapBookShelf2Back = new vtkPolyMapper;
    mapBookShelf2Back->SetInput(bookShelf2Back->GetOutput());
    mapBookShelf2Back->ScalarsVisibleOff();
  bookShelf2BackActor = new vtkActor;
    bookShelf2BackActor->SetMapper(mapBookShelf2Back);
    bookShelf2BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2LHS = new vtkStructuredGridGeometryFilter;
    bookShelf2LHS->SetInput(reader->GetOutput());
    bookShelf2LHS->SetExtent(13,20,15,19,0,0);
  mapBookShelf2LHS = new vtkPolyMapper;
    mapBookShelf2LHS->SetInput(bookShelf2LHS->GetOutput());
    mapBookShelf2LHS->ScalarsVisibleOff();
  bookShelf2LHSActor = new vtkActor;
    bookShelf2LHSActor->SetMapper(mapBookShelf2LHS);
    bookShelf2LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2RHS = new vtkStructuredGridGeometryFilter;
    bookShelf2RHS->SetInput(reader->GetOutput());
    bookShelf2RHS->SetExtent(13,20,15,19,11,11);
  mapBookShelf2RHS = new vtkPolyMapper;
    mapBookShelf2RHS->SetInput(bookShelf2RHS->GetOutput());
    mapBookShelf2RHS->ScalarsVisibleOff();
  bookShelf2RHSActor = new vtkActor;
    bookShelf2RHSActor->SetMapper(mapBookShelf2RHS);
    bookShelf2RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  // What's life without a window or two?
  window = new vtkStructuredGridGeometryFilter;
    window->SetInput(reader->GetOutput());
    window->SetExtent(20,20,6,13,10,13);
  mapWindow = new vtkPolyMapper;
    mapWindow->SetInput(window->GetOutput());
    mapWindow->ScalarsVisibleOff();
  windowActor = new vtkActor;
    windowActor->SetMapper(mapWindow);
    windowActor->GetProperty()->SetColor(0.3,0.3,0.5);


  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);

  ren->AddActors(outlineActor);
  ren->AddActors(table1Actor);
  ren->AddActors(table2Actor);
  ren->AddActors(filingCabinet1Actor);
  ren->AddActors(filingCabinet2Actor);
  ren->AddActors(bookShelf1TopActor);
  ren->AddActors(bookShelf1BottomActor);
  ren->AddActors(bookShelf1FrontActor);
  ren->AddActors(bookShelf1BackActor);
  ren->AddActors(bookShelf1LHSActor);
  ren->AddActors(bookShelf1RHSActor);
  ren->AddActors(bookShelf2TopActor);
  ren->AddActors(bookShelf2BottomActor);
  ren->AddActors(bookShelf2FrontActor);
  ren->AddActors(bookShelf2BackActor);
  ren->AddActors(bookShelf2LHSActor);
  ren->AddActors(bookShelf2RHSActor);
  ren->AddActors(windowActor);

  ren->SetBackground(0.7,0.7,0.7);

  aCamera = new vtkCamera;
    aCamera->SetClippingRange(0.726079,36.3039);
    aCamera->SetFocalPoint(2.43584,2.15046,1.11104);
    aCamera->SetPosition(-4.76183, -10.4426, 3.17203);
    aCamera->CalcViewPlaneNormal();
    aCamera->SetViewUp(0.0511273,0.132773,0.989827);
    aCamera->SetViewAngle(18.604);

  ren->SetActiveCamera(aCamera);

  renWin->SetSize(750,500);
  renWin->Render();
}

Does anybody remember why we were doing this?

The data set described air flow and pressure, so let's get to it. Before we can really attack the data, we need one more thing: inlets and outlets for the air to enter and leave!

Ventilation Is a Good Thing.

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader          *reader;
  vtkStructuredGridOutlineFilter   *outline;
  vtkStructuredGridGeometryFilter  *table1;
  vtkStructuredGridGeometryFilter  *table2;
  vtkStructuredGridGeometryFilter  *filingCabinet1;
  vtkStructuredGridGeometryFilter  *filingCabinet2;
  vtkStructuredGridGeometryFilter  *bookShelf1Top;
  vtkStructuredGridGeometryFilter  *bookShelf1Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf1Front;
  vtkStructuredGridGeometryFilter  *bookShelf1Back;
  vtkStructuredGridGeometryFilter  *bookShelf1LHS;
  vtkStructuredGridGeometryFilter  *bookShelf1RHS;
  vtkStructuredGridGeometryFilter  *bookShelf2Top;
  vtkStructuredGridGeometryFilter  *bookShelf2Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf2Front;
  vtkStructuredGridGeometryFilter  *bookShelf2Back;
  vtkStructuredGridGeometryFilter  *bookShelf2LHS;
  vtkStructuredGridGeometryFilter  *bookShelf2RHS;
  vtkStructuredGridGeometryFilter  *window;
  vtkStructuredGridGeometryFilter  *inlet;
  vtkStructuredGridGeometryFilter  *outlet;

  vtkCamera     *aCamera;

  vtkPolyMapper *mapOutline;
  vtkPolyMapper *mapTable1;
  vtkPolyMapper *mapTable2;
  vtkPolyMapper *mapFilingCabinet1;
  vtkPolyMapper *mapFilingCabinet2;
  vtkPolyMapper *mapBookShelf1Top;
  vtkPolyMapper *mapBookShelf1Bottom;
  vtkPolyMapper *mapBookShelf1Front;
  vtkPolyMapper *mapBookShelf1Back;
  vtkPolyMapper *mapBookShelf1LHS;
  vtkPolyMapper *mapBookShelf1RHS;
  vtkPolyMapper *mapBookShelf2Top;
  vtkPolyMapper *mapBookShelf2Bottom;
  vtkPolyMapper *mapBookShelf2Front;
  vtkPolyMapper *mapBookShelf2Back;
  vtkPolyMapper *mapBookShelf2LHS;
  vtkPolyMapper *mapBookShelf2RHS;
  vtkPolyMapper *mapWindow;
  vtkPolyMapper *mapInlet;
  vtkPolyMapper *mapOutlet;

  vtkActor      *outlineActor;
  vtkActor      *table1Actor;
  vtkActor      *table2Actor;
  vtkActor      *filingCabinet1Actor;
  vtkActor      *filingCabinet2Actor;
  vtkActor      *bookShelf1TopActor;
  vtkActor      *bookShelf1BottomActor;
  vtkActor      *bookShelf1FrontActor;
  vtkActor      *bookShelf1BackActor;
  vtkActor      *bookShelf1LHSActor;
  vtkActor      *bookShelf1RHSActor;
  vtkActor      *bookShelf2TopActor;
  vtkActor      *bookShelf2BottomActor;
  vtkActor      *bookShelf2FrontActor;
  vtkActor      *bookShelf2BackActor;
  vtkActor      *bookShelf2LHSActor;
  vtkActor      *bookShelf2RHSActor;
  vtkActor      *windowActor;
  vtkActor      *inletActor;
  vtkActor      *outletActor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();

  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Now, we'll add our tables!
  table1 = new vtkStructuredGridGeometryFilter;
    table1->SetInput(reader->GetOutput());
    table1->SetExtent(11,15,7,9,8,8);
  mapTable1 = new vtkPolyMapper;
    mapTable1->SetInput(table1->GetOutput());
    mapTable1->ScalarsVisibleOff();
  table1Actor = new vtkActor;
    table1Actor->SetMapper(mapTable1);
    table1Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  table2 = new vtkStructuredGridGeometryFilter;
    table2->SetInput(reader->GetOutput());
    table2->SetExtent(11,15,10,12,8,8);
  mapTable2 = new vtkPolyMapper;
    mapTable2->SetInput(table2->GetOutput());
    mapTable2->ScalarsVisibleOff();
  table2Actor = new vtkActor;
    table2Actor->SetMapper(mapTable2);
    table2Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  // Next, some filing cabinets.
  filingCabinet1 = new vtkStructuredGridGeometryFilter;
    filingCabinet1->SetInput(reader->GetOutput());
    filingCabinet1->SetExtent(15,15,7,9,0,8);
  mapFilingCabinet1 = new vtkPolyMapper;
    mapFilingCabinet1->SetInput(filingCabinet1->GetOutput());
    mapFilingCabinet1->ScalarsVisibleOff();
  filingCabinet1Actor = new vtkActor;
    filingCabinet1Actor->SetMapper(mapFilingCabinet1);
    filingCabinet1Actor->GetProperty()->SetColor(0.8,0.8,0.6);

  filingCabinet2 = new vtkStructuredGridGeometryFilter;
    filingCabinet2->SetInput(reader->GetOutput());
    filingCabinet2->SetExtent(15,15,10,12,0,8);
  mapFilingCabinet2 = new vtkPolyMapper;
    mapFilingCabinet2->SetInput(filingCabinet2->GetOutput());
    mapFilingCabinet2->ScalarsVisibleOff();
  filingCabinet2Actor = new vtkActor;
    filingCabinet2Actor->SetMapper(mapFilingCabinet2);
    filingCabinet2Actor->GetProperty()->SetColor(0.8,0.8,0.6);


  // A few bookshelves for good measure.
  bookShelf1Top = new vtkStructuredGridGeometryFilter;
    bookShelf1Top->SetInput(reader->GetOutput());
    bookShelf1Top->SetExtent(13,13,0,4,0,11);
  mapBookShelf1Top = new vtkPolyMapper;
    mapBookShelf1Top->SetInput(bookShelf1Top->GetOutput());
    mapBookShelf1Top->ScalarsVisibleOff();
  bookShelf1TopActor = new vtkActor;
    bookShelf1TopActor->SetMapper(mapBookShelf1Top);
    bookShelf1TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf1Bottom->SetInput(reader->GetOutput());
    bookShelf1Bottom->SetExtent(20,20,0,4,0,11);
  mapBookShelf1Bottom = new vtkPolyMapper;
    mapBookShelf1Bottom->SetInput(bookShelf1Bottom->GetOutput());
    mapBookShelf1Bottom->ScalarsVisibleOff();
  bookShelf1BottomActor = new vtkActor;
    bookShelf1BottomActor->SetMapper(mapBookShelf1Bottom);
    bookShelf1BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Front = new vtkStructuredGridGeometryFilter;
    bookShelf1Front->SetInput(reader->GetOutput());
    bookShelf1Front->SetExtent(13,20,0,0,0,11);
  mapBookShelf1Front = new vtkPolyMapper;
    mapBookShelf1Front->SetInput(bookShelf1Front->GetOutput());
    mapBookShelf1Front->ScalarsVisibleOff();
  bookShelf1FrontActor = new vtkActor;
    bookShelf1FrontActor->SetMapper(mapBookShelf1Front);
    bookShelf1FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Back = new vtkStructuredGridGeometryFilter;
    bookShelf1Back->SetInput(reader->GetOutput());
    bookShelf1Back->SetExtent(13,20,4,4,0,11);
  mapBookShelf1Back = new vtkPolyMapper;
    mapBookShelf1Back->SetInput(bookShelf1Back->GetOutput());
    mapBookShelf1Back->ScalarsVisibleOff();
  bookShelf1BackActor = new vtkActor;
    bookShelf1BackActor->SetMapper(mapBookShelf1Back);
    bookShelf1BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1LHS = new vtkStructuredGridGeometryFilter;
    bookShelf1LHS->SetInput(reader->GetOutput());
    bookShelf1LHS->SetExtent(13,20,0,4,0,0);
  mapBookShelf1LHS = new vtkPolyMapper;
    mapBookShelf1LHS->SetInput(bookShelf1LHS->GetOutput());
    mapBookShelf1LHS->ScalarsVisibleOff();
  bookShelf1LHSActor = new vtkActor;
    bookShelf1LHSActor->SetMapper(mapBookShelf1LHS);
    bookShelf1LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1RHS = new vtkStructuredGridGeometryFilter;
    bookShelf1RHS->SetInput(reader->GetOutput());
    bookShelf1RHS->SetExtent(13,20,0,4,11,11);
  mapBookShelf1RHS = new vtkPolyMapper;
    mapBookShelf1RHS->SetInput(bookShelf1RHS->GetOutput());
    mapBookShelf1RHS->ScalarsVisibleOff();
  bookShelf1RHSActor = new vtkActor;
    bookShelf1RHSActor->SetMapper(mapBookShelf1RHS);
    bookShelf1RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);
  

  bookShelf2Top = new vtkStructuredGridGeometryFilter;
    bookShelf2Top->SetInput(reader->GetOutput());
    bookShelf2Top->SetExtent(13,13,15,19,0,11);
  mapBookShelf2Top = new vtkPolyMapper;
    mapBookShelf2Top->SetInput(bookShelf2Top->GetOutput());
    mapBookShelf2Top->ScalarsVisibleOff();
  bookShelf2TopActor = new vtkActor;
    bookShelf2TopActor->SetMapper(mapBookShelf2Top);
    bookShelf2TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf2Bottom->SetInput(reader->GetOutput());
    bookShelf2Bottom->SetExtent(20,20,15,19,0,11);
  mapBookShelf2Bottom = new vtkPolyMapper;
    mapBookShelf2Bottom->SetInput(bookShelf2Bottom->GetOutput());
    mapBookShelf2Bottom->ScalarsVisibleOff();
  bookShelf2BottomActor = new vtkActor;
    bookShelf2BottomActor->SetMapper(mapBookShelf2Bottom);
    bookShelf2BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Front = new vtkStructuredGridGeometryFilter;
    bookShelf2Front->SetInput(reader->GetOutput());
    bookShelf2Front->SetExtent(13,20,15,15,0,11);
  mapBookShelf2Front = new vtkPolyMapper;
    mapBookShelf2Front->SetInput(bookShelf2Front->GetOutput());
    mapBookShelf2Front->ScalarsVisibleOff();
  bookShelf2FrontActor = new vtkActor;
    bookShelf2FrontActor->SetMapper(mapBookShelf2Front);
    bookShelf2FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Back = new vtkStructuredGridGeometryFilter;
    bookShelf2Back->SetInput(reader->GetOutput());
    bookShelf2Back->SetExtent(13,20,19,19,0,11);
  mapBookShelf2Back = new vtkPolyMapper;
    mapBookShelf2Back->SetInput(bookShelf2Back->GetOutput());
    mapBookShelf2Back->ScalarsVisibleOff();
  bookShelf2BackActor = new vtkActor;
    bookShelf2BackActor->SetMapper(mapBookShelf2Back);
    bookShelf2BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2LHS = new vtkStructuredGridGeometryFilter;
    bookShelf2LHS->SetInput(reader->GetOutput());
    bookShelf2LHS->SetExtent(13,20,15,19,0,0);
  mapBookShelf2LHS = new vtkPolyMapper;
    mapBookShelf2LHS->SetInput(bookShelf2LHS->GetOutput());
    mapBookShelf2LHS->ScalarsVisibleOff();
  bookShelf2LHSActor = new vtkActor;
    bookShelf2LHSActor->SetMapper(mapBookShelf2LHS);
    bookShelf2LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2RHS = new vtkStructuredGridGeometryFilter;
    bookShelf2RHS->SetInput(reader->GetOutput());
    bookShelf2RHS->SetExtent(13,20,15,19,11,11);
  mapBookShelf2RHS = new vtkPolyMapper;
    mapBookShelf2RHS->SetInput(bookShelf2RHS->GetOutput());
    mapBookShelf2RHS->ScalarsVisibleOff();
  bookShelf2RHSActor = new vtkActor;
    bookShelf2RHSActor->SetMapper(mapBookShelf2RHS);
    bookShelf2RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  // What's life without a window or two?
  window = new vtkStructuredGridGeometryFilter;
    window->SetInput(reader->GetOutput());
    window->SetExtent(20,20,6,13,10,13);
  mapWindow = new vtkPolyMapper;
    mapWindow->SetInput(window->GetOutput());
    mapWindow->ScalarsVisibleOff();
  windowActor = new vtkActor;
    windowActor->SetMapper(mapWindow);
    windowActor->GetProperty()->SetColor(0.3,0.3,0.5);

  // Don't forget the ventilation, man.
  inlet = new vtkStructuredGridGeometryFilter;
    inlet->SetInput(reader->GetOutput());
    inlet->SetExtent(0,0,9,10,0,6);
  mapInlet = new vtkPolyMapper;
    mapInlet->SetInput(inlet->GetOutput());
    mapInlet->ScalarsVisibleOff();
  inletActor = new vtkActor;
    inletActor->SetMapper(mapInlet);
    inletActor->GetProperty()->SetColor(0.0,0.0,0.0);

  outlet = new vtkStructuredGridGeometryFilter;
    outlet->SetInput(reader->GetOutput());
    outlet->SetExtent(0,0,9,10,14,16);
  mapOutlet = new vtkPolyMapper;
    mapOutlet->SetInput(outlet->GetOutput());
    mapOutlet->ScalarsVisibleOff();
  outletActor = new vtkActor;
    outletActor->SetMapper(mapOutlet);
    outletActor->GetProperty()->SetColor(0.0,0.0,0.0);
  

  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);

  ren->AddActors(outlineActor);
  ren->AddActors(table1Actor);
  ren->AddActors(table2Actor);
  ren->AddActors(filingCabinet1Actor);
  ren->AddActors(filingCabinet2Actor);
  ren->AddActors(bookShelf1TopActor);
  ren->AddActors(bookShelf1BottomActor);
  ren->AddActors(bookShelf1FrontActor);
  ren->AddActors(bookShelf1BackActor);
  ren->AddActors(bookShelf1LHSActor);
  ren->AddActors(bookShelf1RHSActor);
  ren->AddActors(bookShelf2TopActor);
  ren->AddActors(bookShelf2BottomActor);
  ren->AddActors(bookShelf2FrontActor);
  ren->AddActors(bookShelf2BackActor);
  ren->AddActors(bookShelf2LHSActor);
  ren->AddActors(bookShelf2RHSActor);
  ren->AddActors(windowActor);
  ren->AddActors(inletActor);
  ren->AddActors(outletActor);

  ren->SetBackground(0.7,0.7,0.7);

  aCamera = new vtkCamera;
    aCamera->SetClippingRange(0.726079,36.3039);
    aCamera->SetFocalPoint(2.43584,2.15046,1.11104);
    aCamera->SetPosition(-4.76183, -10.4426, 3.17203);
    aCamera->CalcViewPlaneNormal();
    aCamera->SetViewUp(0.0511273,0.132773,0.989827);
    aCamera->SetViewAngle(18.604);

  ren->SetActiveCamera(aCamera);

  renWin->SetSize(750,500);
  renWin->Render();
}

Ok, so we've built our office, and we've got a data set which thoroughly describes how air moves through our office.

Let's make some random points near our inlet and then follow them through the room!

Streamers!

#include "vtk.hh"

main() {

  vtkRenderMaster          rm;
  vtkRenderWindow         *renWin;
  vtkRenderer             *ren;

  vtkStructuredGridReader          *reader;
  vtkStructuredGridOutlineFilter   *outline;
  vtkStructuredGridGeometryFilter  *table1;
  vtkStructuredGridGeometryFilter  *table2;
  vtkStructuredGridGeometryFilter  *filingCabinet1;
  vtkStructuredGridGeometryFilter  *filingCabinet2;
  vtkStructuredGridGeometryFilter  *bookShelf1Top;
  vtkStructuredGridGeometryFilter  *bookShelf1Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf1Front;
  vtkStructuredGridGeometryFilter  *bookShelf1Back;
  vtkStructuredGridGeometryFilter  *bookShelf1LHS;
  vtkStructuredGridGeometryFilter  *bookShelf1RHS;
  vtkStructuredGridGeometryFilter  *bookShelf2Top;
  vtkStructuredGridGeometryFilter  *bookShelf2Bottom;
  vtkStructuredGridGeometryFilter  *bookShelf2Front;
  vtkStructuredGridGeometryFilter  *bookShelf2Back;
  vtkStructuredGridGeometryFilter  *bookShelf2LHS;
  vtkStructuredGridGeometryFilter  *bookShelf2RHS;
  vtkStructuredGridGeometryFilter  *window;
  vtkStructuredGridGeometryFilter  *inlet;
  vtkStructuredGridGeometryFilter  *outlet;

  vtkCamera     *aCamera;

  vtkPolyMapper *mapOutline;
  vtkPolyMapper *mapTable1;
  vtkPolyMapper *mapTable2;
  vtkPolyMapper *mapFilingCabinet1;
  vtkPolyMapper *mapFilingCabinet2;
  vtkPolyMapper *mapBookShelf1Top;
  vtkPolyMapper *mapBookShelf1Bottom;
  vtkPolyMapper *mapBookShelf1Front;
  vtkPolyMapper *mapBookShelf1Back;
  vtkPolyMapper *mapBookShelf1LHS;
  vtkPolyMapper *mapBookShelf1RHS;
  vtkPolyMapper *mapBookShelf2Top;
  vtkPolyMapper *mapBookShelf2Bottom;
  vtkPolyMapper *mapBookShelf2Front;
  vtkPolyMapper *mapBookShelf2Back;
  vtkPolyMapper *mapBookShelf2LHS;
  vtkPolyMapper *mapBookShelf2RHS;
  vtkPolyMapper *mapWindow;
  vtkPolyMapper *mapInlet;
  vtkPolyMapper *mapOutlet;

  vtkActor      *outlineActor;
  vtkActor      *table1Actor;
  vtkActor      *table2Actor;
  vtkActor      *filingCabinet1Actor;
  vtkActor      *filingCabinet2Actor;
  vtkActor      *bookShelf1TopActor;
  vtkActor      *bookShelf1BottomActor;
  vtkActor      *bookShelf1FrontActor;
  vtkActor      *bookShelf1BackActor;
  vtkActor      *bookShelf1LHSActor;
  vtkActor      *bookShelf1RHSActor;
  vtkActor      *bookShelf2TopActor;
  vtkActor      *bookShelf2BottomActor;
  vtkActor      *bookShelf2FrontActor;
  vtkActor      *bookShelf2BackActor;
  vtkActor      *bookShelf2LHSActor;
  vtkActor      *bookShelf2RHSActor;
  vtkActor      *windowActor;
  vtkActor      *inletActor;
  vtkActor      *outletActor;

  vtkPointSource     *seeds;
  vtkStreamLine      *streamers;
  vtkPolyMapper      *mapStreamers;
  vtkActor           *streamersActor;

  renWin = rm.MakeRenderWindow();
  ren    = renWin->MakeRenderer();

  // First, we read in our data.
  reader = new vtkStructuredGridReader;
    reader->SetFilename("./office.vtk");
    reader->Update();

  // Now, we'll add our tables!
  table1 = new vtkStructuredGridGeometryFilter;
    table1->SetInput(reader->GetOutput());
    table1->SetExtent(11,15,7,9,8,8);
  mapTable1 = new vtkPolyMapper;
    mapTable1->SetInput(table1->GetOutput());
    mapTable1->ScalarsVisibleOff();
  table1Actor = new vtkActor;
    table1Actor->SetMapper(mapTable1);
    table1Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  table2 = new vtkStructuredGridGeometryFilter;
    table2->SetInput(reader->GetOutput());
    table2->SetExtent(11,15,10,12,8,8);
  mapTable2 = new vtkPolyMapper;
    mapTable2->SetInput(table2->GetOutput());
    mapTable2->ScalarsVisibleOff();
  table2Actor = new vtkActor;
    table2Actor->SetMapper(mapTable2);
    table2Actor->GetProperty()->SetColor(0.59,0.427,0.392);

  // Next, some filing cabinets.
  filingCabinet1 = new vtkStructuredGridGeometryFilter;
    filingCabinet1->SetInput(reader->GetOutput());
    filingCabinet1->SetExtent(15,15,7,9,0,8);
  mapFilingCabinet1 = new vtkPolyMapper;
    mapFilingCabinet1->SetInput(filingCabinet1->GetOutput());
    mapFilingCabinet1->ScalarsVisibleOff();
  filingCabinet1Actor = new vtkActor;
    filingCabinet1Actor->SetMapper(mapFilingCabinet1);
    filingCabinet1Actor->GetProperty()->SetColor(0.8,0.8,0.6);

  filingCabinet2 = new vtkStructuredGridGeometryFilter;
    filingCabinet2->SetInput(reader->GetOutput());
    filingCabinet2->SetExtent(15,15,10,12,0,8);
  mapFilingCabinet2 = new vtkPolyMapper;
    mapFilingCabinet2->SetInput(filingCabinet2->GetOutput());
    mapFilingCabinet2->ScalarsVisibleOff();
  filingCabinet2Actor = new vtkActor;
    filingCabinet2Actor->SetMapper(mapFilingCabinet2);
    filingCabinet2Actor->GetProperty()->SetColor(0.8,0.8,0.6);


  // A few bookshelves for good measure.
  bookShelf1Top = new vtkStructuredGridGeometryFilter;
    bookShelf1Top->SetInput(reader->GetOutput());
    bookShelf1Top->SetExtent(13,13,0,4,0,11);
  mapBookShelf1Top = new vtkPolyMapper;
    mapBookShelf1Top->SetInput(bookShelf1Top->GetOutput());
    mapBookShelf1Top->ScalarsVisibleOff();
  bookShelf1TopActor = new vtkActor;
    bookShelf1TopActor->SetMapper(mapBookShelf1Top);
    bookShelf1TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf1Bottom->SetInput(reader->GetOutput());
    bookShelf1Bottom->SetExtent(20,20,0,4,0,11);
  mapBookShelf1Bottom = new vtkPolyMapper;
    mapBookShelf1Bottom->SetInput(bookShelf1Bottom->GetOutput());
    mapBookShelf1Bottom->ScalarsVisibleOff();
  bookShelf1BottomActor = new vtkActor;
    bookShelf1BottomActor->SetMapper(mapBookShelf1Bottom);
    bookShelf1BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Front = new vtkStructuredGridGeometryFilter;
    bookShelf1Front->SetInput(reader->GetOutput());
    bookShelf1Front->SetExtent(13,20,0,0,0,11);
  mapBookShelf1Front = new vtkPolyMapper;
    mapBookShelf1Front->SetInput(bookShelf1Front->GetOutput());
    mapBookShelf1Front->ScalarsVisibleOff();
  bookShelf1FrontActor = new vtkActor;
    bookShelf1FrontActor->SetMapper(mapBookShelf1Front);
    bookShelf1FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1Back = new vtkStructuredGridGeometryFilter;
    bookShelf1Back->SetInput(reader->GetOutput());
    bookShelf1Back->SetExtent(13,20,4,4,0,11);
  mapBookShelf1Back = new vtkPolyMapper;
    mapBookShelf1Back->SetInput(bookShelf1Back->GetOutput());
    mapBookShelf1Back->ScalarsVisibleOff();
  bookShelf1BackActor = new vtkActor;
    bookShelf1BackActor->SetMapper(mapBookShelf1Back);
    bookShelf1BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1LHS = new vtkStructuredGridGeometryFilter;
    bookShelf1LHS->SetInput(reader->GetOutput());
    bookShelf1LHS->SetExtent(13,20,0,4,0,0);
  mapBookShelf1LHS = new vtkPolyMapper;
    mapBookShelf1LHS->SetInput(bookShelf1LHS->GetOutput());
    mapBookShelf1LHS->ScalarsVisibleOff();
  bookShelf1LHSActor = new vtkActor;
    bookShelf1LHSActor->SetMapper(mapBookShelf1LHS);
    bookShelf1LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf1RHS = new vtkStructuredGridGeometryFilter;
    bookShelf1RHS->SetInput(reader->GetOutput());
    bookShelf1RHS->SetExtent(13,20,0,4,11,11);
  mapBookShelf1RHS = new vtkPolyMapper;
    mapBookShelf1RHS->SetInput(bookShelf1RHS->GetOutput());
    mapBookShelf1RHS->ScalarsVisibleOff();
  bookShelf1RHSActor = new vtkActor;
    bookShelf1RHSActor->SetMapper(mapBookShelf1RHS);
    bookShelf1RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);
  

  bookShelf2Top = new vtkStructuredGridGeometryFilter;
    bookShelf2Top->SetInput(reader->GetOutput());
    bookShelf2Top->SetExtent(13,13,15,19,0,11);
  mapBookShelf2Top = new vtkPolyMapper;
    mapBookShelf2Top->SetInput(bookShelf2Top->GetOutput());
    mapBookShelf2Top->ScalarsVisibleOff();
  bookShelf2TopActor = new vtkActor;
    bookShelf2TopActor->SetMapper(mapBookShelf2Top);
    bookShelf2TopActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Bottom = new vtkStructuredGridGeometryFilter;
    bookShelf2Bottom->SetInput(reader->GetOutput());
    bookShelf2Bottom->SetExtent(20,20,15,19,0,11);
  mapBookShelf2Bottom = new vtkPolyMapper;
    mapBookShelf2Bottom->SetInput(bookShelf2Bottom->GetOutput());
    mapBookShelf2Bottom->ScalarsVisibleOff();
  bookShelf2BottomActor = new vtkActor;
    bookShelf2BottomActor->SetMapper(mapBookShelf2Bottom);
    bookShelf2BottomActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Front = new vtkStructuredGridGeometryFilter;
    bookShelf2Front->SetInput(reader->GetOutput());
    bookShelf2Front->SetExtent(13,20,15,15,0,11);
  mapBookShelf2Front = new vtkPolyMapper;
    mapBookShelf2Front->SetInput(bookShelf2Front->GetOutput());
    mapBookShelf2Front->ScalarsVisibleOff();
  bookShelf2FrontActor = new vtkActor;
    bookShelf2FrontActor->SetMapper(mapBookShelf2Front);
    bookShelf2FrontActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2Back = new vtkStructuredGridGeometryFilter;
    bookShelf2Back->SetInput(reader->GetOutput());
    bookShelf2Back->SetExtent(13,20,19,19,0,11);
  mapBookShelf2Back = new vtkPolyMapper;
    mapBookShelf2Back->SetInput(bookShelf2Back->GetOutput());
    mapBookShelf2Back->ScalarsVisibleOff();
  bookShelf2BackActor = new vtkActor;
    bookShelf2BackActor->SetMapper(mapBookShelf2Back);
    bookShelf2BackActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2LHS = new vtkStructuredGridGeometryFilter;
    bookShelf2LHS->SetInput(reader->GetOutput());
    bookShelf2LHS->SetExtent(13,20,15,19,0,0);
  mapBookShelf2LHS = new vtkPolyMapper;
    mapBookShelf2LHS->SetInput(bookShelf2LHS->GetOutput());
    mapBookShelf2LHS->ScalarsVisibleOff();
  bookShelf2LHSActor = new vtkActor;
    bookShelf2LHSActor->SetMapper(mapBookShelf2LHS);
    bookShelf2LHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  bookShelf2RHS = new vtkStructuredGridGeometryFilter;
    bookShelf2RHS->SetInput(reader->GetOutput());
    bookShelf2RHS->SetExtent(13,20,15,19,11,11);
  mapBookShelf2RHS = new vtkPolyMapper;
    mapBookShelf2RHS->SetInput(bookShelf2RHS->GetOutput());
    mapBookShelf2RHS->ScalarsVisibleOff();
  bookShelf2RHSActor = new vtkActor;
    bookShelf2RHSActor->SetMapper(mapBookShelf2RHS);
    bookShelf2RHSActor->GetProperty()->SetColor(0.8,0.8,0.6);

  // What's life without a window or two?
  window = new vtkStructuredGridGeometryFilter;
    window->SetInput(reader->GetOutput());
    window->SetExtent(20,20,6,13,10,13);
  mapWindow = new vtkPolyMapper;
    mapWindow->SetInput(window->GetOutput());
    mapWindow->ScalarsVisibleOff();
  windowActor = new vtkActor;
    windowActor->SetMapper(mapWindow);
    windowActor->GetProperty()->SetColor(0.3,0.3,0.5);

  // Don't forget the ventilation, man.
  inlet = new vtkStructuredGridGeometryFilter;
    inlet->SetInput(reader->GetOutput());
    inlet->SetExtent(0,0,9,10,0,6);
  mapInlet = new vtkPolyMapper;
    mapInlet->SetInput(inlet->GetOutput());
    mapInlet->ScalarsVisibleOff();
  inletActor = new vtkActor;
    inletActor->SetMapper(mapInlet);
    inletActor->GetProperty()->SetColor(0.0,0.0,0.0);

  outlet = new vtkStructuredGridGeometryFilter;
    outlet->SetInput(reader->GetOutput());
    outlet->SetExtent(0,0,9,10,14,16);
  mapOutlet = new vtkPolyMapper;
    mapOutlet->SetInput(outlet->GetOutput());
    mapOutlet->ScalarsVisibleOff();
  outletActor = new vtkActor;
    outletActor->SetMapper(mapOutlet);
    outletActor->GetProperty()->SetColor(0.0,0.0,0.0);
  

  // Draw the outline around our space.
  outline = new vtkStructuredGridOutlineFilter;
    outline->SetInput(reader->GetOutput());
  mapOutline = new vtkPolyMapper;
    mapOutline->SetInput(outline->GetOutput());
  outlineActor = new vtkActor;
    outlineActor->SetMapper(mapOutline);
    outlineActor->GetProperty()->SetColor(0,0,0);


  // Flow, finally.
  // First, we'll create some random points as seeds to start
  // the streamers flying.
  seeds = new vtkPointSource;
    seeds->SetRadius(0.075);
    seeds->SetCenter(0.1,2.0,0.5); // Notice how close we are
                                   // to the inlet!
    seeds->SetNumberOfPoints(25);

  // Next, we'll set up the streamers up from those points.
  streamers = new vtkStreamLine;
    streamers->SetInput(reader->GetOutput());
    streamers->SetSource(seeds->GetOutput());
    streamers->SetMaximumPropagationTime(500);
    streamers->SetStepLength(0.1);
    streamers->Update();

  // Now, the standard poly mapping and acting!
  mapStreamers = new vtkPolyMapper;
    mapStreamers->SetInput(streamers->GetOutput());
    mapStreamers->SetScalarRange(reader->GetOutput()->GetPointData()->GetScalars()->GetRange());
  streamersActor = new vtkActor;
    streamersActor->SetMapper(mapStreamers);

  ren->AddActors(outlineActor);
  ren->AddActors(table1Actor);
  ren->AddActors(table2Actor);
  ren->AddActors(filingCabinet1Actor);
  ren->AddActors(filingCabinet2Actor);
  ren->AddActors(bookShelf1TopActor);
  ren->AddActors(bookShelf1BottomActor);
  ren->AddActors(bookShelf1FrontActor);
  ren->AddActors(bookShelf1BackActor);
  ren->AddActors(bookShelf1LHSActor);
  ren->AddActors(bookShelf1RHSActor);
  ren->AddActors(bookShelf2TopActor);
  ren->AddActors(bookShelf2BottomActor);
  ren->AddActors(bookShelf2FrontActor);
  ren->AddActors(bookShelf2BackActor);
  ren->AddActors(bookShelf2LHSActor);
  ren->AddActors(bookShelf2RHSActor);
  ren->AddActors(windowActor);
  ren->AddActors(inletActor);
  ren->AddActors(outletActor);
  ren->AddActors(streamersActor);

  ren->SetBackground(0.7,0.7,0.7);

  aCamera = new vtkCamera;
    aCamera->SetClippingRange(0.726079,36.3039);
    aCamera->SetFocalPoint(2.43584,2.15046,1.11104);
    aCamera->SetPosition(-4.76183, -10.4426, 3.17203);
    aCamera->CalcViewPlaneNormal();
    aCamera->SetViewUp(0.0511273,0.132773,0.989827);
    aCamera->SetViewAngle(18.604);

  ren->SetActiveCamera(aCamera);

  renWin->SetSize(750,500);
  renWin->Render();
}

Cool! What you see is the flow of the 25 seed points through the room. The lines are colored according to the scalar pressure values at the corresponding locations.

If I vary the location of the point seeds just a touch towards the center of the inlet, an interesting phenomenon will be noted:

When the data in this room was gathered, there was a burning cigarette on the back table!

Interaction Demonstration