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 "vtkAbstractArray.h"
00051
00052 #ifndef VTK_LEGACY_REMOVE
00053 # include "vtkDataArray.h"
00054 #endif
00055
00056 class vtkIdList;
00057
00058 class VTK_FILTERING_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
00075 void CopyStructure(vtkFieldData*);
00076
00083 void AllocateArrays(int num);
00084
00086
00089 int GetNumberOfArrays()
00090 {
00091 return this->NumberOfActiveArrays;
00092 }
00094
00097 int AddArray(vtkAbstractArray *array);
00098
00100
00101 virtual void RemoveArray(const char *name)
00102 {
00103 int i;
00104 this->GetAbstractArray(name, i);
00105 this->RemoveArray(i);
00106 }
00108
00112 vtkDataArray *GetArray(int i);
00113
00118 vtkDataArray *GetArray(const char *arrayName, int &index);
00119
00121
00124 vtkDataArray *GetArray(const char *arrayName)
00125 {
00126 int i;
00127 return this->GetArray(arrayName, i);
00128 }
00130
00134 vtkAbstractArray* GetAbstractArray(int i);
00135
00139 vtkAbstractArray* GetAbstractArray(const char* arrayName, int &index);
00140
00142
00144 vtkAbstractArray* GetAbstractArray(const char* arrayName)
00145 {
00146 int i;
00147 return this->GetAbstractArray(arrayName, i);
00148 }
00150
00152
00153 int HasArray(const char *name)
00154 {
00155 int i;
00156 vtkAbstractArray *array = this->GetAbstractArray(name, i);
00157
00158 return array ? 1 : 0;
00159 }
00161
00163
00165 const char* GetArrayName(int i)
00166 {
00167 vtkAbstractArray* da = this->GetAbstractArray(i);
00168 return da ? da->GetName() : 0;
00169 }
00171
00174 virtual void PassData(vtkFieldData* fd);
00175
00177
00182 void CopyFieldOn(const char* name) { this->CopyFieldOnOff(name, 1); }
00183 void CopyFieldOff(const char* name) { this->CopyFieldOnOff(name, 0); }
00185
00191 virtual void CopyAllOn(int unused=0);
00192
00198 virtual void CopyAllOff(int unused=0);
00199
00201 virtual void DeepCopy(vtkFieldData *da);
00202
00204 virtual void ShallowCopy(vtkFieldData *da);
00205
00208 void Squeeze();
00209
00212 void Reset();
00213
00218 virtual unsigned long GetActualMemorySize();
00219
00221 unsigned long int GetMTime();
00222
00230 void GetField(vtkIdList *ptId, vtkFieldData *f);
00231
00237 int GetArrayContainingComponent(int i, int& arrayComp);
00238
00245 int GetNumberOfComponents();
00246
00254 vtkIdType GetNumberOfTuples();
00255
00261 void SetNumberOfTuples(const vtkIdType number);
00262
00266 void SetTuple(const vtkIdType i, const vtkIdType j, vtkFieldData* source);
00267
00270 void InsertTuple(const vtkIdType i, const vtkIdType j, vtkFieldData* source);
00271
00275 vtkIdType InsertNextTuple(const vtkIdType j, vtkFieldData* source);
00276
00277
00278
00279
00280
00286 VTK_LEGACY(double *GetTuple(const vtkIdType i));
00287
00292 VTK_LEGACY(void GetTuple(const vtkIdType i, double * tuple));
00293
00298 VTK_LEGACY(void SetTuple(const vtkIdType i, const double * tuple));
00299
00304 VTK_LEGACY(void InsertTuple(const vtkIdType i, const double * tuple));
00305
00310 VTK_LEGACY(vtkIdType InsertNextTuple(const double * tuple));
00311
00316 VTK_LEGACY(double GetComponent(const vtkIdType i, const int j));
00317
00323 VTK_LEGACY(void SetComponent(const vtkIdType i, const int j, const double c));
00324
00330 VTK_LEGACY(void InsertComponent(const vtkIdType i, const int j, const double c));
00331 protected:
00332
00333 vtkFieldData();
00334 ~vtkFieldData();
00335
00336 int NumberOfArrays;
00337 int NumberOfActiveArrays;
00338 vtkAbstractArray **Data;
00339
00341 void SetArray(int i, vtkAbstractArray *array);
00342
00343 virtual void RemoveArray(int index);
00344
00346 virtual void InitializeFields();
00347
00348
00349
00350 struct CopyFieldFlag
00351 {
00352 char* ArrayName;
00353 int IsCopied;
00354 };
00355
00356 CopyFieldFlag* CopyFieldFlags;
00357 int NumberOfFieldFlags;
00358 void CopyFieldOnOff(const char* name, int onOff);
00359 void ClearFieldFlags();
00360 int FindFlag(const char* field);
00361 int GetFlag(const char* field);
00362 void CopyFlags(const vtkFieldData* source);
00363 int DoCopyAllOn;
00364 int DoCopyAllOff;
00365
00366
00367 private:
00368 vtkFieldData(const vtkFieldData&);
00369 void operator=(const vtkFieldData&);
00370
00371 #ifndef VTK_LEGACY_REMOVE
00372
00373 int TupleSize;
00374 double* Tuple;
00375 #endif
00376 public:
00377
00378 class VTK_FILTERING_EXPORT BasicIterator
00379 {
00380 public:
00381 BasicIterator();
00382 BasicIterator(const BasicIterator& source);
00383 BasicIterator(const int* list, unsigned int listSize);
00384 BasicIterator& operator=(const BasicIterator& source);
00385 virtual ~BasicIterator();
00386
00387 int GetListSize() const
00388 {
00389 return this->ListSize;
00390 }
00391 int GetCurrentIndex()
00392 {
00393 return this->List[this->Position];
00394 }
00395 int BeginIndex()
00396 {
00397 this->Position = -1;
00398 return this->NextIndex();
00399 }
00400 int End() const
00401 {
00402 return (this->Position >= this->ListSize);
00403 }
00404 int NextIndex()
00405 {
00406 this->Position++;
00407 return (this->End() ? -1 : this->List[this->Position]);
00408 }
00409
00410 protected:
00411
00412 int* List;
00413 int ListSize;
00414 int Position;
00415 };
00416
00417 class VTK_FILTERING_EXPORT Iterator : public BasicIterator
00418 {
00419 public:
00420
00421 Iterator(const Iterator& source);
00422 Iterator& operator=(const Iterator& source);
00423 virtual ~Iterator();
00424 Iterator(vtkFieldData* dsa, const int* list=0,
00425 unsigned int listSize=0);
00426
00427 vtkDataArray* Begin()
00428 {
00429 this->Position = -1;
00430 return this->Next();
00431 }
00432
00433 vtkDataArray* Next()
00434 {
00435 this->Position++;
00436 if (this->End())
00437 {
00438 return 0;
00439 }
00440
00441
00442
00443
00444 vtkDataArray* cur = Fields->GetArray(this->List[this->Position]);
00445 return (cur? cur : this->Next());
00446 }
00447
00448 void DetachFieldData();
00449
00450 protected:
00451 vtkFieldData* Fields;
00452 int Detached;
00453 };
00454
00455
00456
00457
00458 };
00459
00460
00461 #endif