/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 Mathieu Malaterre All rights reserved. See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html 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. =========================================================================*/ #include "vtkVersion.h" #include "vtkGDCMImageReader.h" #include "vtkPiecewiseFunction.h" #include "vtkColorTransferFunction.h" #include "vtkVolume.h" #include "vtkVolumeProperty.h" #if VTK_MAJOR_VERSION < 7 #include "vtkVolumeTextureMapper3D.h" #endif #include "vtkFixedPointVolumeRayCastMapper.h" #include "vtkInteractorStyleTrackballCamera.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkImageClip.h" #include "vtkRenderWindowInteractor.h" // gdcmvolume gdcmData/GE_DLX-8-MONO2-Multiframe-Jpeg_Lossless.dcm int main(int argc, char *argv[]) { if( argc < 2 ) return 1; vtkGDCMImageReader *reader = vtkGDCMImageReader::New(); reader->SetFileName( argv[1] ); reader->Update(); // Create the renderers, render window, and interactor vtkRenderWindow *renWin = vtkRenderWindow::New(); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); vtkRenderer *ren = vtkRenderer::New(); renWin->AddRenderer(ren); // Create a transfer function mapping scalar value to opacity vtkPiecewiseFunction *oTFun = vtkPiecewiseFunction::New(); //oTFun->AddSegment(0, 1.0, 256, 0.1); oTFun->AddSegment(0, 1.0, 240, 0.1); vtkColorTransferFunction *cTFun = vtkColorTransferFunction::New(); cTFun->AddRGBPoint( 0, 1.0, 1.0, 1.0 ); //cTFun->AddRGBPoint( 255, 1.0, 1.0, 1.0 ); cTFun->AddRGBPoint( 240, 1.0, 1.0, 1.0 ); // Need to crop to actually see minimum intensity vtkImageClip *clip = vtkImageClip::New(); clip->SetInputConnection( reader->GetOutputPort() ); clip->SetOutputWholeExtent(0,66,0,66,30,37); clip->ClipDataOn(); vtkVolumeProperty *property = vtkVolumeProperty::New(); property->SetScalarOpacity(oTFun); property->SetColor(cTFun); property->SetInterpolationTypeToLinear(); vtkFixedPointVolumeRayCastMapper *mapper = vtkFixedPointVolumeRayCastMapper::New(); mapper->SetBlendModeToMinimumIntensity(); mapper->SetInputConnection( reader->GetOutputPort() ); vtkVolume *volume = vtkVolume::New(); volume->SetMapper(mapper); volume->SetProperty(property); ren->AddViewProp(volume); renWin->Render(); { iren->Start(); } volume->Delete(); mapper->Delete(); property->Delete(); clip->Delete(); cTFun->Delete(); oTFun->Delete(); reader->Delete(); renWin->Delete(); iren->Delete(); ren->Delete(); return 0; }