Common/vtkFieldData.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00045 #ifndef __vtkFieldData_h
00046 #define __vtkFieldData_h
00047
00048 #include "vtkObject.h"
00049
00050 #include "vtkDataArray.h"
00051
00052 class vtkIdList;
00053
00054 class VTK_COMMON_EXPORT vtkFieldData : public vtkObject
00055 {
00056 public:
00057 static vtkFieldData *New();
00058
00059 vtkTypeRevisionMacro(vtkFieldData,vtkObject);
00060 void PrintSelf(ostream& os, vtkIndent indent);
00061
00064 virtual void Initialize();
00065
00067 int Allocate(const vtkIdType sz, const vtkIdType ext=1000);
00068
00071 void CopyStructure(vtkFieldData*);
00072
00079 void AllocateArrays(int num);
00080
00084 int GetNumberOfArrays();
00085
00088 int AddArray(vtkDataArray *array);
00089
00091
00092 virtual void RemoveArray(const char *name)
00093 {
00094 int i;
00095 this->GetArray(name, i);
00096 this->RemoveArray(i);
00097 }
00099
00102 vtkDataArray *GetArray(int i);
00103
00106 vtkDataArray *GetArray(const char *arrayName, int &index);
00107
00108
00109 vtkDataArray *GetArray(const char *arrayName);
00110
00112
00114 const char* GetArrayName(int i)
00115 {
00116 vtkDataArray* da = this->GetArray(i);
00117 if (da)
00118 {
00119 return da->GetName();
00120 }
00121 else
00122 {
00123 return 0;
00124 }
00125 }
00127
00130 virtual void PassData(vtkFieldData* fd);
00131
00133
00138 void CopyFieldOn(const char* name) { this->CopyFieldOnOff(name, 1); }
00139 void CopyFieldOff(const char* name) { this->CopyFieldOnOff(name, 0); }
00141
00147 virtual void CopyAllOn();
00148
00154 virtual void CopyAllOff();
00155
00157 virtual void DeepCopy(vtkFieldData *da);
00158
00160 virtual void ShallowCopy(vtkFieldData *da);
00161
00164 void Squeeze();
00165
00168 void Reset();
00169
00174 virtual unsigned long GetActualMemorySize();
00175
00177 unsigned long int GetMTime();
00178
00186 void GetField(vtkIdList *ptId, vtkFieldData *f);
00187
00196 int GetArrayContainingComponent(int i, int& arrayComp);
00197
00204 int GetNumberOfComponents();
00205
00213 vtkIdType GetNumberOfTuples();
00214
00220 void SetNumberOfTuples(const vtkIdType number);
00221
00228 double *GetTuple(const vtkIdType i);
00229
00236 void GetTuple(const vtkIdType i, double * tuple);
00237
00244 void SetTuple(const vtkIdType i, const double * tuple);
00245
00252 void InsertTuple(const vtkIdType i, const double * tuple);
00253
00260 vtkIdType InsertNextTuple(const double * tuple);
00261
00267 double GetComponent(const vtkIdType i, const int j);
00268
00276 void SetComponent(const vtkIdType i, const int j, const double c);
00277
00285 void InsertComponent(const vtkIdType i, const int j, const double c);
00286
00287 protected:
00288
00289 vtkFieldData();
00290 ~vtkFieldData();
00291
00292 int NumberOfArrays;
00293 int NumberOfActiveArrays;
00294 vtkDataArray **Data;
00295
00296 int TupleSize;
00297 double *Tuple;
00298
00300 void SetArray(int i, vtkDataArray *array);
00301
00302 virtual void RemoveArray(int index);
00303
00305 virtual void InitializeFields();
00306
00307
00308
00309 struct CopyFieldFlag
00310 {
00311 char* ArrayName;
00312 int IsCopied;
00313 };
00314
00315 CopyFieldFlag* CopyFieldFlags;
00316 int NumberOfFieldFlags;
00317 void CopyFieldOnOff(const char* name, int onOff);
00318 void ClearFieldFlags();
00319 int FindFlag(const char* field);
00320 int GetFlag(const char* field);
00321 void CopyFlags(const vtkFieldData* source);
00322 int DoCopyAllOn;
00323 int DoCopyAllOff;
00324
00325
00326 private:
00327 vtkFieldData(const vtkFieldData&);
00328 void operator=(const vtkFieldData&);
00329
00330 public:
00331
00332 class VTK_COMMON_EXPORT BasicIterator
00333 {
00334 public:
00335 BasicIterator();
00336 BasicIterator(const BasicIterator& source);
00337 BasicIterator(const int* list, unsigned int listSize);
00338 BasicIterator& operator=(const BasicIterator& source);
00339 virtual ~BasicIterator();
00340
00341 int GetListSize() const
00342 {
00343 return this->ListSize;
00344 }
00345 int GetCurrentIndex()
00346 {
00347 return this->List[this->Position];
00348 }
00349 int BeginIndex()
00350 {
00351 this->Position = -1;
00352 return this->NextIndex();
00353 }
00354 int End() const
00355 {
00356 return (this->Position >= this->ListSize);
00357 }
00358 int NextIndex()
00359 {
00360 this->Position++;
00361 return (this->End() ? -1 : this->List[this->Position]);
00362 }
00363
00364 protected:
00365
00366 int* List;
00367 int ListSize;
00368 int Position;
00369 };
00370
00371 class VTK_COMMON_EXPORT Iterator : public BasicIterator
00372 {
00373 public:
00374
00375 Iterator(const Iterator& source);
00376 Iterator& operator=(const Iterator& source);
00377 virtual ~Iterator();
00378 Iterator(vtkFieldData* dsa, const int* list=0,
00379 unsigned int listSize=0);
00380
00381 vtkDataArray* Begin()
00382 {
00383 this->Position = -1;
00384 return this->Next();
00385 }
00386
00387 vtkDataArray* Next()
00388 {
00389 this->Position++;
00390 return (this->End() ? 0 :
00391 Fields->GetArray(this->List[this->Position]));
00392 }
00393
00394 void DetachFieldData();
00395
00396 protected:
00397 vtkFieldData* Fields;
00398 int Detached;
00399 };
00400
00401
00402
00403
00404 };
00405
00406
00407 #endif