Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Common/vtkFieldData.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkFieldData.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00049 #ifndef __vtkFieldData_h 00050 #define __vtkFieldData_h 00051 00052 #include "vtkObject.h" 00053 00054 #include "vtkDataArray.h" // Needed for inline methods 00055 00056 class vtkIdList; 00057 00058 class VTK_COMMON_EXPORT vtkFieldData : public vtkObject 00059 { 00060 public: 00061 static vtkFieldData *New(); 00062 00063 vtkTypeRevisionMacro(vtkFieldData,vtkObject); 00064 void PrintSelf(ostream& os, vtkIndent indent); 00065 00068 virtual void Initialize(); 00069 00071 int Allocate(const vtkIdType sz, const vtkIdType ext=1000); 00072 00073 #ifndef VTK_REMOVE_LEGACY_CODE 00074 00075 virtual vtkFieldData* MakeObject(); 00076 #endif 00077 00080 void CopyStructure(vtkFieldData*); 00081 00088 void AllocateArrays(int num); 00089 00090 #ifndef VTK_REMOVE_LEGACY_CODE 00091 void SetNumberOfArrays(int num) 00092 { 00093 vtkWarningMacro("This method will be deprecated. Please use " 00094 "AllocateArrays() instead."); 00095 this->AllocateArrays(num); 00096 } 00097 #endif 00098 00102 int GetNumberOfArrays(); 00103 00106 int AddArray(vtkDataArray *array); 00107 00109 00110 virtual void RemoveArray(const char *name) 00111 { 00112 int i; 00113 this->GetArray(name, i); 00114 this->RemoveArray(i); 00115 } 00117 00120 vtkDataArray *GetArray(int i); 00121 00124 vtkDataArray *GetArray(const char *arrayName, int &index); 00125 00126 // Return the array with the name given. Returns NULL is array not found. 00127 vtkDataArray *GetArray(const char *arrayName); 00128 00130 00132 const char* GetArrayName(int i) 00133 { 00134 vtkDataArray* da = this->GetArray(i); 00135 if (da) 00136 { 00137 return da->GetName(); 00138 } 00139 else 00140 { 00141 return 0; 00142 } 00143 } 00145 00148 virtual void PassData(vtkFieldData* fd); 00149 00151 00156 void CopyFieldOn(const char* name) { this->CopyFieldOnOff(name, 1); } 00157 void CopyFieldOff(const char* name) { this->CopyFieldOnOff(name, 0); } 00159 00165 virtual void CopyAllOn(); 00166 00172 virtual void CopyAllOff(); 00173 00175 virtual void DeepCopy(vtkFieldData *da); 00176 00178 virtual void ShallowCopy(vtkFieldData *da); 00179 00182 void Squeeze(); 00183 00186 void Reset(); 00187 00192 virtual unsigned long GetActualMemorySize(); 00193 00195 unsigned long int GetMTime(); 00196 00204 void GetField(vtkIdList *ptId, vtkFieldData *f); 00205 00214 int GetArrayContainingComponent(int i, int& arrayComp); 00215 00222 int GetNumberOfComponents(); 00223 00231 vtkIdType GetNumberOfTuples(); 00232 00238 void SetNumberOfTuples(const vtkIdType number); 00239 00246 float *GetTuple(const vtkIdType i); 00247 00254 void GetTuple(const vtkIdType i, float * tuple); 00255 00262 void SetTuple(const vtkIdType i, const float * tuple); 00263 00270 void InsertTuple(const vtkIdType i, const float * tuple); 00271 00278 vtkIdType InsertNextTuple(const float * tuple); 00279 00285 float GetComponent(const vtkIdType i, const int j); 00286 00294 void SetComponent(const vtkIdType i, const int j, const float c); 00295 00303 void InsertComponent(const vtkIdType i, const int j, const float c); 00304 00305 protected: 00306 00307 vtkFieldData(); 00308 ~vtkFieldData(); 00309 00310 int NumberOfArrays; 00311 int NumberOfActiveArrays; 00312 vtkDataArray **Data; 00313 00314 int TupleSize; //used for type conversion 00315 float *Tuple; 00316 00318 void SetArray(int i, vtkDataArray *array); 00319 00320 virtual void RemoveArray(int index); 00321 00323 virtual void InitializeFields(); 00324 00325 //BTX 00326 00327 struct CopyFieldFlag 00328 { 00329 char* ArrayName; 00330 int IsCopied; 00331 }; 00332 00333 CopyFieldFlag* CopyFieldFlags; //the names of fields not to be copied 00334 int NumberOfFieldFlags; //the number of fields not to be copied 00335 void CopyFieldOnOff(const char* name, int onOff); 00336 void ClearFieldFlags(); 00337 int FindFlag(const char* field); 00338 int GetFlag(const char* field); 00339 void CopyFlags(const vtkFieldData* source); 00340 int DoCopyAllOn; 00341 int DoCopyAllOff; 00342 00343 00344 private: 00345 vtkFieldData(const vtkFieldData&); // Not implemented. 00346 void operator=(const vtkFieldData&); // Not implemented. 00347 00348 public: 00349 00350 class VTK_COMMON_EXPORT BasicIterator 00351 { 00352 public: 00353 BasicIterator(); 00354 BasicIterator(const BasicIterator& source); 00355 BasicIterator(const int* list, unsigned int listSize); 00356 BasicIterator& operator=(const BasicIterator& source); 00357 virtual ~BasicIterator(); 00358 00359 int GetListSize() const 00360 { 00361 return this->ListSize; 00362 } 00363 int GetCurrentIndex() 00364 { 00365 return this->List[this->Position]; 00366 } 00367 int BeginIndex() 00368 { 00369 this->Position = -1; 00370 return this->NextIndex(); 00371 } 00372 int End() const 00373 { 00374 return (this->Position >= this->ListSize); 00375 } 00376 int NextIndex() 00377 { 00378 this->Position++; 00379 return (this->End() ? -1 : this->List[this->Position]); 00380 } 00381 00382 protected: 00383 00384 int* List; 00385 int ListSize; 00386 int Position; 00387 }; 00388 00389 class VTK_COMMON_EXPORT Iterator : public BasicIterator 00390 { 00391 public: 00392 00393 Iterator(const Iterator& source); 00394 Iterator& operator=(const Iterator& source); 00395 virtual ~Iterator(); 00396 Iterator(vtkFieldData* dsa, const int* list=0, 00397 unsigned int listSize=0); 00398 00399 vtkDataArray* Begin() 00400 { 00401 this->Position = -1; 00402 return this->Next(); 00403 } 00404 00405 vtkDataArray* Next() 00406 { 00407 this->Position++; 00408 return (this->End() ? 0 : 00409 Fields->GetArray(this->List[this->Position])); 00410 } 00411 00412 void DetachFieldData(); 00413 00414 protected: 00415 vtkFieldData* Fields; 00416 int Detached; 00417 }; 00418 00419 00420 //ETX 00421 00422 }; 00423 00424 00425 #endif