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
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview

Reply via email to