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 00121 const vtkArrayRange GetExtent(DimensionT dimension); 00124 virtual const vtkArrayExtents& GetExtents() = 0; 00125 00128 DimensionT GetDimensions(); 00129 00136 SizeT GetSize(); 00137 00141 virtual SizeT GetNonNullSize() = 0; 00142 00144 void SetName(const vtkStdString& name); 00146 vtkStdString GetName(); 00147 00149 void SetDimensionLabel(DimensionT i, const vtkStdString& label); 00150 00152 vtkStdString GetDimensionLabel(DimensionT i); 00153 00159 virtual void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) = 0; 00160 00162 00165 inline vtkVariant GetVariantValue(CoordinateT i); 00166 inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j); 00167 inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k); 00168 virtual vtkVariant GetVariantValue(const vtkArrayCoordinates& coordinates) = 0; 00170 00176 virtual vtkVariant GetVariantValueN(const SizeT n) = 0; 00177 00179 00182 inline void SetVariantValue(CoordinateT i, const vtkVariant& value); 00183 inline void SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value); 00184 inline void SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value); 00185 virtual void SetVariantValue(const vtkArrayCoordinates& coordinates, const vtkVariant& value) = 0; 00187 00193 virtual void SetVariantValueN(const SizeT n, const vtkVariant& value) = 0; 00194 00196 00198 virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const vtkArrayCoordinates& target_coordinates) = 0; 00199 virtual void CopyValue(vtkArray* source, const SizeT source_index, const vtkArrayCoordinates& target_coordinates) = 0; 00200 virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const SizeT target_index) = 0; 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(DimensionT i, const vtkStdString& label) = 0; 00223 00225 00226 virtual vtkStdString InternalGetDimensionLabel(DimensionT i) = 0; 00227 }; 00229 00230 vtkVariant vtkArray::GetVariantValue(CoordinateT i) 00231 { 00232 return this->GetVariantValue(vtkArrayCoordinates(i)); 00233 } 00234 00235 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j) 00236 { 00237 return this->GetVariantValue(vtkArrayCoordinates(i, j)); 00238 } 00239 00240 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k) 00241 { 00242 return this->GetVariantValue(vtkArrayCoordinates(i, j, k)); 00243 } 00244 00245 void vtkArray::SetVariantValue(CoordinateT i, const vtkVariant& value) 00246 { 00247 this->SetVariantValue(vtkArrayCoordinates(i), value); 00248 } 00249 00250 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value) 00251 { 00252 this->SetVariantValue(vtkArrayCoordinates(i, j), value); 00253 } 00254 00255 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value) 00256 { 00257 this->SetVariantValue(vtkArrayCoordinates(i, j, k), value); 00258 } 00259 00260 #endif 00261