// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /** * The purpose of this test is to make sure that we always have the same image produced by the * composite polydata mapper if we do multiple render call, it was previously not the case when * a multiblock have some overlap between these blocks. */ int TestCompositeDataOverlappingCells(int argc, char* argv[]) { vtkDebugWithObjectMacro(nullptr, "Load the multiblock."); vtkNew testing; testing->AddArguments(argc, argv); std::string filename = testing->GetDataRoot(); filename += "/Data/overlap_faces.vtm"; vtkNew reader; reader->SetFileName(filename.c_str()); reader->Update(); vtkDebugWithObjectMacro(nullptr, "Setup everything to be able to render with VTK this data"); vtkSmartPointer win = vtkSmartPointer::New(); vtkSmartPointer iren = vtkSmartPointer::New(); vtkSmartPointer ren = vtkSmartPointer::New(); win->AddRenderer(ren); win->SetInteractor(iren); win->SetSize(400, 400); vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(reader->GetOutputPort()); mapper->SelectColorArray("SpatioTemporalHarmonics"); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); ren->AddActor(actor); vtkDebugWithObjectMacro(nullptr, "Everything should be setup now, do multiple render call and check that we always " "have the same result."); int status = EXIT_SUCCESS; int numberOfRenderCalls = 10; for (int i = 0; i < numberOfRenderCalls; i++) { reader->GetOutputInformation(0)->Set(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP(), i); reader->Update(); int retVal = vtkRegressionTestImageThreshold(win, 0.05); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); // if we test this executable we don't want to do multiple render call, skip. break; } if (retVal == vtkRegressionTester::FAILED) { vtkErrorWithObjectMacro( nullptr, << "The " << i << "th image produced is wrong, we should always have the same image produced."); status = EXIT_FAILURE; break; } } return status; }