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