[Paraview] Structured grid point blanking

David Doria daviddoria at gmail.com
Fri Feb 10 16:34:33 EST 2012


I am trying to blank a point in a vtkStructuredGrid. Using the below
code, I write out some points to a vts file. All of the points are on
a plane except for one. With or without manually creating a visibility
array, Paraview seems to display all of the points, including the one
that is supposedly blanked.

The goal in both examples below is to ignore the point that is off of
the plane, but in both cases it is displayed anyway. Can anyone
explain this or point out where I'm going wrong?

Without a manual visibility array:

#include <vtkSmartPointer.h>
#include <vtkIdList.h>
#include <vtkProperty.h>
#include <vtkStructuredGrid.h>
#include <vtkXMLStructuredGridWriter.h>
#include <vtkMath.h>

int main(int, char *[])
{
  // Create a grid
  vtkSmartPointer<vtkStructuredGrid> structuredGrid =
    vtkSmartPointer<vtkStructuredGrid>::New();

  vtkSmartPointer<vtkPoints> points =
    vtkSmartPointer<vtkPoints>::New();

  unsigned int gridSize = 8;
  unsigned int counter = 0;
  // Create a 5x5 grid of points
  for(unsigned int j = 0; j < gridSize; j++)
    {
    for(unsigned int i = 0; i < gridSize; i++)
      {
      if(i == 3 && j == 3) // Make one point higher than the rest
        {
        points->InsertNextPoint(i, j, 2);
        std::cout << "The different point is number " << counter << std::endl;
        }
      else
        {
        points->InsertNextPoint(i, j, 0); // Make most of the points
the same height
        }
      counter++;
      }
    }

  bool blanking = structuredGrid->GetPointBlanking();
  std::cout << "blanking: " << blanking << std::endl;

  std::cout << "blanking: " << structuredGrid->GetPointBlanking() << std::endl;

  // Specify the dimensions of the grid
  structuredGrid->SetDimensions(gridSize,gridSize,1);

  structuredGrid->SetPoints(points);

  structuredGrid->BlankPoint(27);
  structuredGrid->Modified();

  // Create a mapper and actor
  vtkSmartPointer<vtkXMLStructuredGridWriter> writer =
    vtkSmartPointer<vtkXMLStructuredGridWriter>::New();
  writer->SetInputConnection(structuredGrid->GetProducerPort());
  writer->SetFileName("test.vts");
  writer->Write();
  return EXIT_SUCCESS;
}

With a manual visibility array:

#include <vtkSmartPointer.h>
#include <vtkUnsignedCharArray.h>
#include <vtkIdList.h>
#include <vtkProperty.h>
#include <vtkStructuredGrid.h>
#include <vtkXMLStructuredGridWriter.h>
#include <vtkMath.h>

int main(int, char *[])
{
  // Create a grid
  vtkSmartPointer<vtkStructuredGrid> structuredGrid =
    vtkSmartPointer<vtkStructuredGrid>::New();

  vtkSmartPointer<vtkPoints> points =
    vtkSmartPointer<vtkPoints>::New();

  unsigned int gridSize = 8;
  unsigned int counter = 0;
  // Create a 5x5 grid of points
  for(unsigned int j = 0; j < gridSize; j++)
    {
    for(unsigned int i = 0; i < gridSize; i++)
      {
      if(i == 3 && j == 3) // Make one point higher than the rest
        {
        points->InsertNextPoint(i, j, 2);
        std::cout << "The different point is number " << counter << std::endl;
        }
      else
        {
        points->InsertNextPoint(i, j, 0); // Make most of the points
the same height
        }
      counter++;
      }
    }

  bool blanking = structuredGrid->GetPointBlanking();
  std::cout << "blanking: " << blanking << std::endl;

  vtkSmartPointer<vtkUnsignedCharArray> visibilityArray =
vtkSmartPointer<vtkUnsignedCharArray>::New();
  visibilityArray->SetNumberOfTuples(points->GetNumberOfPoints());
  structuredGrid->SetPointVisibilityArray(visibilityArray);

  for(vtkIdType pointId = 0; pointId < points->GetNumberOfPoints(); ++pointId)
    {
    visibilityArray->SetValue(pointId, 0);
    }
  visibilityArray->SetValue(27, 1);
  std::cout << "blanking: " << structuredGrid->GetPointBlanking() << std::endl;

  // Specify the dimensions of the grid
  structuredGrid->SetDimensions(gridSize,gridSize,1);

  structuredGrid->SetPoints(points);

  structuredGrid->BlankPoint(27);
  structuredGrid->Modified();

  // Create a mapper and actor
  vtkSmartPointer<vtkXMLStructuredGridWriter> writer =
    vtkSmartPointer<vtkXMLStructuredGridWriter>::New();
  writer->SetInputConnection(structuredGrid->GetProducerPort());
  writer->SetFileName("test2.vts");
  writer->Write();
  return EXIT_SUCCESS;
}

Thanks,

David


More information about the ParaView mailing list