From bc474bd56805b3a9f35b40a7157b6a89c98f4e9c Mon Sep 17 00:00:00 2001 From: Dave Pugmire Date: Wed, 4 Nov 2015 07:45:51 -0500 Subject: [PATCH] Add iterative explicit dataset builder class. --- vtkm/cont/DataSetBuilderExplicit.h | 89 +++++++++++++++++++++++++++++ vtkm/cont/testing/MakeTestDataSet.h | 34 +++++++++++ 2 files changed, 123 insertions(+) diff --git a/vtkm/cont/DataSetBuilderExplicit.h b/vtkm/cont/DataSetBuilderExplicit.h index b68c8b5cf..2613fdb9f 100644 --- a/vtkm/cont/DataSetBuilderExplicit.h +++ b/vtkm/cont/DataSetBuilderExplicit.h @@ -165,6 +165,95 @@ DataSetBuilderExplicit::Create(const std::vector > &coords, return dataSet; } +class DataSetIterativeBuilderExplicit +{ +public: + VTKM_CONT_EXPORT + DataSetIterativeBuilderExplicit() {} + + VTKM_CONT_EXPORT + void Begin(const std::string &_coordNm="coords", + const std::string &_cellNm="cells") + { + coordNm = _coordNm; + cellNm = _cellNm; + points.resize(0); + shapes.resize(0); + numIdx.resize(0); + connectivity.resize(0); + } + + //Define points. + VTKM_CONT_EXPORT + vtkm::cont::DataSet Create(); + + VTKM_CONT_EXPORT + vtkm::Id AddPoint(const vtkm::Vec &pt) + { + points.push_back(pt); + vtkm::Id id = static_cast(points.size()); + return id; + } + VTKM_CONT_EXPORT + vtkm::Id AddPoint(const vtkm::Float32 &x, + const vtkm::Float32 &y, + const vtkm::Float32 &z=0) + { + points.push_back(vtkm::make_Vec(x,y,z)); + vtkm::Id id = static_cast(points.size()); + return id; + } + + template + VTKM_CONT_EXPORT + vtkm::Id AddPoint(const T &x, const T &y, const T &z=0) + { + return AddPoint(static_cast(x), + static_cast(y), + static_cast(z)); + } + + template + VTKM_CONT_EXPORT + vtkm::Id AddPoint(const vtkm::Vec &pt) + { + return AddPoint(static_cast >(pt)); + } + + //Define cells. + VTKM_CONT_EXPORT + void AddCell(const vtkm::UInt8 &shape, const std::vector &conn) + { + shapes.push_back(shape); + numIdx.push_back(static_cast(conn.size())); + connectivity.insert(connectivity.end(), conn.begin(), conn.end()); + } + + VTKM_CONT_EXPORT + void AddCell(const vtkm::UInt8 &shape, const vtkm::Id *conn, const vtkm::IdComponent &n) + { + shapes.push_back(shape); + numIdx.push_back(n); + for (int i = 0; i < n; i++) + connectivity.push_back(conn[i]); + } + +private: + std::string coordNm, cellNm; + + std::vector > points; + std::vector shapes; + std::vector numIdx; + std::vector connectivity; +}; + +vtkm::cont::DataSet +DataSetIterativeBuilderExplicit::Create() +{ + DataSetBuilderExplicit dsb; + return dsb.Create(points, shapes, numIdx, connectivity, coordNm, cellNm); +} + } } diff --git a/vtkm/cont/testing/MakeTestDataSet.h b/vtkm/cont/testing/MakeTestDataSet.h index 12389a511..0b8f0e09b 100644 --- a/vtkm/cont/testing/MakeTestDataSet.h +++ b/vtkm/cont/testing/MakeTestDataSet.h @@ -46,6 +46,8 @@ public: VTKM_CONT_EXPORT vtkm::cont::DataSet Make3DExplicitDataSet0(); VTKM_CONT_EXPORT + vtkm::cont::DataSet Make3DExplicitDataSet1(); + VTKM_CONT_EXPORT vtkm::cont::DataSet Make3DExplicitDataSetCowNose(double *pBounds = NULL); }; @@ -140,6 +142,38 @@ MakeTestDataSet::Make3DExplicitDataSet0() return dataSet; } +vtkm::cont::DataSet +MakeTestDataSet::Make3DExplicitDataSet1() +{ + vtkm::cont::DataSet dataSet; + vtkm::cont::DataSetIterativeBuilderExplicit dsb; + vtkm::Id id0, id1, id2, id3, id4; + + dsb.Begin("coords", "cells"); + + id0 = dsb.AddPoint(0,0,0); + id1 = dsb.AddPoint(1,0,0); + id2 = dsb.AddPoint(1,1,0); + id3 = dsb.AddPoint(2,1,0); + id4 = dsb.AddPoint(2,2,0); + + vtkm::Id ids0[3] = {id0, id1, id2}; + dsb.AddCell(vtkm::CELL_SHAPE_TRIANGLE, ids0, 3); + + vtkm::Id ids1[4] = {id2, id1, id3, id4}; + dsb.AddCell(vtkm::CELL_SHAPE_QUAD, ids1, 4); + dataSet = dsb.Create(); + + vtkm::Float32 vars[5] = {10.1f, 20.1f, 30.2f, 40.2f, 50.3f}; + vtkm::Float32 cellvar[2] = {100.1f, 100.2f}; + + vtkm::cont::DataSetFieldAdd dsf; + dsf.AddPointField(dataSet, "pointvar", vars, 5); + dsf.AddCellField(dataSet, "cellvar", cellvar, 2, "cells"); + + return dataSet; +} + /* vtkm::cont::DataSet MakeTestDataSet::Make3DExplicitDataSet1()