Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

254 lines
8.4 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkRectilinearGrid.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkRectilinearGrid - a dataset that is topologically regular with variable spacing in the three coordinate directions
// .SECTION Description
// vtkRectilinearGrid is a data object that is a concrete implementation of
// vtkDataSet. vtkRectilinearGrid represents a geometric structure that is
// topologically regular with variable spacing in the three coordinate
// directions x-y-z.
//
// To define a vtkRectilinearGrid, you must specify the dimensions of the
// data and provide three arrays of values specifying the coordinates
// along the x-y-z axes. The coordinate arrays are specified using three
// vtkDataArray objects (one for x, one for y, one for z).
// .SECTION Caveats
// Make sure that the dimensions of the grid match the number of coordinates
// in the x-y-z directions. If not, unpredictable results (including
// program failure) may result. Also, you must supply coordinates in all
// three directions, even if the dataset topology is 2D, 1D, or 0D.
#ifndef __vtkRectilinearGrid_h
#define __vtkRectilinearGrid_h
#include "vtkDataSet.h"
#include "vtkStructuredData.h" // For inline methods
class vtkVertex;
class vtkLine;
class vtkPixel;
class vtkVoxel;
class vtkDataArray;
class VTK_FILTERING_EXPORT vtkRectilinearGrid : public vtkDataSet
{
public:
static vtkRectilinearGrid *New();
vtkTypeRevisionMacro(vtkRectilinearGrid,vtkDataSet);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Return what type of dataset this is.
int GetDataObjectType() {return VTK_RECTILINEAR_GRID;};
// Description:
// Copy the geometric and topological structure of an input rectilinear grid
// object.
void CopyStructure(vtkDataSet *ds);
// Description:
// Restore object to initial state. Release memory back to system.
void Initialize();
// Description:
// Standard vtkDataSet API methods. See vtkDataSet for more information.
vtkIdType GetNumberOfCells();
vtkIdType GetNumberOfPoints();
double *GetPoint(vtkIdType ptId);
void GetPoint(vtkIdType id, double x[3]);
vtkCell *GetCell(vtkIdType cellId);
void GetCell(vtkIdType cellId, vtkGenericCell *cell);
void GetCellBounds(vtkIdType cellId, double bounds[6]);
int FindPoint(double x, double y, double z) { return this->vtkDataSet::FindPoint(x, y, z);};
vtkIdType FindPoint(double x[3]);
vtkIdType FindCell(double x[3], vtkCell *cell, vtkIdType cellId, double tol2,
int& subId, double pcoords[3], double *weights);
vtkIdType FindCell(double x[3], vtkCell *cell, vtkGenericCell *gencell,
vtkIdType cellId, double tol2, int& subId,
double pcoords[3], double *weights);
vtkCell *FindAndGetCell(double x[3], vtkCell *cell, vtkIdType cellId,
double tol2, int& subId, double pcoords[3],
double *weights);
int GetCellType(vtkIdType cellId);
void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds)
{vtkStructuredData::GetCellPoints(cellId,ptIds,this->DataDescription,
this->Dimensions);}
void GetPointCells(vtkIdType ptId, vtkIdList *cellIds)
{vtkStructuredData::GetPointCells(ptId,cellIds,this->Dimensions);}
void ComputeBounds();
int GetMaxCellSize() {return 8;}; //voxel is the largest
void GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds,
vtkIdList *cellIds);
// Description:
// Set dimensions of rectilinear grid dataset.
// This also sets the extent.
void SetDimensions(int i, int j, int k);
void SetDimensions(int dim[3]);
// Description:
// Get dimensions of this rectilinear grid dataset.
vtkGetVectorMacro(Dimensions,int,3);
// Description:
// Return the dimensionality of the data.
int GetDataDimension();
// Description:
// Convenience function computes the structured coordinates for a point x[3].
// The cell is specified by the array ijk[3], and the parametric coordinates
// in the cell are specified with pcoords[3]. The function returns a 0 if the
// point x is outside of the grid, and a 1 if inside the grid.
int ComputeStructuredCoordinates(double x[3], int ijk[3], double pcoords[3]);
// Description:
// Given a location in structured coordinates (i-j-k), return the point id.
vtkIdType ComputePointId(int ijk[3]);
// Description:
// Given a location in structured coordinates (i-j-k), return the cell id.
vtkIdType ComputeCellId(int ijk[3]);
// Description:
// Specify the grid coordinates in the x-direction.
virtual void SetXCoordinates(vtkDataArray*);
vtkGetObjectMacro(XCoordinates,vtkDataArray);
// Description:
// Specify the grid coordinates in the y-direction.
virtual void SetYCoordinates(vtkDataArray*);
vtkGetObjectMacro(YCoordinates,vtkDataArray);
// Description:
// Specify the grid coordinates in the z-direction.
virtual void SetZCoordinates(vtkDataArray*);
vtkGetObjectMacro(ZCoordinates,vtkDataArray);
// Description:
// Different ways to set the extent of the data array. The extent
// should be set before the "Scalars" are set or allocated.
// The Extent is stored in the order (X, Y, Z).
void SetExtent(int extent[6]);
void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
vtkGetVector6Macro(Extent, int);
// Description:
// Return the actual size of the data in kilobytes. This number
// is valid only after the pipeline has updated. The memory size
// returned is guaranteed to be greater than or equal to the
// memory required to represent the data (e.g., extra space in
// arrays, etc. are not included in the return value). THIS METHOD
// IS THREAD SAFE.
unsigned long GetActualMemorySize();
// Description:
// Shallow and Deep copy.
void ShallowCopy(vtkDataObject *src);
void DeepCopy(vtkDataObject *src);
// Description:
// Structured extent. The extent type is a 3D extent
int GetExtentType() { return VTK_3D_EXTENT; };
// Description:
// Reallocates and copies to set the Extent to the UpdateExtent.
// This is used internally when the exact extent is requested,
// and the source generated more than the update extent.
virtual void Crop();
//BTX
// Description:
// Retrieve an instance of this class from an information object.
static vtkRectilinearGrid* GetData(vtkInformation* info);
static vtkRectilinearGrid* GetData(vtkInformationVector* v, int i=0);
//ETX
protected:
vtkRectilinearGrid();
~vtkRectilinearGrid();
// for the GetCell method
vtkVertex *Vertex;
vtkLine *Line;
vtkPixel *Pixel;
vtkVoxel *Voxel;
int Dimensions[3];
int DataDescription;
int Extent[6];
vtkDataArray *XCoordinates;
vtkDataArray *YCoordinates;
vtkDataArray *ZCoordinates;
// Hang on to some space for returning points when GetPoint(id) is called.
double PointReturn[3];
private:
// Description:
// For legacy compatibility. Do not use.
void GetCellNeighbors(vtkIdType cellId, vtkIdList& ptIds, vtkIdList& cellIds)
{this->GetCellNeighbors(cellId, &ptIds, &cellIds);}
private:
vtkRectilinearGrid(const vtkRectilinearGrid&); // Not implemented.
void operator=(const vtkRectilinearGrid&); // Not implemented.
};
inline vtkIdType vtkRectilinearGrid::GetNumberOfCells()
{
vtkIdType nCells=1;
int i;
for (i=0; i<3; i++)
{
if (this->Dimensions[i] <= 0)
{
return 0;
}
if (this->Dimensions[i] > 1)
{
nCells *= (this->Dimensions[i]-1);
}
}
return nCells;
}
inline vtkIdType vtkRectilinearGrid::GetNumberOfPoints()
{
return this->Dimensions[0]*this->Dimensions[1]*this->Dimensions[2];
}
inline int vtkRectilinearGrid::GetDataDimension()
{
return vtkStructuredData::GetDataDimension(this->DataDescription);
}
inline vtkIdType vtkRectilinearGrid::ComputePointId(int ijk[3])
{
return vtkStructuredData::ComputePointId(this->Dimensions,ijk);
}
inline vtkIdType vtkRectilinearGrid::ComputeCellId(int ijk[3])
{
return vtkStructuredData::ComputeCellId(this->Dimensions,ijk);
}
#endif