00001 /*========================================================================= 00002 00003 Program: GDCM (Grassroots DICOM). A DICOM library 00004 Module: $URL$ 00005 00006 Copyright (c) 2006-2009 Mathieu Malaterre 00007 All rights reserved. 00008 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00015 // .NAME vtkGDCMThreadedImageReader - read DICOM files with multiple threads 00016 // .SECTION Description 00017 // vtkGDCMThreadedImageReader is a source object that reads some DICOM files 00018 // This reader is threaded. Meaning that on a multiple core CPU with N cpu, it will 00019 // read approx N times faster than when reading in a single thread. 00020 // 00021 // .SECTION Warning: Advanced users only. Do not use this class in the general case, 00022 // you have to understand how physicaly medium works first (sequencial reading for 00023 // instance) before playing with this class 00024 // 00025 // .SECTION Implementation note: when FileLowerLeft is set to on the image is not flipped 00026 // upside down as VTK would expect, use this option only if you know what you are doing 00027 // 00028 // .SECTION FIXME: need to implement the other mode where FileLowerLeft is set to OFF 00029 // 00030 // .SECTION FIXME: you need to call SetFileName when reading a volume file (multiple slices DICOM) 00031 // since SetFileNames expect each single file to be single slice (see parent class) 00032 // 00033 // .SECTION BUG: you should really consider using vtkGDCMThreadedImageReader2 instead ! 00034 // 00035 // .SECTION See Also 00036 // vtkMedicalImageReader2 vtkMedicalImageProperties vtkGDCMThreadedImageReader2 00037 00038 #ifndef __vtkGDCMThreadedImageReader_h 00039 #define __vtkGDCMThreadedImageReader_h 00040 00041 #include "vtkGDCMImageReader.h" 00042 #include "gdcmTypes.h" // GDCM_EXPORT 00043 00044 class VTK_EXPORT vtkGDCMThreadedImageReader : public vtkGDCMImageReader 00045 { 00046 public: 00047 static vtkGDCMThreadedImageReader *New(); 00048 vtkTypeRevisionMacro(vtkGDCMThreadedImageReader,vtkGDCMImageReader); 00049 virtual void PrintSelf(ostream& os, vtkIndent indent); 00050 00051 // Description: 00052 // Explicitely set the Rescale Intercept (0028,1052) 00053 vtkSetMacro(Shift,double); 00054 00055 // Description: 00056 // Explicitely get/set the Rescale Slope (0028,1053) 00057 vtkSetMacro(Scale,double); 00058 00059 // Description: 00060 // Determine whether or not reader should use value from Shift/Scale 00061 // Default is 1 00062 vtkSetMacro(UseShiftScale,int); 00063 vtkGetMacro(UseShiftScale,int); 00064 vtkBooleanMacro(UseShiftScale,int); 00065 00066 // Within this class this is allowed to set the Number of Overlays from outside 00067 //vtkSetMacro(NumberOfOverlays,int); 00068 00069 protected: 00070 vtkGDCMThreadedImageReader(); 00071 ~vtkGDCMThreadedImageReader(); 00072 00073 #if (VTK_MAJOR_VERSION >= 5) || ( VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 5 ) 00074 int RequestInformation(vtkInformation *request, 00075 vtkInformationVector **inputVector, 00076 vtkInformationVector *outputVector); 00077 int RequestData(vtkInformation *request, 00078 vtkInformationVector **inputVector, 00079 vtkInformationVector *outputVector); 00080 #else /*(VTK_MAJOR_VERSION >= 5) || ( VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 5 )*/ 00081 void ExecuteInformation(); 00082 void ExecuteData(vtkDataObject *out); 00083 #endif /*(VTK_MAJOR_VERSION >= 5) || ( VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 5 )*/ 00084 00085 void ReadFiles(unsigned int nfiles, const char *filenames[]); 00086 void RequestDataCompat(); 00087 00088 private: 00089 vtkGDCMThreadedImageReader(const vtkGDCMThreadedImageReader&); // Not implemented. 00090 void operator=(const vtkGDCMThreadedImageReader&); // Not implemented. 00091 00092 int UseShiftScale; 00093 }; 00094 00095 #endif