X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vtk%2FvtkgdcmViewer.cxx;h=b9caec87947b68c0ffdcc00c532a9ed525e23b12;hb=b59e9f16e06afc854372454e8d816bdb8ec72ccf;hp=eb3e88fe4f9f0c6262e79cbb18cb15d67683d588;hpb=0003eb9bac6ab08742ddaf85e41ec5c00239e594;p=gdcm.git diff --git a/vtk/vtkgdcmViewer.cxx b/vtk/vtkgdcmViewer.cxx index eb3e88fe..b9caec87 100644 --- a/vtk/vtkgdcmViewer.cxx +++ b/vtk/vtkgdcmViewer.cxx @@ -1,16 +1,64 @@ +#include + #include #include #include #include +#include +#include +#include +#include #include "vtkGdcmReader.h" -int main(int argc, char *argv[]) +#ifndef vtkFloatingPointType +#define vtkFloatingPointType float +#endif + +//---------------------------------------------------------------------------- +// Callback for the interaction +class vtkgdcmObserver : public vtkCommand { + public: + virtual char const *GetClassName() const { return "vtkgdcmObserver";} + static vtkgdcmObserver *New() + { return new vtkgdcmObserver; } + vtkgdcmObserver() + { + this->ImageViewer = NULL; + } + virtual void Execute(vtkObject *wdg, unsigned long event, void* calldata) + { + if ( this->ImageViewer ) + { + if ( event == vtkCommand::CharEvent ) + { + int max = ImageViewer->GetWholeZMax(); + int slice = (ImageViewer->GetZSlice() + 1 ) % ++max; + ImageViewer->SetZSlice( slice ); + ImageViewer->GetRenderer()->ResetCameraClippingRange(); + ImageViewer->Render(); + } + } + } + vtkImageViewer2 *ImageViewer; +}; + +int main(int argc, char *argv[]) +{ + if( argc < 2 ) + return 0; + vtkGdcmReader *reader = vtkGdcmReader::New(); - reader->SetFileName( argv[1] ); - //reader->DebugOn(); + + if( argc == 2 ) + reader->SetFileName( argv[1] ); + else + for(int i=1; i< argc; i++) + reader->AddFileName( argv[i] ); + + reader->DebugOn(); reader->Update(); //print debug info: @@ -19,8 +67,33 @@ int main(int argc, char *argv[]) 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); + + 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(); + obs->ImageViewer = viewer; + iren->AddObserver(vtkCommand::CharEvent,obs); + obs->Delete(); iren->Initialize(); iren->Start(); @@ -30,7 +103,7 @@ int main(int argc, char *argv[]) writer->SetInput( reader->GetOutput()); writer->SetFileName( "foo.vtk" ); writer->SetFileTypeToBinary(); - //writer->Write(); + writer->Write(); reader->Delete(); iren->Delete();