00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00070 #ifndef __vtkMINCImageAttributes_h
00071 #define __vtkMINCImageAttributes_h
00072 
00073 #include "vtkObject.h"
00074 
00075 class vtkDataArray;
00076 class vtkStringArray;
00077 class vtkIdTypeArray;
00078 class vtkDoubleArray;
00079 class vtkMatrix4x4;
00080 
00081 
00082 class vtkMINCImageAttributeMap;
00083 
00084 class VTK_IO_EXPORT vtkMINCImageAttributes : public vtkObject
00085 {
00086 public:
00087   vtkTypeMacro(vtkMINCImageAttributes,vtkObject);
00088 
00089   static vtkMINCImageAttributes *New();
00090   virtual void PrintSelf(ostream& os, vtkIndent indent);
00091 
00093   virtual void Reset();
00094  
00096 
00099   vtkSetStringMacro(Name);
00100   vtkGetStringMacro(Name);
00102 
00104 
00108   vtkSetMacro(DataType, int);
00109   vtkGetMacro(DataType, int);
00111 
00113 
00117   virtual void AddDimension(const char *dimension) {
00118     this->AddDimension(dimension, 0); };
00119   virtual void AddDimension(const char *dimension, vtkIdType length);
00121 
00123 
00127   virtual vtkStringArray *GetDimensionNames() {
00128     return this->DimensionNames; };
00130 
00132 
00135   virtual vtkIdTypeArray *GetDimensionLengths() {
00136     return this->DimensionLengths; };
00138 
00140 
00141   virtual vtkStringArray *GetVariableNames() {
00142     return this->VariableNames; };
00144 
00147   virtual vtkStringArray *GetAttributeNames(const char *variable);
00148 
00150 
00153   virtual void SetImageMin(vtkDoubleArray *imageMin);
00154   virtual void SetImageMax(vtkDoubleArray *imageMax);
00155   virtual vtkDoubleArray *GetImageMin() { return this->ImageMin; };
00156   virtual vtkDoubleArray *GetImageMax() { return this->ImageMax; };
00158 
00160 
00161   vtkGetMacro(NumberOfImageMinMaxDimensions, int);
00162   vtkSetMacro(NumberOfImageMinMaxDimensions, int);
00164 
00166   virtual int HasAttribute(const char *variable, const char *attribute);
00167 
00169 
00171   virtual void SetAttributeValueAsArray(const char *variable,
00172                                         const char *attribute,
00173                                         vtkDataArray *array);
00174   virtual vtkDataArray *GetAttributeValueAsArray(const char *variable,
00175                                                  const char *attribute);
00177 
00179 
00182   virtual void SetAttributeValueAsString(const char *variable,
00183                                          const char *attribute,
00184                                          const char *value);
00185   virtual const char *GetAttributeValueAsString(const char *variable,
00186                                                 const char *attribute);
00188 
00190 
00193   virtual void SetAttributeValueAsInt(const char *variable,
00194                                       const char *attribute,
00195                                       int value);
00196   virtual int GetAttributeValueAsInt(const char *variable,
00197                                      const char *attribute);
00199 
00201 
00204   virtual void SetAttributeValueAsDouble(const char *variable,
00205                                          const char *attribute,
00206                                          double value);
00207   virtual double GetAttributeValueAsDouble(const char *variable,
00208                                            const char *attribute);
00210 
00211 
00213 
00220   virtual int ValidateAttribute(const char *varname,
00221                                 const char *attname,
00222                                 vtkDataArray *array);
00224 
00231   virtual void ShallowCopy(vtkMINCImageAttributes *source);
00232 
00235   virtual void FindValidRange(double range[2]);
00236 
00239   virtual void FindImageRange(double range[2]);
00240 
00242 
00244   virtual void PrintFileHeader();
00245   virtual void PrintFileHeader(ostream &os);
00247 
00248 protected:
00249   vtkMINCImageAttributes();
00250   ~vtkMINCImageAttributes();
00251 
00252   const char *ConvertDataArrayToString(vtkDataArray *array);
00253 
00254   virtual int ValidateGlobalAttribute(const char *attrib,
00255                                       vtkDataArray *array);
00256   virtual int ValidateGeneralAttribute(const char *varname,
00257                                        const char *attname,
00258                                        vtkDataArray *array);
00259   virtual int ValidateDimensionAttribute(const char *varname,
00260                                          const char *attname,
00261                                          vtkDataArray *array);
00262   virtual int ValidateImageAttribute(const char *varname,
00263                                      const char *attname,
00264                                      vtkDataArray *array);
00265   virtual int ValidateImageMinMaxAttribute(const char *varname,
00266                                            const char *attname,
00267                                            vtkDataArray *array);
00268   virtual int ValidatePatientAttribute(const char *varname,
00269                                        const char *attname,
00270                                        vtkDataArray *array);
00271   virtual int ValidateStudyAttribute(const char *varname,
00272                                      const char *attname,
00273                                      vtkDataArray *array);
00274   virtual int ValidateAcquisitionAttribute(const char *varname,
00275                                            const char *attname,
00276                                            vtkDataArray *array);
00277 
00278   vtkStringArray *DimensionNames;
00279   vtkIdTypeArray *DimensionLengths;
00280 
00281   vtkStringArray *VariableNames;
00282   vtkMINCImageAttributeMap *AttributeNames;
00283   vtkMINCImageAttributeMap *AttributeValues;
00284 
00285   vtkStringArray *StringStore;
00286   
00287   vtkDoubleArray *ImageMin;
00288   vtkDoubleArray *ImageMax;
00289   int NumberOfImageMinMaxDimensions;
00290 
00291   int DataType;
00292   char *Name;
00293 
00294 private:
00295   vtkMINCImageAttributes(const vtkMINCImageAttributes&); 
00296   void operator=(const vtkMINCImageAttributes&);  
00297 
00298 };
00299 
00300 #endif