提交 c604b9a4 编写于 作者: M Mathieu Westphal

DataModel: Add SupportsGhostArray methods and testing

上级 120b2d9d
...@@ -83,9 +83,11 @@ vtk_add_test_cxx(vtkCommonDataModelCxxTests tests ...@@ -83,9 +83,11 @@ vtk_add_test_cxx(vtkCommonDataModelCxxTests tests
otherCellBoundaries.cxx otherCellBoundaries.cxx
otherCellPosition.cxx otherCellPosition.cxx
otherCellTypes.cxx otherCellTypes.cxx
otherCellGrid.cxx
otherColorTransferFunction.cxx otherColorTransferFunction.cxx
otherEmptyCell.cxx otherEmptyCell.cxx
otherFieldData.cxx otherFieldData.cxx
otherHyperTreeGrid.cxx
otherImageData.cxx otherImageData.cxx
otherPolyData.cxx otherPolyData.cxx
otherRectilinearGrid.cxx otherRectilinearGrid.cxx
......
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
#include "vtkCompositeDataIterator.h"
#include "vtkDataObjectTree.h" #include "vtkLogger.h"
#include "vtkDataObjectTreeIterator.h"
#include "vtkInformation.h"
#include "vtkMultiBlockDataSet.h" #include "vtkMultiBlockDataSet.h"
#include "vtkNew.h" #include "vtkNew.h"
#include "vtkSmartPointer.h"
#include "vtkUniformGrid.h"
#include "vtkUniformGridAMR.h"
#include <iostream>
#include <vector>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int TestCompositeDataSets(int, char*[]) int TestCompositeDataSets(int, char*[])
{ {
int errors = 0; vtkNew<vtkMultiBlockDataSet> mb;
if (!mb->SupportsGhostArray(vtkDataObject::POINT) || !mb->SupportsGhostArray(vtkDataObject::CELL))
{
vtkLog(ERROR, "Unexpected results on SupportsGhostArray");
return EXIT_FAILURE;
}
return (errors); return EXIT_SUCCESS;
} }
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
#include <cassert> #include "vtkDataObject.h"
#include "vtkLogger.h"
#include "vtkNew.h"
#include "vtkPolyData.h"
#include <vtkDataObject.h> bool TestGetAssociationTypeFromString()
int TestGetAssociationTypeFromString()
{ {
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_POINTS") == bool ret = true;
ret &= (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_POINTS") ==
vtkDataObject::FIELD_ASSOCIATION_POINTS); vtkDataObject::FIELD_ASSOCIATION_POINTS);
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_CELLS") == ret &= (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_CELLS") ==
vtkDataObject::FIELD_ASSOCIATION_CELLS); vtkDataObject::FIELD_ASSOCIATION_CELLS);
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_NONE") == ret &= (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_NONE") ==
vtkDataObject::FIELD_ASSOCIATION_NONE); vtkDataObject::FIELD_ASSOCIATION_NONE);
assert(vtkDataObject::GetAssociationTypeFromString( ret &= (vtkDataObject::GetAssociationTypeFromString(
"vtkDataObject::FIELD_ASSOCIATION_POINTS_THEN_CELLS") == "vtkDataObject::FIELD_ASSOCIATION_POINTS_THEN_CELLS") ==
vtkDataObject::FIELD_ASSOCIATION_POINTS_THEN_CELLS); vtkDataObject::FIELD_ASSOCIATION_POINTS_THEN_CELLS);
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_VERTICES") == ret &=
vtkDataObject::FIELD_ASSOCIATION_VERTICES); (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_VERTICES") ==
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_EDGES") == vtkDataObject::FIELD_ASSOCIATION_VERTICES);
ret &= (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_EDGES") ==
vtkDataObject::FIELD_ASSOCIATION_EDGES); vtkDataObject::FIELD_ASSOCIATION_EDGES);
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_ROWS") == ret &= (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD_ASSOCIATION_ROWS") ==
vtkDataObject::FIELD_ASSOCIATION_ROWS); vtkDataObject::FIELD_ASSOCIATION_ROWS);
assert( ret &=
vtkDataObject::GetAssociationTypeFromString("vtkDataObject::POINT") == vtkDataObject::POINT); (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::POINT") == vtkDataObject::POINT);
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::CELL") == vtkDataObject::CELL); ret &=
assert( (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::CELL") == vtkDataObject::CELL);
vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD") == vtkDataObject::FIELD); ret &=
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::POINT_THEN_CELL") == (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::FIELD") == vtkDataObject::FIELD);
ret &= (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::POINT_THEN_CELL") ==
vtkDataObject::POINT_THEN_CELL); vtkDataObject::POINT_THEN_CELL);
assert( ret &=
vtkDataObject::GetAssociationTypeFromString("vtkDataObject::VERTEX") == vtkDataObject::VERTEX); (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::VERTEX") == vtkDataObject::VERTEX);
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::EDGE") == vtkDataObject::EDGE); ret &=
assert(vtkDataObject::GetAssociationTypeFromString("vtkDataObject::ROW") == vtkDataObject::ROW); (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::EDGE") == vtkDataObject::EDGE);
ret &= (vtkDataObject::GetAssociationTypeFromString("vtkDataObject::ROW") == vtkDataObject::ROW);
ret &= (vtkDataObject::GetAssociationTypeFromString(nullptr) == -1);
ret &= (vtkDataObject::GetAssociationTypeFromString("") == -1);
ret &= (vtkDataObject::GetAssociationTypeFromString("INVALID") == -1);
if (!ret)
{
vtkLog(ERROR, "Unexpected GetAssociationTypeFromString result.");
}
return ret;
}
bool TestGhostArray()
{
bool ret = true;
assert(vtkDataObject::GetAssociationTypeFromString(nullptr) == -1); // Test using a concret vtkPolyData instance
assert(vtkDataObject::GetAssociationTypeFromString("") == -1); vtkNew<vtkPolyData> pd;
assert(vtkDataObject::GetAssociationTypeFromString("INVALID") == -1); for (int type = 0; type < vtkDataObject::NUMBER_OF_ATTRIBUTE_TYPES; type++)
{
ret &= (!pd->vtkDataObject::SupportsGhostArray(type));
ret &= (pd->vtkDataObject::GetGhostArray(type) == nullptr);
}
return 0; if (!ret)
{
vtkLog(ERROR, "Unexpected ghost array result.");
}
return ret;
} }
int TestDataObject(int, char*[]) int TestDataObject(int, char*[])
{ {
return TestGetAssociationTypeFromString(); bool ret = true;
ret &= TestGetAssociationTypeFromString();
ret &= TestGhostArray();
return ret ? EXIT_SUCCESS : EXIT_FAILURE;
} }
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
// .NAME
// .SECTION Description
// this program tests vtkCellGrid
#include "vtkCellGrid.h"
#include "vtkLogger.h"
#include "vtkNew.h"
int otherCellGrid(int, char*[])
{
vtkNew<vtkCellGrid> cg;
if (cg->SupportsGhostArray(vtkDataObject::POINT) || !cg->SupportsGhostArray(vtkDataObject::CELL))
{
vtkLog(ERROR, "Unexpected results on SupportsGhostArray");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
// .NAME
// .SECTION Description
// this program tests vtkHyperTreeGrid
#include "vtkHyperTreeGrid.h"
#include "vtkLogger.h"
#include "vtkNew.h"
int otherHyperTreeGrid(int, char*[])
{
vtkNew<vtkHyperTreeGrid> htg;
if (htg->SupportsGhostArray(vtkDataObject::POINT) ||
!htg->SupportsGhostArray(vtkDataObject::CELL))
{
vtkLog(ERROR, "Unexpected results on SupportsGhostArray");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
...@@ -27,6 +27,13 @@ int TestOID(ostream& strm) ...@@ -27,6 +27,13 @@ int TestOID(ostream& strm)
vtkImageData* id2Dyz = vtkImageData::New(); vtkImageData* id2Dyz = vtkImageData::New();
vtkImageData* id3D = vtkImageData::New(); vtkImageData* id3D = vtkImageData::New();
if (!id0D->SupportsGhostArray(vtkDataObject::POINT) ||
!id0D->SupportsGhostArray(vtkDataObject::CELL))
{
std::cerr << "Unexpected results on SupportsGhostArray\n";
return 1;
}
id3D->SetDimensions(20, 20, 20); id3D->SetDimensions(20, 20, 20);
if (id3D->GetCellSize(0) != 8) if (id3D->GetCellSize(0) != 8)
......
...@@ -19,6 +19,18 @@ ...@@ -19,6 +19,18 @@
namespace namespace
{ {
//------------------------------------------------------------------------------
bool TestSupportsGhostArray()
{
vtkNew<vtkPolyData> pd;
if (!pd->SupportsGhostArray(vtkDataObject::POINT) || !pd->SupportsGhostArray(vtkDataObject::CELL))
{
vtkLog(ERROR, "Unexpected results on SupportsGhostArray");
return false;
}
return true;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool TestRemoveGhostCells() bool TestRemoveGhostCells()
{ {
...@@ -168,12 +180,8 @@ bool TestRemoveGhostCells() ...@@ -168,12 +180,8 @@ bool TestRemoveGhostCells()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int otherPolyData(int, char*[]) int otherPolyData(int, char*[])
{ {
int retVal = EXIT_SUCCESS; bool status = true;
status &= TestSupportsGhostArray();
if (!::TestRemoveGhostCells()) status &= TestRemoveGhostCells();
{ return status ? EXIT_SUCCESS : EXIT_FAILURE;
retVal = EXIT_FAILURE;
}
return retVal;
} }
...@@ -26,6 +26,13 @@ int test_rg3d(ostream& strm) ...@@ -26,6 +26,13 @@ int test_rg3d(ostream& strm)
strm << "Testing vtkRectilinearGrid 3D" << endl; strm << "Testing vtkRectilinearGrid 3D" << endl;
vtkNew<vtkRectilinearGrid> rg3D; vtkNew<vtkRectilinearGrid> rg3D;
if (!rg3D->SupportsGhostArray(vtkDataObject::POINT) ||
!rg3D->SupportsGhostArray(vtkDataObject::CELL))
{
std::cerr << "Unexpected results on SupportsGhostArray\n";
return 1;
}
vtkNew<vtkDoubleArray> xdata; vtkNew<vtkDoubleArray> xdata;
vtkNew<vtkDoubleArray> ydata; vtkNew<vtkDoubleArray> ydata;
vtkNew<vtkDoubleArray> zdata; vtkNew<vtkDoubleArray> zdata;
......
...@@ -26,6 +26,13 @@ int TestOSG_0d(ostream& strm) ...@@ -26,6 +26,13 @@ int TestOSG_0d(ostream& strm)
int i, k; int i, k;
vtkNew<vtkStructuredGrid> sg0D; vtkNew<vtkStructuredGrid> sg0D;
if (!sg0D->SupportsGhostArray(vtkDataObject::POINT) ||
!sg0D->SupportsGhostArray(vtkDataObject::CELL))
{
std::cerr << "Unexpected results on SupportsGhostArray\n";
return 1;
}
vtkNew<vtkPoints> onepoints; vtkNew<vtkPoints> onepoints;
for (k = 0; k < 1; k++) for (k = 0; k < 1; k++)
{ {
......
...@@ -22,6 +22,13 @@ int TestOUG_0d(ostream& strm) ...@@ -22,6 +22,13 @@ int TestOUG_0d(ostream& strm)
ug0D->SetDimensions(1, 1, 1); ug0D->SetDimensions(1, 1, 1);
if (!ug0D->SupportsGhostArray(vtkDataObject::POINT) ||
!ug0D->SupportsGhostArray(vtkDataObject::CELL))
{
std::cerr << "Unexpected results on SupportsGhostArray\n";
return EXIT_FAILURE;
}
// Test GetCell // Test GetCell
vtkNew<vtkIdList> ids; vtkNew<vtkIdList> ids;
int cellId; int cellId;
......
...@@ -15,6 +15,12 @@ int otherUnstructuredGrid(int, char*[]) ...@@ -15,6 +15,12 @@ int otherUnstructuredGrid(int, char*[])
int retVal = EXIT_SUCCESS; int retVal = EXIT_SUCCESS;
vtkNew<vtkUnstructuredGrid> ug; vtkNew<vtkUnstructuredGrid> ug;
if (!ug->SupportsGhostArray(vtkDataObject::POINT) || !ug->SupportsGhostArray(vtkDataObject::CELL))
{
vtkLog(ERROR, "Unexpected results on SupportsGhostArray");
retVal = EXIT_FAILURE;
}
vtkUnsignedCharArray* distinctCellTypes = ug->GetDistinctCellTypesArray(); vtkUnsignedCharArray* distinctCellTypes = ug->GetDistinctCellTypesArray();
if (!distinctCellTypes) if (!distinctCellTypes)
{ {
......
...@@ -249,6 +249,16 @@ vtkUnsignedCharArray* vtkCellGrid::GetGhostArray(int type) ...@@ -249,6 +249,16 @@ vtkUnsignedCharArray* vtkCellGrid::GetGhostArray(int type)
return result; return result;
} }
//------------------------------------------------------------------------------
bool vtkCellGrid::SupportsGhostArray(int type)
{
if (type == CELL)
{
return true;
}
return false;
}
int vtkCellGrid::GetAttributeTypeForArray(vtkAbstractArray* arr) int vtkCellGrid::GetAttributeTypeForArray(vtkAbstractArray* arr)
{ {
// First, search through DOF arrays: // First, search through DOF arrays:
......
...@@ -98,6 +98,11 @@ public: ...@@ -98,6 +98,11 @@ public:
*/ */
vtkUnsignedCharArray* GetGhostArray(int type) override; vtkUnsignedCharArray* GetGhostArray(int type) override;
/**
* Returns true if type is CELL, false otherwise
*/
bool SupportsGhostArray(int type) override;
/** /**
* Retrieves the attribute type that an array came from. * Retrieves the attribute type that an array came from.
* This is useful for obtaining which attribute type a input array * This is useful for obtaining which attribute type a input array
......
...@@ -147,6 +147,16 @@ vtkDataObject* vtkCompositeDataSet::GetDataSet(unsigned int flatIndex) ...@@ -147,6 +147,16 @@ vtkDataObject* vtkCompositeDataSet::GetDataSet(unsigned int flatIndex)
return nullptr; return nullptr;
} }
//------------------------------------------------------------------------------
bool vtkCompositeDataSet::SupportsGhostArray(int type)
{
if (type == POINT || type == CELL)
{
return true;
}
return false;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void vtkCompositeDataSet::PrintSelf(ostream& os, vtkIndent indent) void vtkCompositeDataSet::PrintSelf(ostream& os, vtkIndent indent)
{ {
......
...@@ -176,6 +176,11 @@ public: ...@@ -176,6 +176,11 @@ public:
template <class DataSetT = vtkDataSet> template <class DataSetT = vtkDataSet>
static std::vector<DataSetT*> GetDataSets(vtkDataObject* dobj, bool preserveNull = false); static std::vector<DataSetT*> GetDataSets(vtkDataObject* dobj, bool preserveNull = false);
/**
* Returns true for POINT or CELL, false otherwise
*/
bool SupportsGhostArray(int type) override;
protected: protected:
vtkCompositeDataSet(); vtkCompositeDataSet();
~vtkCompositeDataSet() override; ~vtkCompositeDataSet() override;
......
...@@ -664,6 +664,12 @@ vtkUnsignedCharArray* vtkDataObject::GetGhostArray(int type) ...@@ -664,6 +664,12 @@ vtkUnsignedCharArray* vtkDataObject::GetGhostArray(int type)
: nullptr; : nullptr;
} }
//------------------------------------------------------------------------------
bool vtkDataObject::SupportsGhostArray(int vtkNotUsed(type))
{
return false;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
vtkFieldData* vtkDataObject::GetAttributesAsFieldData(int type) vtkFieldData* vtkDataObject::GetAttributesAsFieldData(int type)
{ {
......
...@@ -304,6 +304,20 @@ public: ...@@ -304,6 +304,20 @@ public:
*/ */
virtual vtkUnsignedCharArray* GetGhostArray(int type); virtual vtkUnsignedCharArray* GetGhostArray(int type);
/**
* Returns if this type of data object support ghost array for specified type.
* The type may be:
* <ul>
* <li>POINT - Defined in vtkDataSet subclasses
* <li>CELL - Defined in vtkDataSet subclasses.
* </ul>
* The other attribute types, will return false since
* ghosts arrays are not defined for now outside of point or cell.
* for vtkDataObject, this always return false but subclasses may override
* this method and implement their own logic.
*/
virtual bool SupportsGhostArray(int type);
/** /**
* Returns the attributes of the data object as a vtkFieldData. * Returns the attributes of the data object as a vtkFieldData.
* This returns non-null values in all the same cases as GetAttributes, * This returns non-null values in all the same cases as GetAttributes,
......
...@@ -1067,6 +1067,16 @@ vtkUnsignedCharArray* vtkDataSet::GetGhostArray(int attributeType) ...@@ -1067,6 +1067,16 @@ vtkUnsignedCharArray* vtkDataSet::GetGhostArray(int attributeType)
} }
} }
//------------------------------------------------------------------------------
bool vtkDataSet::SupportsGhostArray(int type)
{
if (type == POINT || type == CELL)
{
return true;
}
return false;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
vtkUnsignedCharArray* vtkDataSet::AllocatePointGhostArray() vtkUnsignedCharArray* vtkDataSet::AllocatePointGhostArray()
{ {
......
...@@ -521,6 +521,11 @@ public: ...@@ -521,6 +521,11 @@ public:
*/ */
vtkUnsignedCharArray* GetGhostArray(int type) override; vtkUnsignedCharArray* GetGhostArray(int type) override;
/**
* Returns true for POINT or CELL, false otherwise
*/
bool SupportsGhostArray(int type) override;
protected: protected:
// Constructor with default bounds (0,1, 0,1, 0,1). // Constructor with default bounds (0,1, 0,1, 0,1).
vtkDataSet(); vtkDataSet();
......
...@@ -1424,6 +1424,16 @@ unsigned long vtkHyperTreeGrid::GetActualMemorySize() ...@@ -1424,6 +1424,16 @@ unsigned long vtkHyperTreeGrid::GetActualMemorySize()
return (this->GetActualMemorySizeBytes() >> 10); return (this->GetActualMemorySizeBytes() >> 10);
} }
//------------------------------------------------------------------------------
bool vtkHyperTreeGrid::SupportsGhostArray(int type)
{
if (type == CELL)
{
return true;
}
return false;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void vtkHyperTreeGrid::GetIndexFromLevelZeroCoordinates( void vtkHyperTreeGrid::GetIndexFromLevelZeroCoordinates(
vtkIdType& treeindex, unsigned int i, unsigned int j, unsigned int k) const vtkIdType& treeindex, unsigned int i, unsigned int j, unsigned int k) const
......
...@@ -532,6 +532,11 @@ public: ...@@ -532,6 +532,11 @@ public:
*/ */
unsigned long GetActualMemorySize() override; unsigned long GetActualMemorySize() override;
/**
* Returns true if type is CELL, false otherwise
*/
bool SupportsGhostArray(int type) override;
private: private:
/** /**
* Recursively initialize pure material mask * Recursively initialize pure material mask
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册