1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkCellData.h"
#include "vtkCompositePolyDataMapper.h"
#include "vtkCompositeRenderManager.h"
#include "vtkDataSetSurfaceFilter.h"
#include "vtkExodusIIReader.h"
#include "vtkLogger.h"
#include "vtkNew.h"
#include "vtkPolyData.h"
#include "vtkRandomAttributeGenerator.h"
#include "vtkRedistributeDataSetFilter.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTestUtilities.h"
#include "vtkXMLPolyDataReader.h"
#if VTK_MODULE_ENABLE_VTK_ParallelMPI
#include "vtkMPIController.h"
#else
#include "vtkDummyController.h"
#endif
int TestRedistributeDataSetFilterWithPolyData(int argc, char* argv[])
{
#if VTK_MODULE_ENABLE_VTK_ParallelMPI
vtkNew<vtkMPIController> controller;
#else
vtkNew<vtkDummyController> controller;
#endif
controller->Initialize(&argc, &argv);
vtkMultiProcessController::SetGlobalController(controller);
const int rank = controller->GetLocalProcessId();
vtkLogger::SetThreadName("rank:" + std::to_string(rank));
vtkNew<vtkPolyData> pd;
if (controller->GetLocalProcessId() == 0)
{
vtkNew<vtkXMLPolyDataReader> reader;
char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/cow.vtp");
reader->SetFileName(fname);
delete[] fname;
reader->Update();
pd->ShallowCopy(reader->GetOutputDataObject(0));
}
vtkNew<vtkRedistributeDataSetFilter> rdsf;
rdsf->SetInputDataObject(pd);
rdsf->SetNumberOfPartitions(16);
rdsf->PreservePartitionsInOutputOn();
vtkNew<vtkDataSetSurfaceFilter> dsf;
dsf->SetInputConnection(rdsf->GetOutputPort());
vtkNew<vtkRandomAttributeGenerator> rag;
rag->SetInputConnection(dsf->GetOutputPort());
rag->SetDataTypeToDouble();
rag->SetNumberOfComponents(1);
rag->SetComponentRange(0, 1.0);
rag->GenerateCellScalarsOn();
rag->AttributesConstantPerBlockOn();
vtkNew<vtkCompositePolyDataMapper> mapper;
mapper->SetInputConnection(rag->GetOutputPort());
vtkNew<vtkCompositeRenderManager> prm;
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::Take(prm->MakeRenderer());
vtkSmartPointer<vtkRenderWindow> renWin =
vtkSmartPointer<vtkRenderWindow>::Take(prm->MakeRenderWindow());
renWin->AddRenderer(renderer);
renWin->DoubleBufferOn();
renWin->SetMultiSamples(0);
renWin->SetSize(400, 400);
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(renWin);
prm->SetRenderWindow(renWin);
prm->SetController(controller);
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
renderer->AddActor(actor);
int retVal = 1;
if (rank == 0)
{
prm->ResetAllCameras();
renWin->Render();
retVal = vtkRegressionTestImage(renWin);
if (retVal == vtkRegressionTester::DO_INTERACTOR)
{
prm->StartInteractor();
}
controller->TriggerBreakRMIs();
}
else
{
prm->StartServices();
}
controller->Broadcast(&retVal, 1, 0);
controller->Finalize();
vtkMultiProcessController::SetGlobalController(nullptr);
return !retVal;
}
|