+// This example illustrates how the vtkGdcmReader vtk class can be
+// used in order to:
+// * produce a simple (vtk based) Dicom image STACK VIEWER.
+// * dump the stack considered as a volume in a vtkStructuredPoints
+// vtk file: the vtk gdcm wrappers can be seen as a simple way to convert
+// a stack of Dicom images into a native vtk volume.
+//
+// Usage:
+// * the filenames of the Dicom images constituting the stack should be
+// given as command line arguments,
+// * you can navigate through the stack by hitting any character key,
+// * the produced vtk file is named "foo.vtk" (in the invocation directory).
+//
+//----------------------------------------------------------------------------
+#include <iostream>
+
#include <vtkRenderWindowInteractor.h>
#include <vtkImageViewer2.h>
#include <vtkStructuredPoints.h>
#include <vtkStructuredPointsWriter.h>
#include <vtkCommand.h>
#include <vtkRenderer.h>
+#include <vtkImageMapToColors.h>
+#include <vtkLookupTable.h>
#include "vtkGdcmReader.h"
+#ifndef vtkFloatingPointType
+#define vtkFloatingPointType float
+#endif
+
//----------------------------------------------------------------------------
// Callback for the interaction
class vtkgdcmObserver : public vtkCommand
{
this->ImageViewer = NULL;
}
- virtual void Execute(vtkObject *wdg, unsigned long event, void* calldata)
+ virtual void Execute(vtkObject *, unsigned long event, void* )
{
if ( this->ImageViewer )
{
int max = ImageViewer->GetWholeZMax();
int slice = (ImageViewer->GetZSlice() + 1 ) % ++max;
ImageViewer->SetZSlice( slice );
- ImageViewer->GetRenderer()->ResetCameraClippingRange();
+ ImageViewer->GetRenderer()->ResetCameraClippingRange();
ImageViewer->Render();
}
}
return 0;
vtkGdcmReader *reader = vtkGdcmReader::New();
+ reader->AllowLookupTableOff();
if( argc == 2 )
reader->SetFileName( argv[1] );
reader->Update();
//print debug info:
- reader->GetOutput()->Print( std::cout );
+ reader->GetOutput()->Print( cout );
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
vtkImageViewer2 *viewer = vtkImageViewer2::New();
- viewer->SetInput ( reader->GetOutput() );
+
+ if( reader->GetLookupTable() )
+ {
+ //convert to color:
+ vtkImageMapToColors *map = vtkImageMapToColors::New ();
+ map->SetInput (reader->GetOutput());
+ map->SetLookupTable (reader->GetLookupTable());
+ map->SetOutputFormatToRGB();
+ viewer->SetInput ( map->GetOutput() );
+ map->Delete();
+ }
+ else
+ {
+ viewer->SetInput ( reader->GetOutput() );
+ }
viewer->SetupInteractor (iren);
-// float *range = reader->GetOutput()->GetScalarRange();
-// viewer->SetColorWindow (range[1] - range[0]);
-// viewer->SetColorLevel (0.5 * (range[1] + range[0]));
+ //vtkFloatingPointType *range = reader->GetOutput()->GetScalarRange();
+ //viewer->SetColorWindow (range[1] - range[0]);
+ //viewer->SetColorLevel (0.5 * (range[1] + range[0]));
// Here is where we setup the observer,
vtkgdcmObserver *obs = vtkgdcmObserver::New();