VTK
dox/IO/vtkMedicalImageProperties.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkMedicalImageProperties.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm 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 =========================================================================*/
00026 #ifndef __vtkMedicalImageProperties_h
00027 #define __vtkMedicalImageProperties_h
00028 
00029 #include "vtkObject.h"
00030 
00031 class vtkMedicalImagePropertiesInternals;
00032 
00033 class VTK_IO_EXPORT vtkMedicalImageProperties : public vtkObject
00034 {
00035 public:
00036   static vtkMedicalImageProperties *New();
00037   vtkTypeMacro(vtkMedicalImageProperties,vtkObject);
00038   void PrintSelf(ostream& os, vtkIndent indent);
00039 
00041   virtual void Clear();
00042 
00044 
00045   vtkSetStringMacro(PatientName);
00046   vtkGetStringMacro(PatientName);
00048 
00050 
00051   vtkSetStringMacro(PatientID);
00052   vtkGetStringMacro(PatientID);
00054 
00056 
00059   vtkSetStringMacro(PatientAge);
00060   vtkGetStringMacro(PatientAge);
00062 
00067   static int GetAgeAsFields(const char *age, int &year, int &month, int &week, int &day);
00068 
00069   // For Tcl:
00070   // From C++ use GetPatientAge + GetAgeAsField
00071   // Those function parse a DICOM string, and return the value of the number
00072   // expressed this is either expressed in year, month or days. Thus if a
00073   // string is expressed in years 
00074   // GetPatientAgeDay/GetPatientAgeWeek/GetPatientAgeMonth will return 0 
00075   int GetPatientAgeYear();
00076   int GetPatientAgeMonth();
00077   int GetPatientAgeWeek();
00078   int GetPatientAgeDay();
00079 
00081 
00082   vtkSetStringMacro(PatientSex);
00083   vtkGetStringMacro(PatientSex);
00085 
00087 
00089   vtkSetStringMacro(PatientBirthDate);
00090   vtkGetStringMacro(PatientBirthDate);
00092 
00093   // For Tcl:
00094   // From C++ use GetPatientBirthDate + GetDateAsFields
00095   int GetPatientBirthDateYear();
00096   int GetPatientBirthDateMonth();
00097   int GetPatientBirthDateDay();
00098 
00100 
00101   vtkSetStringMacro(StudyDate);
00102   vtkGetStringMacro(StudyDate);
00104 
00106 
00108   vtkSetStringMacro(AcquisitionDate);
00109   vtkGetStringMacro(AcquisitionDate);
00111 
00112   // For Tcl:
00113   // From C++ use GetAcquisitionDate + GetDateAsFields
00114   int GetAcquisitionDateYear();
00115   int GetAcquisitionDateMonth();
00116   int GetAcquisitionDateDay();
00117 
00119 
00121   vtkSetStringMacro(StudyTime);
00122   vtkGetStringMacro(StudyTime);
00124 
00126 
00129   vtkSetStringMacro(AcquisitionTime);
00130   vtkGetStringMacro(AcquisitionTime);
00132 
00134 
00136   vtkSetStringMacro(ImageDate);
00137   vtkGetStringMacro(ImageDate);
00139 
00140   // For Tcl:
00141   // From C++ use GetImageDate + GetDateAsFields
00142   int GetImageDateYear();
00143   int GetImageDateMonth();
00144   int GetImageDateDay();
00145 
00149   static int GetDateAsFields(const char *date, int &year, int &month, int &day);
00150 
00154   static int GetTimeAsFields(const char *time, int &hour, int &minute, int &second /* , long &milliseconds */);
00155 
00159   static int GetDateAsLocale(const char *date, char *locale);
00160 
00162 
00164   vtkSetStringMacro(ImageTime);
00165   vtkGetStringMacro(ImageTime);
00167 
00169 
00170   vtkSetStringMacro(ImageNumber);
00171   vtkGetStringMacro(ImageNumber);
00173 
00175 
00176   vtkSetStringMacro(SeriesNumber);
00177   vtkGetStringMacro(SeriesNumber);
00179 
00181 
00183   vtkSetStringMacro(SeriesDescription);
00184   vtkGetStringMacro(SeriesDescription);
00186 
00188 
00189   vtkSetStringMacro(StudyID);
00190   vtkGetStringMacro(StudyID);
00192 
00194 
00195   vtkSetStringMacro(StudyDescription);
00196   vtkGetStringMacro(StudyDescription);
00198 
00200 
00201   vtkSetStringMacro(Modality);
00202   vtkGetStringMacro(Modality);
00204 
00206 
00207   vtkSetStringMacro(Manufacturer);
00208   vtkGetStringMacro(Manufacturer);
00210 
00212 
00213   vtkSetStringMacro(ManufacturerModelName);
00214   vtkGetStringMacro(ManufacturerModelName);
00216 
00218 
00219   vtkSetStringMacro(StationName);
00220   vtkGetStringMacro(StationName);
00222 
00224 
00225   vtkSetStringMacro(InstitutionName);
00226   vtkGetStringMacro(InstitutionName);
00228 
00230 
00232   vtkSetStringMacro(ConvolutionKernel);
00233   vtkGetStringMacro(ConvolutionKernel);
00235 
00237 
00239   vtkSetStringMacro(SliceThickness);
00240   vtkGetStringMacro(SliceThickness);
00241   virtual double GetSliceThicknessAsDouble();
00243 
00245 
00247   vtkSetStringMacro(KVP);
00248   vtkGetStringMacro(KVP);
00250 
00252 
00254   vtkSetStringMacro(GantryTilt);
00255   vtkGetStringMacro(GantryTilt);
00256   virtual double GetGantryTiltAsDouble();
00258 
00260 
00262   vtkSetStringMacro(EchoTime);
00263   vtkGetStringMacro(EchoTime);
00265 
00267 
00269   vtkSetStringMacro(EchoTrainLength);
00270   vtkGetStringMacro(EchoTrainLength);
00272 
00274 
00277   vtkSetStringMacro(RepetitionTime);
00278   vtkGetStringMacro(RepetitionTime);
00280 
00282 
00284   vtkSetStringMacro(ExposureTime);
00285   vtkGetStringMacro(ExposureTime);
00287 
00289 
00290   vtkSetStringMacro(XRayTubeCurrent);
00291   vtkGetStringMacro(XRayTubeCurrent);
00293 
00295 
00297   vtkSetStringMacro(Exposure);
00298   vtkGetStringMacro(Exposure);
00300 
00302 
00303   vtkSetVector6Macro(DirectionCosine,double);
00304   vtkGetVector6Macro(DirectionCosine,double);
00306 
00307   // Interface to allow insertion of user define values, for instance in DICOM
00308   // one would want to 
00309   // store the Protocol Name (0018,1030), in this case one would do:
00310   // AddUserDefinedValue( "Protocol Name", "T1W/SE/1024" );
00311   virtual void AddUserDefinedValue(const char *name, const char *value);
00312   virtual const char *GetUserDefinedValue(const char *name);
00313   virtual unsigned int GetNumberOfUserDefinedValues();
00314   virtual const char *GetUserDefinedNameByIndex(unsigned int idx);
00315   virtual const char *GetUserDefinedValueByIndex(unsigned int idx);
00316   virtual void RemoveAllUserDefinedValues();
00317 
00319 
00327   virtual int AddWindowLevelPreset(double w, double l);
00328   virtual void RemoveWindowLevelPreset(double w, double l);
00329   virtual void RemoveAllWindowLevelPresets();
00330   virtual int GetNumberOfWindowLevelPresets();
00331   virtual int HasWindowLevelPreset(double w, double l);
00332   virtual int GetWindowLevelPresetIndex(double w, double l);
00333   virtual int GetNthWindowLevelPreset(int idx, double *w, double *l);
00334   virtual double* GetNthWindowLevelPreset(int idx);
00335   virtual void SetNthWindowLevelPresetComment(int idx, const char *comment);
00336   virtual const char* GetNthWindowLevelPresetComment(int idx);
00338 
00340 
00344   const char *GetInstanceUIDFromSliceID(int volumeidx, int sliceid);
00345   void SetInstanceUIDFromSliceID(int volumeidx, int sliceid, const char *uid);
00347   
00350   int GetSliceIDFromInstanceUID(int &volumeidx, const char *uid);
00351 
00352   //BTX
00353   typedef enum {
00354     AXIAL = 0,
00355     CORONAL,
00356     SAGITTAL
00357   } OrientationType;
00358   //ETX
00359   int GetOrientationType(int volumeidx);
00360   void SetOrientationType(int volumeidx, int orientation);
00361   static const char *GetStringFromOrientationType(unsigned int type);
00362 
00364   virtual void DeepCopy(vtkMedicalImageProperties *p);
00365 
00366 protected:
00367   vtkMedicalImageProperties();
00368   ~vtkMedicalImageProperties();
00369 
00370   char *StudyDate;
00371   char *AcquisitionDate;
00372   char *StudyTime;
00373   char *AcquisitionTime;
00374   char *ConvolutionKernel;
00375   char *EchoTime;
00376   char *EchoTrainLength;
00377   char *Exposure;
00378   char *ExposureTime;
00379   char *GantryTilt;
00380   char *ImageDate;
00381   char *ImageNumber;
00382   char *ImageTime;
00383   char *InstitutionName;
00384   char *KVP;
00385   char *ManufacturerModelName;
00386   char *Manufacturer;
00387   char *Modality;
00388   char *PatientAge;
00389   char *PatientBirthDate;
00390   char *PatientID;
00391   char *PatientName;
00392   char *PatientSex;
00393   char *RepetitionTime;
00394   char *SeriesDescription;
00395   char *SeriesNumber;
00396   char *SliceThickness;
00397   char *StationName;
00398   char *StudyDescription;
00399   char *StudyID;
00400   char *XRayTubeCurrent;
00401   double DirectionCosine[6];
00402 
00403   //BTX
00405 
00406   vtkMedicalImagePropertiesInternals *Internals;
00407   //ETX
00409 
00410 private:
00411   vtkMedicalImageProperties(const vtkMedicalImageProperties&); // Not implemented.
00412   void operator=(const vtkMedicalImageProperties&); // Not implemented.
00413 };
00414 
00415 #endif