// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause /** * Designed to test paraview/paraview#19012: when the array to volume render * with is changed, the volume mapper must update correctly. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int TestGPURayCastModelTransformMatrix(int argc, char* argv[]) { vtkNew rtSource; rtSource->SetWholeExtent(-10, 10, -10, 10, -10, 10); vtkNew mapper; mapper->SetInputConnection(rtSource->GetOutputPort()); mapper->AutoAdjustSampleDistancesOn(); mapper->SetScalarModeToUsePointFieldData(); mapper->SelectScalarArray("RTData"); vtkNew colorTransferFunction; colorTransferFunction->RemoveAllPoints(); colorTransferFunction->AddRGBPoint(0, 0.23137254902, 0.298039215686, 0.752941176471); colorTransferFunction->AddRGBPoint(125, 0.865, 0.865, 0.865); colorTransferFunction->AddRGBPoint(250.0, 0.705882352941, 0.0156862745098, 0.149019607843); vtkNew scalarOpacity; scalarOpacity->AddPoint(0, 0.0); scalarOpacity->AddPoint(250, 0.5); vtkNew volumeProperty; volumeProperty->SetInterpolationTypeToLinear(); volumeProperty->SetColor(colorTransferFunction); volumeProperty->SetScalarOpacity(scalarOpacity); vtkNew volume; volume->SetMapper(mapper); volume->SetProperty(volumeProperty); vtkNew renderer; renderer->AddVolume(volume); vtkNew renderWindow; renderWindow->SetSize(800, 600); renderWindow->AddRenderer(renderer); vtkNew style; vtkNew iren; iren->SetRenderWindow(renderWindow); iren->SetInteractorStyle(style); // Use camera's ModelTransformMatrix to rotate 60 degrees vtkCamera* cam = renderer->GetActiveCamera(); vtkNew transform; transform->Identity(); transform->RotateY(60); cam->SetModelTransformMatrix(transform->GetMatrix()); renderWindow->Render(); renderer->ResetCamera(); iren->Initialize(); int retVal = vtkRegressionTestImage(renderWindow); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return EXIT_SUCCESS; }