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