[VTK8.9] vtkCutter not show scalar information

Hi everybody, I use vtkCutter to show a section of an unstructuredgrid. My code works well in vtk 8.2. But in vtk 8.9, the actor of vtkCutter becomes white like shown in the picture attached. All these actors are rendered in QVTKOpenGLNativeWidget.

What may cause this issue?

I can reproduce this issue in a very simple example. VTK 8.2 stills works well, but VTK 8.9 has the same problem. Maybe a bug?


Here is my code
#include <vtkSmartPointer.h>

#include <vtkActor.h>
#include <vtkDataSetMapper.h>
#include <vtkPolyDataMapper.h>
#include <vtkMath.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkStructuredGrid.h>
#include <vtkUnstructuredGrid.h>
#include <vtkCutter.h>
#include <vtkDoubleArray.h>
#include <vtkPointData.h>
#include <vtkAppendFilter.h>
#include <vtkPlane.h>

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

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

  vtkSmartPointer<vtkDoubleArray> dataArray =
  vtkSmartPointer<vtkDoubleArray>::New();

  unsigned int numi = 2;
  unsigned int numj = 2;
  unsigned int numk = 5;

  for (unsigned int k = 0; k < numk; k++)
  {
  for (unsigned int n = 0; n < 4; n++)
  {
      dataArray->InsertNextValue(k*0.2);
  }
  }

  for(unsigned int k = 0; k < numk; k++)
  {
for(unsigned int j = 0; j < numj; j++)
{
  for(unsigned int i = 0; i < numi; i++)
  {
    points->InsertNextPoint(i, j, k);
  }
}
  }

  // Specify the dimensions of the grid
  structuredGrid->SetDimensions(numi, numj, numk);
  structuredGrid->SetPoints(points);
  structuredGrid->GetPointData()->SetScalars(dataArray);

  // Create a mapper and actor
  vtkSmartPointer<vtkDataSetMapper> mapper =
vtkSmartPointer<vtkDataSetMapper>::New();
  mapper->SetInputData(structuredGrid);
  vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
  actor->SetMapper(mapper);

  vtkSmartPointer<vtkStructuredGrid> structuredGrid2 =
  vtkSmartPointer<vtkStructuredGrid>::New();
  vtkSmartPointer<vtkPoints> points2 =
  vtkSmartPointer<vtkPoints>::New();
   for (unsigned int k = 0; k < numk; k++)
 {
 for (unsigned int j = 0; j < numj; j++)
 {
     for (unsigned int i = 0; i < numi; i++)
     {
         points2->InsertNextPoint(3 + i, j, k);
     }
 }
 }
   structuredGrid2->SetDimensions(numi, numj, numk);
   structuredGrid2->SetPoints(points2);
   structuredGrid2->GetPointData()->SetScalars(dataArray);
   // Create a mapper and actor
   vtkSmartPointer<vtkDataSetMapper> mapper2 =
   vtkSmartPointer<vtkDataSetMapper>::New();
   mapper2->SetInputData(structuredGrid2);
   vtkSmartPointer<vtkActor> actor2 =
   vtkSmartPointer<vtkActor>::New();
   actor2->SetMapper(mapper2);

  // Create a renderer, render window, and interactor
  vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
  vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
  renderWindow->AddRenderer(renderer);
  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
  renderWindowInteractor->SetRenderWindow(renderWindow);

  // Add the second renderer for cutter
  vtkSmartPointer<vtkRenderer> renderer2 =
  vtkSmartPointer<vtkRenderer>::New();
  renderWindow->SetSize(800, 400);
  renderWindow->AddRenderer(renderer2);
  renderer->SetViewport(0, 0, 0.5, 1);
  renderer2->SetViewport(0.5, 0, 1, 1);

  vtkSmartPointer<vtkAppendFilter> appendFilter =
  vtkSmartPointer<vtkAppendFilter>::New();
  vtkSmartPointer<vtkCutter> cutter =
  vtkSmartPointer<vtkCutter>::New();
  vtkSmartPointer<vtkPlane> cutPlane =
  vtkSmartPointer<vtkPlane>::New();
  vtkSmartPointer<vtkPolyDataMapper> cutterMapper =
  vtkSmartPointer<vtkPolyDataMapper>::New();
  vtkSmartPointer<vtkActor> cutterActor =
  vtkSmartPointer<vtkActor>::New();

  appendFilter->AddInputData(structuredGrid);
  appendFilter->AddInputData(structuredGrid2);
  cutPlane->SetOrigin(0, 0.5, 0);
  cutPlane->SetNormal(0, 1, 0);
  cutter->SetCutFunction(cutPlane);
  cutter->SetInputConnection(appendFilter->GetOutputPort());
  cutterMapper->SetInputConnection(cutter->GetOutputPort());
  cutterActor->SetMapper(cutterMapper);
  renderer2->AddActor(cutterActor);


  // Add the actor to the scene
  renderer->AddActor(actor);
  renderer->AddActor(actor2);
  renderer->SetBackground(.2, .3, .4);

  // Render and interact
  renderWindow->Render();
  renderWindowInteractor->Start();

  return EXIT_SUCCESS;
}

I think you can report a bug here: https://gitlab.kitware.com/vtk/vtk/issues

Please, mention the VTK version (8.9) in the topic title if you decide to file it.

Already reported and I suggested to post here for more visibility.

1 Like