VTK
|
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 00059 #ifndef __vtkArray_h 00060 #define __vtkArray_h 00061 00062 #include "vtkArrayCoordinates.h" 00063 #include "vtkArrayExtents.h" 00064 #include "vtkObject.h" 00065 #include "vtkStdString.h" 00066 #include "vtkVariant.h" 00067 00068 class VTK_COMMON_EXPORT vtkArray : public vtkObject 00069 { 00070 public: 00071 vtkTypeMacro(vtkArray, vtkObject); 00072 void PrintSelf(ostream &os, vtkIndent indent); 00073 00074 typedef vtkArrayExtents::CoordinateT CoordinateT; 00075 typedef vtkArrayExtents::DimensionT DimensionT; 00076 typedef vtkArrayExtents::SizeT SizeT; 00077 00078 //BTX 00079 enum 00080 { 00082 DENSE = 0, 00084 SPARSE = 1 00085 }; 00086 //ETX 00087 00094 static vtkArray* CreateArray(int StorageType, int ValueType); 00095 00099 virtual bool IsDense() = 0; 00100 00102 00110 void Resize(const CoordinateT i); 00111 void Resize(const CoordinateT i, const CoordinateT j); 00112 void Resize(const CoordinateT i, const CoordinateT j, const CoordinateT k); 00113 void Resize(const vtkArrayRange& i); 00114 void Resize(const vtkArrayRange& i, const vtkArrayRange& j); 00115 void Resize(const vtkArrayRange& i, const vtkArrayRange& j, const vtkArrayRange& k); 00116 void Resize(const vtkArrayExtents& extents); 00118 00120 00122 const vtkArrayRange GetExtent(DimensionT dimension); 00123 // Description: 00124 // Returns the extents (the number of dimensions and size along each 00125 // dimension) of the array. 00126 virtual const vtkArrayExtents& GetExtents() = 0; 00128 00131 DimensionT GetDimensions(); 00132 00139 SizeT GetSize(); 00140 00144 virtual SizeT GetNonNullSize() = 0; 00145 00147 00148 void SetName(const vtkStdString& name); 00149 // Description: 00150 // Returns the array name. 00151 vtkStdString GetName(); 00153 00155 void SetDimensionLabel(DimensionT i, const vtkStdString& label); 00156 00158 vtkStdString GetDimensionLabel(DimensionT i); 00159 00165 virtual void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) = 0; 00166 00168 00171 inline vtkVariant GetVariantValue(CoordinateT i); 00172 inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j); 00173 inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k); 00174 virtual vtkVariant GetVariantValue(const vtkArrayCoordinates& coordinates) = 0; 00176 00182 virtual vtkVariant GetVariantValueN(const SizeT n) = 0; 00183 00185 00188 inline void SetVariantValue(CoordinateT i, const vtkVariant& value); 00189 inline void SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value); 00190 inline void SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value); 00191 virtual void SetVariantValue(const vtkArrayCoordinates& coordinates, const vtkVariant& value) = 0; 00193 00199 virtual void SetVariantValueN(const SizeT n, const vtkVariant& value) = 0; 00200 00202 00204 virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const vtkArrayCoordinates& target_coordinates) = 0; 00205 virtual void CopyValue(vtkArray* source, const SizeT source_index, const vtkArrayCoordinates& target_coordinates) = 0; 00206 virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const SizeT target_index) = 0; 00208 00210 virtual vtkArray* DeepCopy() = 0; 00211 00212 protected: 00213 vtkArray(); 00214 ~vtkArray(); 00215 00216 private: 00217 vtkArray(const vtkArray&); // Not implemented 00218 void operator=(const vtkArray&); // Not implemented 00219 00221 vtkStdString Name; 00222 00225 virtual void InternalResize(const vtkArrayExtents&) = 0; 00226 00228 virtual void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label) = 0; 00229 00231 00232 virtual vtkStdString InternalGetDimensionLabel(DimensionT i) = 0; 00233 }; 00235 00236 vtkVariant vtkArray::GetVariantValue(CoordinateT i) 00237 { 00238 return this->GetVariantValue(vtkArrayCoordinates(i)); 00239 } 00240 00241 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j) 00242 { 00243 return this->GetVariantValue(vtkArrayCoordinates(i, j)); 00244 } 00245 00246 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k) 00247 { 00248 return this->GetVariantValue(vtkArrayCoordinates(i, j, k)); 00249 } 00250 00251 void vtkArray::SetVariantValue(CoordinateT i, const vtkVariant& value) 00252 { 00253 this->SetVariantValue(vtkArrayCoordinates(i), value); 00254 } 00255 00256 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value) 00257 { 00258 this->SetVariantValue(vtkArrayCoordinates(i, j), value); 00259 } 00260 00261 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value) 00262 { 00263 this->SetVariantValue(vtkArrayCoordinates(i, j, k), value); 00264 } 00265 00266 #endif 00267