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

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