1 //============================================================================
2 //  Copyright (c) Kitware, Inc.
3 //  All rights reserved.
4 //  See LICENSE.txt for details.
5 //
6 //  This software is distributed WITHOUT ANY WARRANTY; without even
7 //  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 //  PURPOSE.  See the above copyright notice for more information.
9 //============================================================================
10 
11 #include <vtkm/cont/DataSetBuilderExplicit.h>
12 
13 namespace vtkm
14 {
15 namespace cont
16 {
17 
18 VTKM_CONT
DataSetBuilderExplicitIterative()19 DataSetBuilderExplicitIterative::DataSetBuilderExplicitIterative() {}
20 
21 
22 VTKM_CONT
Begin(const std::string & coordName)23 void DataSetBuilderExplicitIterative::Begin(const std::string& coordName)
24 {
25   this->coordNm = coordName;
26   this->points.resize(0);
27   this->shapes.resize(0);
28   this->numIdx.resize(0);
29   this->connectivity.resize(0);
30 }
31 
32 //Define points.
33 VTKM_CONT
Create()34 vtkm::cont::DataSet DataSetBuilderExplicitIterative::Create()
35 {
36   DataSetBuilderExplicit dsb;
37   return dsb.Create(points, shapes, numIdx, connectivity, coordNm);
38 }
39 
40 VTKM_CONT
AddPoint(const vtkm::Vec3f & pt)41 vtkm::Id DataSetBuilderExplicitIterative::AddPoint(const vtkm::Vec3f& pt)
42 {
43   points.push_back(pt);
44   vtkm::Id id = static_cast<vtkm::Id>(points.size());
45   //ID is zero-based.
46   return id - 1;
47 }
48 
49 VTKM_CONT
AddPoint(const vtkm::FloatDefault & x,const vtkm::FloatDefault & y,const vtkm::FloatDefault & z)50 vtkm::Id DataSetBuilderExplicitIterative::AddPoint(const vtkm::FloatDefault& x,
51                                                    const vtkm::FloatDefault& y,
52                                                    const vtkm::FloatDefault& z)
53 {
54   points.push_back(vtkm::make_Vec(x, y, z));
55   vtkm::Id id = static_cast<vtkm::Id>(points.size());
56   //ID is zero-based.
57   return id - 1;
58 }
59 
60 //Define cells.
61 VTKM_CONT
AddCell(vtkm::UInt8 shape)62 void DataSetBuilderExplicitIterative::AddCell(vtkm::UInt8 shape)
63 {
64   this->shapes.push_back(shape);
65   this->numIdx.push_back(0);
66 }
67 
68 VTKM_CONT
AddCell(const vtkm::UInt8 & shape,const std::vector<vtkm::Id> & conn)69 void DataSetBuilderExplicitIterative::AddCell(const vtkm::UInt8& shape,
70                                               const std::vector<vtkm::Id>& conn)
71 {
72   this->shapes.push_back(shape);
73   this->numIdx.push_back(static_cast<vtkm::IdComponent>(conn.size()));
74   connectivity.insert(connectivity.end(), conn.begin(), conn.end());
75 }
76 
77 VTKM_CONT
AddCell(const vtkm::UInt8 & shape,const vtkm::Id * conn,const vtkm::IdComponent & n)78 void DataSetBuilderExplicitIterative::AddCell(const vtkm::UInt8& shape,
79                                               const vtkm::Id* conn,
80                                               const vtkm::IdComponent& n)
81 {
82   this->shapes.push_back(shape);
83   this->numIdx.push_back(n);
84   for (int i = 0; i < n; i++)
85   {
86     connectivity.push_back(conn[i]);
87   }
88 }
89 
90 VTKM_CONT
AddCellPoint(vtkm::Id pointIndex)91 void DataSetBuilderExplicitIterative::AddCellPoint(vtkm::Id pointIndex)
92 {
93   VTKM_ASSERT(this->numIdx.size() > 0);
94   this->connectivity.push_back(pointIndex);
95   this->numIdx.back() += 1;
96 }
97 }
98 } // end namespace vtkm::cont
99