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

Common/vtkStructuredGrid.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkStructuredGrid.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 =========================================================================*/
00064 #ifndef __vtkStructuredGrid_h
00065 #define __vtkStructuredGrid_h
00066 
00067 #include "vtkPointSet.h"
00068 
00069 #include "vtkStructuredData.h" // Needed for inline methods
00070 #include "vtkUnsignedCharArray.h" // Needed for inline methods
00071 
00072 class vtkEmptyCell;
00073 class vtkHexahedron;
00074 class vtkLine;
00075 class vtkQuad;
00076 class vtkVertex;
00077 
00078 class VTK_COMMON_EXPORT vtkStructuredGrid : public vtkPointSet 
00079 {
00080 public:
00081   static vtkStructuredGrid *New();
00082 
00083   vtkTypeRevisionMacro(vtkStructuredGrid,vtkPointSet);
00084   void PrintSelf(ostream& os, vtkIndent indent);
00085  
00087   int GetDataObjectType() {return VTK_STRUCTURED_GRID;}
00088 
00091   void CopyStructure(vtkDataSet *ds);
00092 
00094 
00095   vtkIdType GetNumberOfPoints() {return vtkPointSet::GetNumberOfPoints();}
00096   float *GetPoint(vtkIdType ptId) {return this->vtkPointSet::GetPoint(ptId);}
00097   void GetPoint(vtkIdType ptId, float p[3])
00098     {this->vtkPointSet::GetPoint(ptId,p);}
00099   vtkCell *GetCell(vtkIdType cellId);
00100   void GetCell(vtkIdType cellId, vtkGenericCell *cell);
00101   void GetCellBounds(vtkIdType cellId, float bounds[6]);
00102   int GetCellType(vtkIdType cellId);
00103   vtkIdType GetNumberOfCells();
00104   void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds);
00105   void GetPointCells(vtkIdType ptId, vtkIdList *cellIds)
00106     {
00107       vtkStructuredData::GetPointCells(ptId,cellIds,this->GetDimensions());
00108     }
00109   void Initialize();
00110   int GetMaxCellSize() {return 8;}; //hexahedron is the largest
00111   void GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds,
00112                         vtkIdList *cellIds);
00113   virtual void GetScalarRange(float range[2]);
00114   float *GetScalarRange() {return this->vtkPointSet::GetScalarRange();}
00116 
00118 
00119   void SetDimensions(int i, int j, int k);
00120   void SetDimensions(int dim[3]);
00122 
00124 
00125   virtual int *GetDimensions ();
00126   virtual void GetDimensions (int dim[3]);
00128 
00130   int GetDataDimension();
00131 
00133 
00135   void SetBlanking(int blanking);
00136   int GetBlanking() {return this->Blanking;}
00137   void BlankingOn();
00138   void BlankingOff();
00139   void BlankPoint(vtkIdType ptId);
00140   void UnBlankPoint(vtkIdType ptId);
00142   
00144 
00145   vtkUnsignedCharArray *GetPointVisibility() 
00146     {return this->PointVisibility;}
00148 
00152   void SetPointVisibility(vtkUnsignedCharArray *pointVisibility);
00153 
00155 
00157   unsigned char IsPointVisible(vtkIdType ptId)
00158     {return (this->Blanking ? this->PointVisibility->GetValue(ptId) : 1);}
00160   
00163   unsigned char IsCellVisible(vtkIdType cellId);
00164   
00166 
00169   void SetUpdateExtent(int piece, int numPieces, int ghostLevel);
00170   void SetUpdateExtent(int piece, int numPieces)
00171     {this->SetUpdateExtent(piece, numPieces, 0);}
00173 
00175 
00176   void SetUpdateExtent( int x1, int x2, int y1, int y2, int z1, int z2 )
00177     { this->vtkPointSet::SetUpdateExtent( x1, x2, y1, y2, z1, z2 ); };
00178   void SetUpdateExtent( int ext[6] )
00179     { this->vtkPointSet::SetUpdateExtent( ext ); };
00181 
00183 
00186   void SetExtent(int extent[6]);
00187   void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
00188   vtkGetVector6Macro(Extent,int);
00190 
00196   unsigned long GetActualMemorySize();
00197 
00199 
00200   void ShallowCopy(vtkDataObject *src);  
00201   void DeepCopy(vtkDataObject *src);
00203 
00206   virtual void UpdateData();
00207 
00208 protected:
00209   vtkStructuredGrid();
00210   ~vtkStructuredGrid();
00211 
00212   // for the GetCell method
00213   vtkVertex *Vertex;
00214   vtkLine *Line;
00215   vtkQuad *Quad;  
00216   vtkHexahedron *Hexahedron;
00217   vtkEmptyCell *EmptyCell;
00218 
00219   // The extent type is a 3D extent
00220   int GetExtentType() { return VTK_3D_EXTENT; }
00221   
00225   virtual void Crop();
00226 
00227   int Dimensions[3];
00228   int DataDescription;
00229   int Blanking;
00230   vtkUnsignedCharArray *PointVisibility;
00231   void AllocatePointVisibility();
00232 
00233 private:
00235 
00236   void GetCellNeighbors(vtkIdType cellId, vtkIdList& ptIds, vtkIdList& cellIds)
00237     {this->GetCellNeighbors(cellId, &ptIds, &cellIds);}
00239 
00240   // Internal method used by DeepCopy and ShallowCopy.
00241   void InternalStructuredGridCopy(vtkStructuredGrid *src);
00242 
00243 private:
00244   vtkStructuredGrid(const vtkStructuredGrid&);  // Not implemented.
00245   void operator=(const vtkStructuredGrid&);  // Not implemented.
00246 };
00247 
00248 
00249 inline vtkIdType vtkStructuredGrid::GetNumberOfCells() 
00250 {
00251   int nCells=1;
00252   int dims[3];
00253   int i;
00254 
00255   this->GetDimensions(dims);
00256   for (i=0; i<3; i++)
00257     {
00258     if (dims[i] <= 0)
00259       {
00260       return 0;
00261       }
00262     if (dims[i] > 1)
00263       {
00264       nCells *= (dims[i]-1);
00265       }
00266     }
00267 
00268   return nCells;
00269 }
00270 
00271 inline int vtkStructuredGrid::GetDataDimension()
00272 {
00273   return vtkStructuredData::GetDataDimension(this->DataDescription);
00274 }
00275 
00276 #endif
00277 
00278 
00279 
00280 
00281 
00282