/*========================================================================= Program: Visualization Toolkit Module: TestSmartVolumeMapper.cxx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // This test covers the smart volume mapper and composite method. // This test volume renders a synthetic dataset with unsigned char values, // with the composite method. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include VTK_MODULE_INIT(vtkRenderingRayTracing); int TestSmartVolumeMapper(int argc, char* argv[]) { bool useOSP = true; for (int i = 0; i < argc; i++) { if (!strcmp(argv[i], "-GL")) { cerr << "GL" << endl; useOSP = false; } } double scalarRange[2]; vtkNew dssActor; vtkNew dssMapper; vtkNew volumeMapper; if (useOSP) { volumeMapper->SetRequestedRenderModeToOSPRay(); } vtkNew reader; const char* volumeFile = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/vase_1comp.vti"); reader->SetFileName(volumeFile); volumeMapper->SetInputConnection(reader->GetOutputPort()); volumeMapper->SetSampleDistance(0.01); // Put inside an open box to evaluate composite order vtkNew dssFilter; dssFilter->SetInputConnection(reader->GetOutputPort()); vtkNew clip; vtkNew plane; plane->SetOrigin(0, 50, 0); plane->SetNormal(0, -1, 0); clip->SetInputConnection(dssFilter->GetOutputPort()); clip->SetClipFunction(plane); dssMapper->SetInputConnection(clip->GetOutputPort()); dssMapper->ScalarVisibilityOff(); dssActor->SetMapper(dssMapper); vtkProperty* property = dssActor->GetProperty(); property->SetDiffuseColor(0.5, 0.5, 0.5); reader->Update(); volumeMapper->GetInput()->GetScalarRange(scalarRange); volumeMapper->SetBlendModeToComposite(); volumeMapper->SetAutoAdjustSampleDistances(1); vtkNew renWin; renWin->SetMultiSamples(0); vtkNew ren; renWin->AddRenderer(ren); ren->SetBackground(0.2, 0.2, 0.5); renWin->SetSize(400, 400); vtkNew iren; iren->SetRenderWindow(renWin); // vtkNew style; // iren->SetInteractorStyle(style); vtkNew scalarOpacity; scalarOpacity->AddPoint(50, 0.0); scalarOpacity->AddPoint(75, 0.1); vtkNew volumeProperty; volumeProperty->ShadeOff(); volumeProperty->SetInterpolationType(VTK_LINEAR_INTERPOLATION); volumeProperty->SetScalarOpacity(scalarOpacity); vtkSmartPointer colorTransferFunction = volumeProperty->GetRGBTransferFunction(0); colorTransferFunction->RemoveAllPoints(); colorTransferFunction->AddRGBPoint(scalarRange[0], 0.0, 0.8, 0.1); colorTransferFunction->AddRGBPoint(scalarRange[1], 0.0, 0.8, 0.1); vtkNew volume; volume->SetMapper(volumeMapper); volume->SetProperty(volumeProperty); ren->AddViewProp(volume); ren->AddActor(dssActor); renWin->Render(); ren->ResetCamera(); iren->Initialize(); iren->SetDesiredUpdateRate(30.0); int retVal = vtkRegressionTestImageThreshold(renWin, 50.0); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return !retVal; }