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.
1219 lines
35 KiB
1219 lines
35 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkStructuredGrid.cxx,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.
|
|
|
|
=========================================================================*/
|
|
#include "vtkStructuredGrid.h"
|
|
|
|
#include "vtkCellData.h"
|
|
#include "vtkEmptyCell.h"
|
|
#include "vtkExtentTranslator.h"
|
|
#include "vtkGenericCell.h"
|
|
#include "vtkHexahedron.h"
|
|
#include "vtkInformation.h"
|
|
#include "vtkInformationVector.h"
|
|
#include "vtkLine.h"
|
|
#include "vtkMath.h"
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkPointData.h"
|
|
#include "vtkStreamingDemandDrivenPipeline.h"
|
|
#include "vtkStructuredVisibilityConstraint.h"
|
|
#include "vtkQuad.h"
|
|
#include "vtkVertex.h"
|
|
|
|
vtkCxxRevisionMacro(vtkStructuredGrid, "$Revision: 1.5.6.1 $");
|
|
vtkStandardNewMacro(vtkStructuredGrid);
|
|
|
|
vtkCxxSetObjectMacro(vtkStructuredGrid,
|
|
PointVisibility,
|
|
vtkStructuredVisibilityConstraint);
|
|
vtkCxxSetObjectMacro(vtkStructuredGrid,
|
|
CellVisibility,
|
|
vtkStructuredVisibilityConstraint);
|
|
|
|
#define vtkAdjustBoundsMacro( A, B ) \
|
|
A[0] = (B[0] < A[0] ? B[0] : A[0]); A[1] = (B[0] > A[1] ? B[0] : A[1]); \
|
|
A[2] = (B[1] < A[2] ? B[1] : A[2]); A[3] = (B[1] > A[3] ? B[1] : A[3]); \
|
|
A[4] = (B[2] < A[4] ? B[2] : A[4]); A[5] = (B[2] > A[5] ? B[2] : A[5])
|
|
|
|
vtkStructuredGrid::vtkStructuredGrid()
|
|
{
|
|
this->Vertex = vtkVertex::New();
|
|
this->Line = vtkLine::New();
|
|
this->Quad = vtkQuad::New();
|
|
this->Hexahedron = vtkHexahedron::New();
|
|
this->EmptyCell = vtkEmptyCell::New();
|
|
|
|
this->Dimensions[0] = 0;
|
|
this->Dimensions[1] = 0;
|
|
this->Dimensions[2] = 0;
|
|
this->DataDescription = VTK_EMPTY;
|
|
|
|
this->PointVisibility = vtkStructuredVisibilityConstraint::New();
|
|
this->CellVisibility = vtkStructuredVisibilityConstraint::New();
|
|
|
|
this->Information->Set(vtkDataObject::DATA_EXTENT_TYPE(), VTK_3D_EXTENT);
|
|
this->Information->Set(vtkDataObject::DATA_EXTENT(), this->Extent, 6);
|
|
|
|
int extent[6] = {0, -1, 0, -1, 0, -1};
|
|
memcpy(this->Extent, extent, 6*sizeof(int));
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkStructuredGrid::~vtkStructuredGrid()
|
|
{
|
|
this->Initialize();
|
|
this->Vertex->Delete();
|
|
this->Line->Delete();
|
|
this->Quad->Delete();
|
|
this->Hexahedron->Delete();
|
|
this->EmptyCell->Delete();
|
|
|
|
this->PointVisibility->Delete();
|
|
this->CellVisibility->Delete();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Copy the geometric and topological structure of an input structured grid.
|
|
void vtkStructuredGrid::CopyStructure(vtkDataSet *ds)
|
|
{
|
|
vtkStructuredGrid *sg=(vtkStructuredGrid *)ds;
|
|
vtkPointSet::CopyStructure(ds);
|
|
int i;
|
|
|
|
for (i=0; i<3; i++)
|
|
{
|
|
this->Dimensions[i] = sg->Dimensions[i];
|
|
}
|
|
this->SetExtent(sg->GetExtent());
|
|
|
|
this->DataDescription = sg->DataDescription;
|
|
|
|
this->PointVisibility->Delete();
|
|
this->PointVisibility = vtkStructuredVisibilityConstraint::New();
|
|
this->PointVisibility->ShallowCopy(sg->PointVisibility);
|
|
|
|
this->CellVisibility->Delete();
|
|
this->CellVisibility = vtkStructuredVisibilityConstraint::New();
|
|
this->CellVisibility->ShallowCopy(sg->CellVisibility);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::Initialize()
|
|
{
|
|
this->Superclass::Initialize();
|
|
|
|
this->PointVisibility->Delete();
|
|
this->PointVisibility = vtkStructuredVisibilityConstraint::New();
|
|
|
|
this->CellVisibility->Delete();
|
|
this->CellVisibility = vtkStructuredVisibilityConstraint::New();
|
|
|
|
if(this->Information)
|
|
{
|
|
this->SetDimensions(0,0,0);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int vtkStructuredGrid::GetCellType(vtkIdType cellId)
|
|
{
|
|
// see whether the cell is blanked
|
|
if ( (this->PointVisibility->IsConstrained() ||
|
|
this->CellVisibility->IsConstrained())
|
|
&& !this->IsCellVisible(cellId) )
|
|
{
|
|
return VTK_EMPTY_CELL;
|
|
}
|
|
|
|
switch (this->DataDescription)
|
|
{
|
|
case VTK_EMPTY:
|
|
return VTK_EMPTY_CELL;
|
|
|
|
case VTK_SINGLE_POINT:
|
|
return VTK_VERTEX;
|
|
|
|
case VTK_X_LINE: case VTK_Y_LINE: case VTK_Z_LINE:
|
|
return VTK_LINE;
|
|
|
|
case VTK_XY_PLANE: case VTK_YZ_PLANE: case VTK_XZ_PLANE:
|
|
return VTK_QUAD;
|
|
|
|
case VTK_XYZ_GRID:
|
|
return VTK_HEXAHEDRON;
|
|
|
|
default:
|
|
vtkErrorMacro(<<"Bad data description!");
|
|
return VTK_EMPTY_CELL;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkCell *vtkStructuredGrid::GetCell(vtkIdType cellId)
|
|
{
|
|
vtkCell *cell = NULL;
|
|
vtkIdType idx;
|
|
int i, j, k;
|
|
int d01, offset1, offset2;
|
|
|
|
// Make sure data is defined
|
|
if ( ! this->Points )
|
|
{
|
|
vtkErrorMacro (<<"No data");
|
|
return NULL;
|
|
}
|
|
|
|
// see whether the cell is blanked
|
|
if ( (this->PointVisibility->IsConstrained() ||
|
|
this->CellVisibility->IsConstrained())
|
|
&& !this->IsCellVisible(cellId) )
|
|
{
|
|
return this->EmptyCell;
|
|
}
|
|
|
|
// Update dimensions
|
|
this->GetDimensions();
|
|
|
|
switch (this->DataDescription)
|
|
{
|
|
case VTK_EMPTY:
|
|
return this->EmptyCell;
|
|
|
|
case VTK_SINGLE_POINT: // cellId can only be = 0
|
|
cell = this->Vertex;
|
|
cell->PointIds->SetId(0,0);
|
|
break;
|
|
|
|
case VTK_X_LINE:
|
|
cell = this->Line;
|
|
cell->PointIds->SetId(0,cellId);
|
|
cell->PointIds->SetId(1,cellId+1);
|
|
break;
|
|
|
|
case VTK_Y_LINE:
|
|
cell = this->Line;
|
|
cell->PointIds->SetId(0,cellId);
|
|
cell->PointIds->SetId(1,cellId+1);
|
|
break;
|
|
|
|
case VTK_Z_LINE:
|
|
cell = this->Line;
|
|
cell->PointIds->SetId(0,cellId);
|
|
cell->PointIds->SetId(1,cellId+1);
|
|
break;
|
|
|
|
case VTK_XY_PLANE:
|
|
cell = this->Quad;
|
|
i = cellId % (this->Dimensions[0]-1);
|
|
j = cellId / (this->Dimensions[0]-1);
|
|
idx = i + j*this->Dimensions[0];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
break;
|
|
|
|
case VTK_YZ_PLANE:
|
|
cell = this->Quad;
|
|
j = cellId % (this->Dimensions[1]-1);
|
|
k = cellId / (this->Dimensions[1]-1);
|
|
idx = j + k*this->Dimensions[1];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[1];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
break;
|
|
|
|
case VTK_XZ_PLANE:
|
|
cell = this->Quad;
|
|
i = cellId % (this->Dimensions[0]-1);
|
|
k = cellId / (this->Dimensions[0]-1);
|
|
idx = i + k*this->Dimensions[0];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
break;
|
|
|
|
case VTK_XYZ_GRID:
|
|
cell = this->Hexahedron;
|
|
d01 = this->Dimensions[0]*this->Dimensions[1];
|
|
i = cellId % (this->Dimensions[0] - 1);
|
|
j = (cellId / (this->Dimensions[0] - 1)) % (this->Dimensions[1] - 1);
|
|
k = cellId / ((this->Dimensions[0] - 1) * (this->Dimensions[1] - 1));
|
|
idx = i+ j*this->Dimensions[0] + k*d01;
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
idx += d01;
|
|
cell->PointIds->SetId(4,idx);
|
|
cell->PointIds->SetId(5,idx+offset1);
|
|
cell->PointIds->SetId(6,idx+offset1+offset2);
|
|
cell->PointIds->SetId(7,idx+offset2);
|
|
break;
|
|
}
|
|
|
|
// Extract point coordinates and point ids. NOTE: the ordering of the vtkQuad
|
|
// and vtkHexahedron cells are tricky.
|
|
int NumberOfIds = cell->PointIds->GetNumberOfIds();
|
|
for (i=0; i<NumberOfIds; i++)
|
|
{
|
|
idx = cell->PointIds->GetId(i);
|
|
cell->Points->SetPoint(i,this->Points->GetPoint(idx));
|
|
}
|
|
|
|
return cell;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::GetCell(vtkIdType cellId, vtkGenericCell *cell)
|
|
{
|
|
vtkIdType idx;
|
|
int i, j, k;
|
|
int d01, offset1, offset2;
|
|
double x[3];
|
|
|
|
// Make sure data is defined
|
|
if ( ! this->Points )
|
|
{
|
|
vtkErrorMacro (<<"No data");
|
|
}
|
|
|
|
// see whether the cell is blanked
|
|
if ( (this->PointVisibility->IsConstrained() ||
|
|
this->CellVisibility->IsConstrained())
|
|
&& !this->IsCellVisible(cellId) )
|
|
{
|
|
cell->SetCellTypeToEmptyCell();
|
|
return;
|
|
}
|
|
|
|
// Update dimensions
|
|
this->GetDimensions();
|
|
|
|
switch (this->DataDescription)
|
|
{
|
|
case VTK_EMPTY:
|
|
cell->SetCellTypeToEmptyCell();
|
|
return;
|
|
|
|
case VTK_SINGLE_POINT: // cellId can only be = 0
|
|
cell->SetCellTypeToVertex();
|
|
cell->PointIds->SetId(0,0);
|
|
break;
|
|
|
|
case VTK_X_LINE:
|
|
cell->SetCellTypeToLine();
|
|
cell->PointIds->SetId(0,cellId);
|
|
cell->PointIds->SetId(1,cellId+1);
|
|
break;
|
|
|
|
case VTK_Y_LINE:
|
|
cell->SetCellTypeToLine();
|
|
cell->PointIds->SetId(0,cellId);
|
|
cell->PointIds->SetId(1,cellId+1);
|
|
break;
|
|
|
|
case VTK_Z_LINE:
|
|
cell->SetCellTypeToLine();
|
|
cell->PointIds->SetId(0,cellId);
|
|
cell->PointIds->SetId(1,cellId+1);
|
|
break;
|
|
|
|
case VTK_XY_PLANE:
|
|
cell->SetCellTypeToQuad();
|
|
i = cellId % (this->Dimensions[0]-1);
|
|
j = cellId / (this->Dimensions[0]-1);
|
|
idx = i + j*this->Dimensions[0];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
break;
|
|
|
|
case VTK_YZ_PLANE:
|
|
cell->SetCellTypeToQuad();
|
|
j = cellId % (this->Dimensions[1]-1);
|
|
k = cellId / (this->Dimensions[1]-1);
|
|
idx = j + k*this->Dimensions[1];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[1];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
break;
|
|
|
|
case VTK_XZ_PLANE:
|
|
cell->SetCellTypeToQuad();
|
|
i = cellId % (this->Dimensions[0]-1);
|
|
k = cellId / (this->Dimensions[0]-1);
|
|
idx = i + k*this->Dimensions[0];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
break;
|
|
|
|
case VTK_XYZ_GRID:
|
|
cell->SetCellTypeToHexahedron();
|
|
d01 = this->Dimensions[0]*this->Dimensions[1];
|
|
i = cellId % (this->Dimensions[0] - 1);
|
|
j = (cellId / (this->Dimensions[0] - 1)) % (this->Dimensions[1] - 1);
|
|
k = cellId / ((this->Dimensions[0] - 1) * (this->Dimensions[1] - 1));
|
|
idx = i+ j*this->Dimensions[0] + k*d01;
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
|
|
cell->PointIds->SetId(0,idx);
|
|
cell->PointIds->SetId(1,idx+offset1);
|
|
cell->PointIds->SetId(2,idx+offset1+offset2);
|
|
cell->PointIds->SetId(3,idx+offset2);
|
|
idx += d01;
|
|
cell->PointIds->SetId(4,idx);
|
|
cell->PointIds->SetId(5,idx+offset1);
|
|
cell->PointIds->SetId(6,idx+offset1+offset2);
|
|
cell->PointIds->SetId(7,idx+offset2);
|
|
break;
|
|
}
|
|
|
|
// Extract point coordinates and point ids. NOTE: the ordering of the vtkQuad
|
|
// and vtkHexahedron cells are tricky.
|
|
int NumberOfIds = cell->PointIds->GetNumberOfIds();
|
|
for (i=0; i<NumberOfIds; i++)
|
|
{
|
|
idx = cell->PointIds->GetId(i);
|
|
this->Points->GetPoint(idx, x);
|
|
cell->Points->SetPoint(i, x);
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Fast implementation of GetCellBounds(). Bounds are calculated without
|
|
// constructing a cell.
|
|
void vtkStructuredGrid::GetCellBounds(vtkIdType cellId, double bounds[6])
|
|
{
|
|
vtkIdType idx = 0;
|
|
int i, j, k;
|
|
vtkIdType d01;
|
|
int offset1 = 0;
|
|
int offset2 = 0;
|
|
double x[3];
|
|
|
|
// Make sure data is defined
|
|
if ( ! this->Points )
|
|
{
|
|
vtkErrorMacro (<<"No data");
|
|
return;
|
|
}
|
|
|
|
vtkMath::UninitializeBounds(bounds);
|
|
|
|
// Update dimensions
|
|
this->GetDimensions();
|
|
|
|
switch (this->DataDescription)
|
|
{
|
|
case VTK_EMPTY:
|
|
return;
|
|
case VTK_SINGLE_POINT: // cellId can only be = 0
|
|
this->Points->GetPoint( 0, x );
|
|
bounds[0] = bounds[1] = x[0];
|
|
bounds[2] = bounds[3] = x[1];
|
|
bounds[4] = bounds[5] = x[2];
|
|
break;
|
|
|
|
case VTK_X_LINE:
|
|
case VTK_Y_LINE:
|
|
case VTK_Z_LINE:
|
|
this->Points->GetPoint( cellId, x );
|
|
bounds[0] = bounds[1] = x[0];
|
|
bounds[2] = bounds[3] = x[1];
|
|
bounds[4] = bounds[5] = x[2];
|
|
|
|
this->Points->GetPoint( cellId +1, x );
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
break;
|
|
|
|
case VTK_XY_PLANE:
|
|
case VTK_YZ_PLANE:
|
|
case VTK_XZ_PLANE:
|
|
if (this->DataDescription == VTK_XY_PLANE)
|
|
{
|
|
i = cellId % (this->Dimensions[0]-1);
|
|
j = cellId / (this->Dimensions[0]-1);
|
|
idx = i + j*this->Dimensions[0];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
}
|
|
else if (this->DataDescription == VTK_YZ_PLANE)
|
|
{
|
|
j = cellId % (this->Dimensions[1]-1);
|
|
k = cellId / (this->Dimensions[1]-1);
|
|
idx = j + k*this->Dimensions[1];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[1];
|
|
}
|
|
else if (this->DataDescription == VTK_XZ_PLANE)
|
|
{
|
|
i = cellId % (this->Dimensions[0]-1);
|
|
k = cellId / (this->Dimensions[0]-1);
|
|
idx = i + k*this->Dimensions[0];
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
}
|
|
|
|
this->Points->GetPoint(idx, x);
|
|
bounds[0] = bounds[1] = x[0];
|
|
bounds[2] = bounds[3] = x[1];
|
|
bounds[4] = bounds[5] = x[2];
|
|
|
|
this->Points->GetPoint( idx+offset1, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
this->Points->GetPoint( idx+offset1+offset2, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
this->Points->GetPoint( idx+offset2, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
break;
|
|
|
|
case VTK_XYZ_GRID:
|
|
d01 = this->Dimensions[0]*this->Dimensions[1];
|
|
i = cellId % (this->Dimensions[0] - 1);
|
|
j = (cellId / (this->Dimensions[0] - 1)) % (this->Dimensions[1] - 1);
|
|
k = cellId / ((this->Dimensions[0] - 1) * (this->Dimensions[1] - 1));
|
|
idx = i+ j*this->Dimensions[0] + k*d01;
|
|
offset1 = 1;
|
|
offset2 = this->Dimensions[0];
|
|
|
|
this->Points->GetPoint(idx, x);
|
|
bounds[0] = bounds[1] = x[0];
|
|
bounds[2] = bounds[3] = x[1];
|
|
bounds[4] = bounds[5] = x[2];
|
|
|
|
this->Points->GetPoint( idx+offset1, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
this->Points->GetPoint( idx+offset1+offset2, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
this->Points->GetPoint( idx+offset2, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
idx += d01;
|
|
|
|
this->Points->GetPoint(idx, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
this->Points->GetPoint( idx+offset1, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
this->Points->GetPoint( idx+offset1+offset2, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
this->Points->GetPoint( idx+offset2, x);
|
|
vtkAdjustBoundsMacro( bounds, x );
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Turn off a particular data point.
|
|
void vtkStructuredGrid::BlankPoint(vtkIdType ptId)
|
|
{
|
|
this->PointVisibility->Initialize(this->Dimensions);
|
|
this->PointVisibility->Blank(ptId);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Turn on a particular data point.
|
|
void vtkStructuredGrid::UnBlankPoint(vtkIdType ptId)
|
|
{
|
|
this->PointVisibility->Initialize(this->Dimensions);
|
|
this->PointVisibility->UnBlank(ptId);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::SetPointVisibilityArray(vtkUnsignedCharArray *ptVis)
|
|
{
|
|
this->PointVisibility->SetVisibilityById(ptVis);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkUnsignedCharArray* vtkStructuredGrid::GetPointVisibilityArray()
|
|
{
|
|
return this->PointVisibility->GetVisibilityById();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Turn off a particular data cell.
|
|
void vtkStructuredGrid::BlankCell(vtkIdType cellId)
|
|
{
|
|
this->CellVisibility->Initialize(this->Dimensions);
|
|
this->CellVisibility->Blank(cellId);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Turn on a particular data cell.
|
|
void vtkStructuredGrid::UnBlankCell(vtkIdType cellId)
|
|
{
|
|
this->CellVisibility->Initialize(this->Dimensions);
|
|
this->CellVisibility->UnBlank(cellId);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::SetCellVisibilityArray(vtkUnsignedCharArray *cellVis)
|
|
{
|
|
this->CellVisibility->SetVisibilityById(cellVis);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkUnsignedCharArray* vtkStructuredGrid::GetCellVisibilityArray()
|
|
{
|
|
return this->CellVisibility->GetVisibilityById();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
unsigned char vtkStructuredGrid::IsPointVisible(vtkIdType pointId)
|
|
{
|
|
return this->PointVisibility->IsVisible(pointId);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Return non-zero if the specified cell is visible (i.e., not blanked)
|
|
unsigned char vtkStructuredGrid::IsCellVisible(vtkIdType cellId)
|
|
{
|
|
|
|
if ( !this->CellVisibility->IsVisible(cellId) )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// Update dimensions
|
|
this->GetDimensions();
|
|
|
|
int numIds=0;
|
|
vtkIdType ptIds[8];
|
|
int iMin, iMax, jMin, jMax, kMin, kMax;
|
|
vtkIdType d01 = this->Dimensions[0]*this->Dimensions[1];
|
|
iMin = iMax = jMin = jMax = kMin = kMax = 0;
|
|
|
|
switch (this->DataDescription)
|
|
{
|
|
case VTK_EMPTY:
|
|
return 0;
|
|
|
|
case VTK_SINGLE_POINT: // cellId can only be = 0
|
|
numIds = 1;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
break;
|
|
|
|
case VTK_X_LINE:
|
|
iMin = cellId;
|
|
iMax = cellId + 1;
|
|
numIds = 2;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[1] = iMax + jMin*this->Dimensions[0] + kMin*d01;
|
|
break;
|
|
|
|
case VTK_Y_LINE:
|
|
jMin = cellId;
|
|
jMax = cellId + 1;
|
|
numIds = 2;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[1] = iMin + jMax*this->Dimensions[0] + kMin*d01;
|
|
break;
|
|
|
|
case VTK_Z_LINE:
|
|
kMin = cellId;
|
|
kMax = cellId + 1;
|
|
numIds = 2;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[1] = iMin + jMin*this->Dimensions[0] + kMax*d01;
|
|
break;
|
|
|
|
case VTK_XY_PLANE:
|
|
iMin = cellId % (this->Dimensions[0]-1);
|
|
iMax = iMin + 1;
|
|
jMin = cellId / (this->Dimensions[0]-1);
|
|
jMax = jMin + 1;
|
|
numIds = 4;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[1] = iMax + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[2] = iMax + jMax*this->Dimensions[0] + kMin*d01;
|
|
ptIds[3] = iMin + jMax*this->Dimensions[0] + kMin*d01;
|
|
break;
|
|
|
|
case VTK_YZ_PLANE:
|
|
jMin = cellId % (this->Dimensions[1]-1);
|
|
jMax = jMin + 1;
|
|
kMin = cellId / (this->Dimensions[1]-1);
|
|
kMax = kMin + 1;
|
|
numIds = 4;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[1] = iMin + jMax*this->Dimensions[0] + kMin*d01;
|
|
ptIds[2] = iMin + jMax*this->Dimensions[0] + kMax*d01;
|
|
ptIds[3] = iMin + jMin*this->Dimensions[0] + kMax*d01;
|
|
break;
|
|
|
|
case VTK_XZ_PLANE:
|
|
iMin = cellId % (this->Dimensions[0]-1);
|
|
iMax = iMin + 1;
|
|
kMin = cellId / (this->Dimensions[0]-1);
|
|
kMax = kMin + 1;
|
|
numIds = 4;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[1] = iMax + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[2] = iMax + jMin*this->Dimensions[0] + kMax*d01;
|
|
ptIds[3] = iMin + jMin*this->Dimensions[0] + kMax*d01;
|
|
break;
|
|
|
|
case VTK_XYZ_GRID:
|
|
iMin = cellId % (this->Dimensions[0] - 1);
|
|
iMax = iMin + 1;
|
|
jMin = (cellId / (this->Dimensions[0] - 1)) % (this->Dimensions[1] - 1);
|
|
jMax = jMin + 1;
|
|
kMin = cellId / ((this->Dimensions[0] - 1) * (this->Dimensions[1] - 1));
|
|
kMax = kMin + 1;
|
|
numIds = 8;
|
|
ptIds[0] = iMin + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[1] = iMax + jMin*this->Dimensions[0] + kMin*d01;
|
|
ptIds[2] = iMax + jMax*this->Dimensions[0] + kMin*d01;
|
|
ptIds[3] = iMin + jMax*this->Dimensions[0] + kMin*d01;
|
|
ptIds[4] = iMin + jMin*this->Dimensions[0] + kMax*d01;
|
|
ptIds[5] = iMax + jMin*this->Dimensions[0] + kMax*d01;
|
|
ptIds[6] = iMax + jMax*this->Dimensions[0] + kMax*d01;
|
|
ptIds[7] = iMin + jMax*this->Dimensions[0] + kMax*d01;
|
|
break;
|
|
}
|
|
|
|
for (int i=0; i<numIds; i++)
|
|
{
|
|
if ( !this->IsPointVisible(ptIds[i]) )
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Set dimensions of structured grid dataset.
|
|
void vtkStructuredGrid::SetDimensions(int i, int j, int k)
|
|
{
|
|
this->SetExtent(0, i-1, 0, j-1, 0, k-1);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Set dimensions of structured grid dataset.
|
|
void vtkStructuredGrid::SetDimensions(int dim[3])
|
|
{
|
|
this->SetExtent(0, dim[0]-1, 0, dim[1]-1, 0, dim[2]-1);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Get the points defining a cell. (See vtkDataSet for more info.)
|
|
void vtkStructuredGrid::GetCellPoints(vtkIdType cellId, vtkIdList *ptIds)
|
|
{
|
|
// Update dimensions
|
|
this->GetDimensions();
|
|
|
|
int iMin, iMax, jMin, jMax, kMin, kMax;
|
|
vtkIdType d01 = this->Dimensions[0]*this->Dimensions[1];
|
|
|
|
ptIds->Reset();
|
|
iMin = iMax = jMin = jMax = kMin = kMax = 0;
|
|
|
|
switch (this->DataDescription)
|
|
{
|
|
case VTK_EMPTY:
|
|
return;
|
|
|
|
case VTK_SINGLE_POINT: // cellId can only be = 0
|
|
ptIds->SetNumberOfIds(1);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
break;
|
|
|
|
case VTK_X_LINE:
|
|
iMin = cellId;
|
|
iMax = cellId + 1;
|
|
ptIds->SetNumberOfIds(2);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(1, iMax + jMin*this->Dimensions[0] + kMin*d01);
|
|
break;
|
|
|
|
case VTK_Y_LINE:
|
|
jMin = cellId;
|
|
jMax = cellId + 1;
|
|
ptIds->SetNumberOfIds(2);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(1, iMin + jMax*this->Dimensions[0] + kMin*d01);
|
|
break;
|
|
|
|
case VTK_Z_LINE:
|
|
kMin = cellId;
|
|
kMax = cellId + 1;
|
|
ptIds->SetNumberOfIds(2);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(1, iMin + jMin*this->Dimensions[0] + kMax*d01);
|
|
break;
|
|
|
|
case VTK_XY_PLANE:
|
|
iMin = cellId % (this->Dimensions[0]-1);
|
|
iMax = iMin + 1;
|
|
jMin = cellId / (this->Dimensions[0]-1);
|
|
jMax = jMin + 1;
|
|
ptIds->SetNumberOfIds(4);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(1, iMax + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(2, iMax + jMax*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(3, iMin + jMax*this->Dimensions[0] + kMin*d01);
|
|
break;
|
|
|
|
case VTK_YZ_PLANE:
|
|
jMin = cellId % (this->Dimensions[1]-1);
|
|
jMax = jMin + 1;
|
|
kMin = cellId / (this->Dimensions[1]-1);
|
|
kMax = kMin + 1;
|
|
ptIds->SetNumberOfIds(4);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(1, iMin + jMax*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(2, iMin + jMax*this->Dimensions[0] + kMax*d01);
|
|
ptIds->SetId(3, iMin + jMin*this->Dimensions[0] + kMax*d01);
|
|
break;
|
|
|
|
case VTK_XZ_PLANE:
|
|
iMin = cellId % (this->Dimensions[0]-1);
|
|
iMax = iMin + 1;
|
|
kMin = cellId / (this->Dimensions[0]-1);
|
|
kMax = kMin + 1;
|
|
ptIds->SetNumberOfIds(4);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(1, iMax + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(2, iMax + jMin*this->Dimensions[0] + kMax*d01);
|
|
ptIds->SetId(3, iMin + jMin*this->Dimensions[0] + kMax*d01);
|
|
break;
|
|
|
|
case VTK_XYZ_GRID:
|
|
iMin = cellId % (this->Dimensions[0] - 1);
|
|
iMax = iMin + 1;
|
|
jMin = (cellId / (this->Dimensions[0] - 1)) % (this->Dimensions[1] - 1);
|
|
jMax = jMin + 1;
|
|
kMin = cellId / ((this->Dimensions[0] - 1) * (this->Dimensions[1] - 1));
|
|
kMax = kMin + 1;
|
|
ptIds->SetNumberOfIds(8);
|
|
ptIds->SetId(0, iMin + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(1, iMax + jMin*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(2, iMax + jMax*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(3, iMin + jMax*this->Dimensions[0] + kMin*d01);
|
|
ptIds->SetId(4, iMin + jMin*this->Dimensions[0] + kMax*d01);
|
|
ptIds->SetId(5, iMax + jMin*this->Dimensions[0] + kMax*d01);
|
|
ptIds->SetId(6, iMax + jMax*this->Dimensions[0] + kMax*d01);
|
|
ptIds->SetId(7, iMin + jMax*this->Dimensions[0] + kMax*d01);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::SetExtent(int extent[6])
|
|
{
|
|
int description;
|
|
|
|
description = vtkStructuredData::SetExtent(extent, this->Extent);
|
|
|
|
if ( description < 0 ) //improperly specified
|
|
{
|
|
vtkErrorMacro (<< "Bad Extent, retaining previous values");
|
|
}
|
|
|
|
if (description == VTK_UNCHANGED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this->DataDescription = description;
|
|
|
|
this->Modified();
|
|
this->Dimensions[0] = extent[1] - extent[0] + 1;
|
|
this->Dimensions[1] = extent[3] - extent[2] + 1;
|
|
this->Dimensions[2] = extent[5] - extent[4] + 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::SetExtent(int xMin, int xMax,
|
|
int yMin, int yMax,
|
|
int zMin, int zMax)
|
|
{
|
|
int extent[6];
|
|
|
|
extent[0] = xMin; extent[1] = xMax;
|
|
extent[2] = yMin; extent[3] = yMax;
|
|
extent[4] = zMin; extent[5] = zMax;
|
|
|
|
this->SetExtent(extent);
|
|
}
|
|
|
|
int *vtkStructuredGrid::GetDimensions ()
|
|
{
|
|
this->GetDimensions(this->Dimensions);
|
|
return this->Dimensions;
|
|
}
|
|
|
|
void vtkStructuredGrid::GetDimensions (int dim[3])
|
|
{
|
|
const int* extent = this->Extent;
|
|
dim[0] = extent[1] - extent[0] + 1;
|
|
dim[1] = extent[3] - extent[2] + 1;
|
|
dim[2] = extent[5] - extent[4] + 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds,
|
|
vtkIdList *cellIds)
|
|
{
|
|
int numPtIds=ptIds->GetNumberOfIds();
|
|
|
|
// Use special methods for speed
|
|
switch (numPtIds)
|
|
{
|
|
case 0:
|
|
cellIds->Reset();
|
|
return;
|
|
|
|
case 1: case 2: case 4: //vertex, edge, face neighbors
|
|
vtkStructuredData::GetCellNeighbors(cellId, ptIds,
|
|
cellIds, this->GetDimensions());
|
|
break;
|
|
|
|
default:
|
|
this->vtkDataSet::GetCellNeighbors(cellId, ptIds, cellIds);
|
|
}
|
|
|
|
// If blanking, remove blanked cells.
|
|
if ( this->PointVisibility->IsConstrained() )
|
|
{
|
|
int xcellId;
|
|
for (int i=0; i<cellIds->GetNumberOfIds(); i++)
|
|
{
|
|
xcellId = cellIds->GetId(i);
|
|
if ( !this->IsCellVisible(xcellId) )
|
|
{
|
|
cellIds->DeleteId(xcellId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
unsigned long vtkStructuredGrid::GetActualMemorySize()
|
|
{
|
|
return this->vtkPointSet::GetActualMemorySize();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::ShallowCopy(vtkDataObject *dataObject)
|
|
{
|
|
vtkStructuredGrid *grid = vtkStructuredGrid::SafeDownCast(dataObject);
|
|
|
|
if ( grid != NULL )
|
|
{
|
|
this->InternalStructuredGridCopy(grid);
|
|
this->PointVisibility->ShallowCopy(grid->PointVisibility);
|
|
this->CellVisibility->ShallowCopy(grid->CellVisibility);
|
|
}
|
|
|
|
|
|
// Do superclass
|
|
this->vtkPointSet::ShallowCopy(dataObject);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::DeepCopy(vtkDataObject *dataObject)
|
|
{
|
|
vtkStructuredGrid *grid = vtkStructuredGrid::SafeDownCast(dataObject);
|
|
|
|
if ( grid != NULL )
|
|
{
|
|
this->InternalStructuredGridCopy(grid);
|
|
this->PointVisibility->DeepCopy(grid->PointVisibility);
|
|
this->CellVisibility->DeepCopy(grid->CellVisibility);
|
|
}
|
|
|
|
// Do superclass
|
|
this->vtkPointSet::DeepCopy(dataObject);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// This copies all the local variables (but not objects).
|
|
void vtkStructuredGrid::InternalStructuredGridCopy(vtkStructuredGrid *src)
|
|
{
|
|
int idx;
|
|
|
|
this->DataDescription = src->DataDescription;
|
|
|
|
// Update dimensions
|
|
this->GetDimensions();
|
|
|
|
for (idx = 0; idx < 3; ++idx)
|
|
{
|
|
this->Dimensions[idx] = src->Dimensions[idx];
|
|
}
|
|
memcpy(this->Extent, src->GetExtent(), 6*sizeof(int));
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Override this method because of blanking
|
|
void vtkStructuredGrid::GetScalarRange(double range[2])
|
|
{
|
|
vtkDataArray *ptScalars = this->PointData->GetScalars();
|
|
vtkDataArray *cellScalars = this->CellData->GetScalars();
|
|
double ptRange[2];
|
|
double cellRange[2];
|
|
double s;
|
|
int id, num;
|
|
|
|
ptRange[0] = VTK_DOUBLE_MAX;
|
|
ptRange[1] = VTK_DOUBLE_MIN;
|
|
if ( ptScalars )
|
|
{
|
|
num = this->GetNumberOfPoints();
|
|
for (id=0; id < num; id++)
|
|
{
|
|
if ( this->IsPointVisible(id) )
|
|
{
|
|
s = ptScalars->GetComponent(id,0);
|
|
if ( s < ptRange[0] )
|
|
{
|
|
ptRange[0] = s;
|
|
}
|
|
if ( s > ptRange[1] )
|
|
{
|
|
ptRange[1] = s;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
cellRange[0] = ptRange[0];
|
|
cellRange[1] = ptRange[1];
|
|
if ( cellScalars )
|
|
{
|
|
num = this->GetNumberOfCells();
|
|
for (id=0; id < num; id++)
|
|
{
|
|
if ( this->IsCellVisible(id) )
|
|
{
|
|
s = cellScalars->GetComponent(id,0);
|
|
if ( s < cellRange[0] )
|
|
{
|
|
cellRange[0] = s;
|
|
}
|
|
if ( s > cellRange[1] )
|
|
{
|
|
cellRange[1] = s;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
range[0] = (cellRange[0] >= VTK_DOUBLE_MAX ? 0.0 : cellRange[0]);
|
|
range[1] = (cellRange[1] <= VTK_DOUBLE_MIN ? 1.0 : cellRange[1]);
|
|
|
|
this->ComputeTime.Modified();
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::Crop()
|
|
{
|
|
int i, j, k;
|
|
int uExt[6];
|
|
const int* extent = this->Extent;
|
|
int updateExtent[6] = {0,-1,0,-1,0,-1};
|
|
this->GetUpdateExtent(updateExtent);
|
|
|
|
// If the update extent is larger than the extent,
|
|
// we cannot do anything about it here.
|
|
for (i = 0; i < 3; ++i)
|
|
{
|
|
uExt[i*2] = updateExtent[i*2];
|
|
if (uExt[i*2] < extent[i*2])
|
|
{
|
|
uExt[i*2] = extent[i*2];
|
|
}
|
|
uExt[i*2+1] = updateExtent[i*2+1];
|
|
if (uExt[i*2+1] > extent[i*2+1])
|
|
{
|
|
uExt[i*2+1] = extent[i*2+1];
|
|
}
|
|
}
|
|
|
|
// If extents already match, then we need to do nothing.
|
|
if (extent[0] == uExt[0] && extent[1] == uExt[1]
|
|
&& extent[2] == uExt[2] && extent[3] == uExt[3]
|
|
&& extent[4] == uExt[4] && extent[5] == uExt[5])
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
vtkStructuredGrid *newGrid;
|
|
vtkPointData *inPD, *outPD;
|
|
vtkCellData *inCD, *outCD;
|
|
int outSize, jOffset, kOffset;
|
|
vtkIdType idx, newId;
|
|
vtkPoints *newPts, *inPts;
|
|
int inInc1, inInc2;
|
|
|
|
// Get the points. Protect against empty data objects.
|
|
inPts = this->GetPoints();
|
|
if (inPts == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
vtkDebugMacro(<< "Cropping Grid");
|
|
|
|
newGrid = vtkStructuredGrid::New();
|
|
inPD = this->GetPointData();
|
|
inCD = this->GetCellData();
|
|
outPD = newGrid->GetPointData();
|
|
outCD = newGrid->GetCellData();
|
|
|
|
// Allocate necessary objects
|
|
//
|
|
newGrid->SetExtent(uExt);
|
|
outSize = (uExt[1]-uExt[0]+1)*(uExt[3]-uExt[2]+1)*(uExt[5]-uExt[4]+1);
|
|
newPts = inPts->NewInstance();
|
|
newPts->SetDataType(inPts->GetDataType());
|
|
newPts->SetNumberOfPoints(outSize);
|
|
outPD->CopyAllocate(inPD,outSize,outSize);
|
|
outCD->CopyAllocate(inCD,outSize,outSize);
|
|
|
|
// Traverse this data and copy point attributes to output
|
|
newId = 0;
|
|
inInc1 = (extent[1]-extent[0]+1);
|
|
inInc2 = inInc1*(extent[3]-extent[2]+1);
|
|
for ( k=uExt[4]; k <= uExt[5]; ++k)
|
|
{
|
|
kOffset = (k - extent[4]) * inInc2;
|
|
for ( j=uExt[2]; j <= uExt[3]; ++j)
|
|
{
|
|
jOffset = (j - extent[2]) * inInc1;
|
|
for ( i=uExt[0]; i <= uExt[1]; ++i)
|
|
{
|
|
idx = (i - extent[0]) + jOffset + kOffset;
|
|
newPts->SetPoint(newId,inPts->GetPoint(idx));
|
|
outPD->CopyData(inPD, idx, newId++);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Traverse input data and copy cell attributes to output
|
|
newId = 0;
|
|
inInc1 = (extent[1] - extent[0]);
|
|
inInc2 = inInc1*(extent[3] - extent[2]);
|
|
for ( k=uExt[4]; k < uExt[5]; ++k )
|
|
{
|
|
kOffset = (k - extent[4]) * inInc2;
|
|
for ( j=uExt[2]; j < uExt[3]; ++j )
|
|
{
|
|
jOffset = (j - extent[2]) * inInc1;
|
|
for ( i=uExt[0]; i < uExt[1]; ++i )
|
|
{
|
|
idx = (i - extent[0]) + jOffset + kOffset;
|
|
outCD->CopyData(inCD, idx, newId++);
|
|
}
|
|
}
|
|
}
|
|
|
|
this->SetExtent(uExt);
|
|
this->SetPoints(newPts);
|
|
newPts->Delete();
|
|
inPD->ShallowCopy(outPD);
|
|
inCD->ShallowCopy(outCD);
|
|
newGrid->Delete();
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkStructuredGrid::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os,indent);
|
|
|
|
int dim[3];
|
|
this->GetDimensions(dim);
|
|
os << indent << "Dimensions: (" << dim[0] << ", "
|
|
<< dim[1] << ", "
|
|
<< dim[2] << ")\n";
|
|
|
|
const int* extent = this->Extent;
|
|
os << indent << "Extent: " << extent[0] << ", "
|
|
<< extent[1] << ", " << extent[2] << ", "
|
|
<< extent[3] << ", " << extent[4] << ", "
|
|
<< extent[5] << endl;
|
|
|
|
os << ")\n";
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
unsigned char vtkStructuredGrid::GetPointBlanking()
|
|
{
|
|
return this->PointVisibility->IsConstrained();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
unsigned char vtkStructuredGrid::GetCellBlanking()
|
|
{
|
|
return this->PointVisibility->IsConstrained() ||
|
|
this->CellVisibility->IsConstrained();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkStructuredGrid* vtkStructuredGrid::GetData(vtkInformation* info)
|
|
{
|
|
return info? vtkStructuredGrid::SafeDownCast(info->Get(DATA_OBJECT())) : 0;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkStructuredGrid* vtkStructuredGrid::GetData(vtkInformationVector* v, int i)
|
|
{
|
|
return vtkStructuredGrid::GetData(v->GetInformationObject(i));
|
|
}
|
|
|