VTK
dox/Common/vtkArray.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkArray.h
00005   
00006 -------------------------------------------------------------------------
00007   Copyright 2008 Sandia Corporation.
00008   Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00009   the U.S. Government retains certain rights in this software.
00010 -------------------------------------------------------------------------
00011 
00012   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00013   All rights reserved.
00014   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00015 
00016      This software is distributed WITHOUT ANY WARRANTY; without even
00017      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00018      PURPOSE.  See the above copyright notice for more information.
00019 
00020 =========================================================================*/
00021 
00052 #ifndef __vtkArray_h
00053 #define __vtkArray_h
00054 
00055 #include "vtkArrayCoordinates.h"
00056 #include "vtkArrayExtents.h"
00057 #include "vtkObject.h"
00058 #include "vtkStdString.h"
00059 #include "vtkVariant.h"
00060 
00061 class VTK_COMMON_EXPORT vtkArray : public vtkObject
00062 {
00063 public:
00064   vtkTypeMacro(vtkArray, vtkObject);
00065   void PrintSelf(ostream &os, vtkIndent indent);
00066 
00067 //BTX
00068   enum
00069   {
00071     DENSE = 0,
00073     SPARSE = 1
00074   };
00075 //ETX
00076 
00083   static vtkArray* CreateArray(int StorageType, int ValueType);
00084 
00088   virtual bool IsDense() = 0;
00089 
00091 
00099   void Resize(const vtkIdType i);
00100   void Resize(const vtkIdType i, const vtkIdType j);
00101   void Resize(const vtkIdType i, const vtkIdType j, const vtkIdType k);
00103 //BTX
00104   void Resize(const vtkArrayRange& i);
00105   void Resize(const vtkArrayRange& i, const vtkArrayRange& j);
00106   void Resize(const vtkArrayRange& i, const vtkArrayRange& j, const vtkArrayRange& k);
00107   void Resize(const vtkArrayExtents& extents);
00108 //ETX
00109 
00110 //BTX
00112 
00114   const vtkArrayRange GetExtent(vtkIdType dimension);
00115   // Description:
00116   // Returns the extents (the number of dimensions and size along each dimension) of the array.
00117   virtual const vtkArrayExtents& GetExtents() = 0;
00119 //ETX
00120 
00123   vtkIdType GetDimensions();
00124   
00131   vtkIdType GetSize();
00132   
00136   virtual vtkIdType GetNonNullSize() = 0;
00137 
00139 
00140   void SetName(const vtkStdString& name);
00141   // Description:
00142   // Returns the array name.
00143   vtkStdString GetName();
00145 
00147   void SetDimensionLabel(vtkIdType i, const vtkStdString& label);
00148   
00150   vtkStdString GetDimensionLabel(vtkIdType i);
00151 
00152   //BTX
00158   virtual void GetCoordinatesN(const vtkIdType n, vtkArrayCoordinates& coordinates) = 0;
00159 
00161 
00164   inline vtkVariant GetVariantValue(vtkIdType i);
00165   inline vtkVariant GetVariantValue(vtkIdType i, vtkIdType j);
00166   inline vtkVariant GetVariantValue(vtkIdType i, vtkIdType j, vtkIdType k);
00167   virtual vtkVariant GetVariantValue(const vtkArrayCoordinates& coordinates) = 0;
00169   
00175   virtual vtkVariant GetVariantValueN(const vtkIdType n) = 0;
00176   
00178 
00181   inline void SetVariantValue(vtkIdType i, const vtkVariant& value);
00182   inline void SetVariantValue(vtkIdType i, vtkIdType j, const vtkVariant& value);
00183   inline void SetVariantValue(vtkIdType i, vtkIdType j, vtkIdType k, const vtkVariant& value);
00184   virtual void SetVariantValue(const vtkArrayCoordinates& coordinates, const vtkVariant& value) = 0;
00186   
00192   virtual void SetVariantValueN(const vtkIdType n, const vtkVariant& value) = 0;
00193 
00195 
00197   virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const vtkArrayCoordinates& target_coordinates) = 0;
00198   virtual void CopyValue(vtkArray* source, const vtkIdType source_index, const vtkArrayCoordinates& target_coordinates) = 0;
00199   virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const vtkIdType target_index) = 0;
00200   //ETX
00202 
00204   virtual vtkArray* DeepCopy() = 0;
00205 
00206 protected:
00207   vtkArray();
00208   ~vtkArray();
00209 
00210 private:
00211   vtkArray(const vtkArray&); // Not implemented
00212   void operator=(const vtkArray&); // Not implemented
00213 
00215   vtkStdString Name;
00216 
00219   virtual void InternalResize(const vtkArrayExtents&) = 0;
00220   
00222   virtual void InternalSetDimensionLabel(vtkIdType i, const vtkStdString& label) = 0;
00223   
00225   virtual vtkStdString InternalGetDimensionLabel(vtkIdType i) = 0;
00226 };
00227 
00228 vtkVariant vtkArray::GetVariantValue(vtkIdType i)
00229 {
00230   return this->GetVariantValue(vtkArrayCoordinates(i));
00231 }
00232 
00233 vtkVariant vtkArray::GetVariantValue(vtkIdType i, vtkIdType j)
00234 {
00235   return this->GetVariantValue(vtkArrayCoordinates(i, j));
00236 }
00237 
00238 vtkVariant vtkArray::GetVariantValue(vtkIdType i, vtkIdType j, vtkIdType k)
00239 {
00240   return this->GetVariantValue(vtkArrayCoordinates(i, j, k));
00241 }
00242 
00243 void vtkArray::SetVariantValue(vtkIdType i, const vtkVariant& value)
00244 {
00245   this->SetVariantValue(vtkArrayCoordinates(i), value);
00246 }
00247 
00248 void vtkArray::SetVariantValue(vtkIdType i, vtkIdType j, const vtkVariant& value)
00249 {
00250   this->SetVariantValue(vtkArrayCoordinates(i, j), value);
00251 }
00252 
00253 void vtkArray::SetVariantValue(vtkIdType i, vtkIdType j, vtkIdType k, const vtkVariant& value)
00254 {
00255   this->SetVariantValue(vtkArrayCoordinates(i, j, k), value);
00256 }
00257 
00258 #endif
00259