Merge branch 'shape-clip-merge' into 'master'

Update clip and external faces with shape changes

See merge request !151
This commit is contained in:
Jeremy Meredith 2015-08-28 16:06:44 -04:00
commit 3eff4022c4
7 changed files with 79 additions and 77 deletions

@ -51,6 +51,11 @@ public:
<< error.GetMessage() << std::endl;
return 1;
}
catch (std::exception error)
{
std::cout << "***** STL exception throw." << std::endl
<< error.what() << std::endl;
}
catch (...)
{
std::cout << "***** Unidentified exception thrown." << std::endl;

@ -31,6 +31,7 @@ VTKM_THIRDPARTY_PRE_INCLUDE
#include <boost/static_assert.hpp>
VTKM_THIRDPARTY_POST_INCLUDE
#include <exception>
#include <iostream>
#include <sstream>
#include <string>
@ -253,6 +254,11 @@ public:
<< error.GetMessage() << std::endl;
return 1;
}
catch (std::exception error)
{
std::cout << "***** STL exception throw." << std::endl
<< error.what() << std::endl;
}
catch (...)
{
std::cout << "***** Unidentified exception thrown." << std::endl;

@ -253,11 +253,13 @@ public:
{
}
template<typename ScalarsVecType>
template<typename ScalarsVecType, typename CellShapeTag>
VTKM_EXEC_EXPORT
void operator()(const ScalarsVecType &scalars,
vtkm::Id shape, vtkm::Id count,
vtkm::Id& clipTableIdx, ClipStats& stats) const
CellShapeTag shape,
vtkm::Id count,
vtkm::Id& clipTableIdx,
ClipStats& stats) const
{
const vtkm::Id mask[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
@ -268,7 +270,7 @@ public:
mask[i] : 0;
}
vtkm::Id idx = this->ClipTables.GetCaseIndex(shape, caseId);
vtkm::Id idx = this->ClipTables.GetCaseIndex(shape.Id, caseId);
clipTableIdx = idx;
vtkm::Id numberOfCells = this->ClipTables.ValueAt(idx++);
@ -315,10 +317,13 @@ public:
{
}
template<typename ScalarsVecType, typename IndicesVecType, typename Storage>
template<typename CellShapeTag,
typename ScalarsVecType,
typename IndicesVecType,
typename Storage>
VTKM_EXEC_EXPORT
void operator()(
vtkm::Id shape,
CellShapeTag shape,
const ScalarsVecType &scalars,
const IndicesVecType &indices,
vtkm::Id clipTableIdx,
@ -358,7 +363,7 @@ public:
else // edge, new point to be generated by cutting the egde
{
vtkm::Vec<vtkm::IdComponent, 2> edge =
this->ClipTables.GetEdge(shape, entry);
this->ClipTables.GetEdge(shape.Id, entry);
EdgeInterpolation ei;
ei.Vertex1 = indices[edge[0]];

@ -20,8 +20,8 @@
#ifndef vtk_m_worklet_ExternalFaces_h
#define vtk_m_worklet_ExternalFaces_h
#include <vtkm/CellShape.h>
#include <vtkm/Math.h>
#include <vtkm/CellType.h>
#include <vtkm/cont/ArrayHandle.h>
#include <vtkm/cont/ArrayHandleConstant.h>
@ -155,10 +155,10 @@ struct ExternalFaces
VTKM_EXEC_EXPORT
T operator()(const T &cellType) const
{
if (cellType == vtkm::VTKM_TETRA) return 4;
else if (cellType == vtkm::VTKM_PYRAMID) return 5;
else if (cellType == vtkm::VTKM_WEDGE) return 5;
else if (cellType == vtkm::VTKM_HEXAHEDRON) return 6;
if (cellType == vtkm::CELL_SHAPE_TETRA) return 4;
else if (cellType == vtkm::CELL_SHAPE_PYRAMID) return 5;
else if (cellType == vtkm::CELL_SHAPE_WEDGE) return 5;
else if (cellType == vtkm::CELL_SHAPE_HEXAHEDRON) return 6;
else return -1;
}
};
@ -176,16 +176,19 @@ struct ExternalFaces
typedef _2 InputDomain;
VTKM_CONT_EXPORT
GetFace() { };
GetFace() { }
template<typename T, typename FaceValueVecType, typename CellNodeVecType>
template<typename T,
typename FaceValueVecType,
typename CellShapeTag,
typename CellNodeVecType>
VTKM_EXEC_EXPORT
void operator()(const T &cellFaceId,
FaceValueVecType &faceVertices,
const vtkm::Id &cellType,
CellShapeTag shape,
const CellNodeVecType &cellNodeIds) const
{
if (cellType == vtkm::VTKM_TETRA)
if (shape.Id == vtkm::CELL_SHAPE_TETRA)
{
vtkm::IdComponent faceIdTable[12] = {0,1,2,0,1,3,0,2,3,1,2,3};
@ -400,7 +403,7 @@ public:
output_conn.Allocate(3 * output_numExtFaces);
for(int face = 0; face < output_numExtFaces; face++)
{
output_shapes.GetPortalControl().Set(face, vtkm::VTKM_TRIANGLE);
output_shapes.GetPortalControl().Set(face, vtkm::CELL_SHAPE_TRIANGLE);
output_numIndices.GetPortalControl().Set(face, static_cast<vtkm::Id>(3));
output_conn.GetPortalControl().Set(3*face, extFacePortal.Get(face)[0]);
output_conn.GetPortalControl().Set(3*face + 1, extFacePortal.Get(face)[1]);

@ -20,7 +20,7 @@
#ifndef vtk_m_ClipTables_h
#define vtk_m_ClipTables_h
#include <vtkm/CellType.h>
#include <vtkm/CellShape.h>
#include <vtkm/Types.h>
#include <vtkm/cont/ArrayHandle.h>
@ -34,15 +34,15 @@ namespace internal {
// values < 100 represent edges where the corresponding vertex lies
// values >= 100 reresent existing vertices of the input cell (vertex = value - 100)
static vtkm::Id ClipTablesData[] = {
// VTKM_VERTEX
// vtkm::CELL_SHAPE_VERTEX
0, -1, -1, -1, // 0
1, 1, 1, 100, // 1
// VTKM_LINE
// vtkm::CELL_SHAPE_LINE
0, -1, -1, -1, -1, // 0
1, 3, 2, 100, 1, // 1
1, 3, 2, 0, 101, // 2
1, 3, 2, 100, 101, // 3
// VTKM_TRIANGLE
// vtkm::CELL_SHAPE_TRIANGLE
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 5, 3, 0, 2, 100, 0, -1, -1, -1, -1, // 1
1, 5, 3, 1, 0, 101, 0, -1, -1, -1, -1, // 2
@ -51,24 +51,7 @@ static vtkm::Id ClipTablesData[] = {
2, 5, 3, 0, 1, 102, 5, 3, 102, 100, 0, // 5
2, 5, 3, 0, 101, 2, 5, 3, 2, 101, 102, // 6
1, 5, 3, 100, 101, 102, 0, -1, -1, -1, -1, // 7
// VTKM_PIXEL
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 5, 3, 100, 0, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 1
1, 5, 3, 101, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 2
1, 8, 4, 100, 101, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 3
1, 5, 3, 102, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 4
1, 8, 4, 100, 0, 2, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 5
3, 5, 3, 101, 1, 0, 5, 3, 102, 3, 2, 8, 4, 0, 1, 2, 3, // 6
3, 5, 3, 100, 101, 1, 5, 3, 100, 1, 2, 5, 3, 100, 2, 102, -1, // 7
1, 5, 3, 103, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 8
3, 5, 3, 100, 0, 3, 5, 3, 103, 2, 1, 8, 4, 0, 1, 2, 3, // 9
1, 8, 4, 101, 103, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 10
3, 5, 3, 100, 101, 3, 5, 3, 101, 2, 3, 5, 3, 101, 103, 2, -1, // 11
1, 8, 4, 103, 102, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 12
3, 5, 3, 100, 0, 102, 5, 3, 0, 1, 102, 5, 3, 1, 103, 102, -1, // 13
3, 5, 3, 0, 101, 103, 5, 3, 0, 103, 3, 5, 3, 103, 102, 3, -1, // 14
1, 8, 4, 100, 101, 103, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 15
// VTKM_QUAD
// vtkm::CELL_SHAPE_QUAD
0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 5, 3, 100, 0, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 1
1, 5, 3, 101, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 2
@ -85,7 +68,7 @@ static vtkm::Id ClipTablesData[] = {
3, 5, 3, 100, 0, 103, 5, 3, 0, 1, 103, 5, 3, 1, 102, 103, -1, // 13
3, 5, 3, 0, 101, 102, 5, 3, 0, 102, 3, 5, 3, 102, 103, 3, -1, // 14
1, 9, 4, 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 15
// VTKM_TETRA
// vtkm::CELL_SHAPE_TETRA
0, -1, -1, -1, -1, -1, -1, -1, -1, // 0
1, 10, 4, 0, 3, 2, 100, -1, -1, // 1
1, 10, 4, 0, 1, 4, 101, -1, -1, // 2
@ -113,7 +96,7 @@ static vtkm::IdComponent CellEdges[] = {
0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 3, 2, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 2, 3, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 2, 2, 0, 0, 3, 1, 3, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -127,40 +110,40 @@ enum {
EDGE_TABLES_SIZE = sizeof(CellEdges)/sizeof(vtkm::IdComponent)
};
static vtkm::Id ShapeToTableWidthMap[VTKM_NUMBER_OF_CELL_TYPES] = {
-1, // VTKM_EMPTY_CELL
4, // VTKM_VERTEX
-1, // VTKM_POLY_VERTEX
5, // VTKM_LINE
-1, // VTKM_POLY_LINE
11, // VTKM_TRIANGLE
-1, // VTKM_TRIANGLE_STRIP
-1, // VTKM_POLYGON
17, // VTKM_PIXEL
17, // VTKM_QUAD
9, // VTKM_TETRA
-1, // VTKM_VOXEL
-1, // VTKM_HEXAHEDRON
-1, // VTKM_WEDGE
-1 // VTKM_PYRAMID
static vtkm::Id ShapeToTableWidthMap[vtkm::NUMBER_OF_CELL_SHAPES] = {
-1, // vtkm::CELL_SHAPE_EMPTY_CELL
4, // vtkm::CELL_SHAPE_VERTEX
-1, // vtkm::CELL_SHAPE_POLY_VERTEX
5, // vtkm::CELL_SHAPE_LINE
-1, // vtkm::CELL_SHAPE_POLY_LINE
11, // vtkm::CELL_SHAPE_TRIANGLE
-1, // vtkm::CELL_SHAPE_TRIANGLE_STRIP
-1, // vtkm::CELL_SHAPE_POLYGON
-1, // vtkm::CELL_SHAPE_PIXEL
17, // vtkm::CELL_SHAPE_QUAD
9, // vtkm::CELL_SHAPE_TETRA
-1, // vtkm::CELL_SHAPE_VOXEL
-1, // vtkm::CELL_SHAPE_HEXAHEDRON
-1, // vtkm::CELL_SHAPE_WEDGE
-1 // vtkm::CELL_SHAPE_PYRAMID
};
static vtkm::Id ShapeToTableIndexMap[VTKM_NUMBER_OF_CELL_TYPES] = {
-1, // VTKM_EMPTY_CELL
0, // VTKM_VERTEX
-1, // VTKM_POLY_VERTEX
8, // VTKM_LINE
-1, // VTKM_POLY_LINE
28, // VTKM_TRIANGLE
-1, // VTKM_TRIANGLE_STRIP
-1, // VTKM_POLYGON
116, // VTKM_PIXEL
388, // VTKM_QUAD
660, // VTKM_TETRA
-1, // VTKM_VOXEL
-1, // VTKM_HEXAHEDRON
-1, // VTKM_WEDGE
-1 // VTKM_PYRAMID
static vtkm::Id ShapeToTableIndexMap[vtkm::NUMBER_OF_CELL_SHAPES] = {
-1, // vtkm::CELL_SHAPE_EMPTY_CELL
0, // vtkm::CELL_SHAPE_VERTEX
-1, // vtkm::CELL_SHAPE_POLY_VERTEX
8, // vtkm::CELL_SHAPE_LINE
-1, // vtkm::CELL_SHAPE_POLY_LINE
28, // vtkm::CELL_SHAPE_TRIANGLE
-1, // vtkm::CELL_SHAPE_TRIANGLE_STRIP
-1, // vtkm::CELL_SHAPE_POLYGON
-1, // vtkm::CELL_SHAPE_PIXEL
116, // vtkm::CELL_SHAPE_QUAD
388, // vtkm::CELL_SHAPE_TETRA
-1, // vtkm::CELL_SHAPE_VOXEL
-1, // vtkm::CELL_SHAPE_HEXAHEDRON
-1, // vtkm::CELL_SHAPE_WEDGE
-1 // vtkm::CELL_SHAPE_PYRAMID
};
@ -213,9 +196,9 @@ public:
ClipTables()
: ClipTablesArray(vtkm::cont::make_ArrayHandle(ClipTablesData, CLIP_TABLES_SIZE)),
ShapeToTableWidthMapArray(vtkm::cont::make_ArrayHandle(
ShapeToTableWidthMap, VTKM_NUMBER_OF_CELL_TYPES)),
ShapeToTableWidthMap, vtkm::NUMBER_OF_CELL_SHAPES)),
ShapeToTableIndexMapArray(vtkm::cont::make_ArrayHandle(
ShapeToTableIndexMap, VTKM_NUMBER_OF_CELL_TYPES)),
ShapeToTableIndexMap, vtkm::NUMBER_OF_CELL_SHAPES)),
EdgeTablesArray(vtkm::cont::make_ArrayHandle(CellEdges, EDGE_TABLES_SIZE))
{
}

@ -67,7 +67,7 @@ vtkm::cont::DataSet MakeTestDatasetExplicit()
Coord3D(0.0f, 1.0f, 0.0f),
};
static vtkm::Float32 values[] = { 1.0, 2.0, 1.0, 0.0 };
static vtkm::Id shapes[] = { vtkm::VTKM_TRIANGLE, vtkm::VTKM_TRIANGLE };
static vtkm::Id shapes[] = { vtkm::CELL_SHAPE_TRIANGLE, vtkm::CELL_SHAPE_TRIANGLE };
static vtkm::Id numInds[] = { 3, 3 };
static vtkm::Id connectivity[] = { 0, 1, 3, 3, 1, 2 };

@ -102,7 +102,7 @@ void TestExternalFaces()
int index = 0;
for(int j = 0; j < nCells; j++)
{
shapes.GetPortalControl().Set(j, static_cast<vtkm::Id>(vtkm::VTKM_TETRA));
shapes.GetPortalControl().Set(j, static_cast<vtkm::Id>(vtkm::CELL_SHAPE_TETRA));
numIndices.GetPortalControl().Set(j, 4);
for(int k = 0; k < 4; k++)
conn.GetPortalControl().Set(index++, static_cast<vtkm::Id>(cellVerts[j][k]));