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 #ifndef vtk_m_rendering_raytracing_MeshConnectivityBuilder_h
11 #define vtk_m_rendering_raytracing_MeshConnectivityBuilder_h
12 
13 #include <vtkm/cont/DataSet.h>
14 #include <vtkm/rendering/raytracing/MeshConnectivityContainers.h>
15 
16 namespace vtkm
17 {
18 namespace rendering
19 {
20 namespace raytracing
21 {
22 
23 class MeshConnectivityBuilder
24 {
25 public:
26   MeshConnectivityBuilder();
27   ~MeshConnectivityBuilder();
28 
29   VTKM_CONT
30   MeshConnContainer* BuildConnectivity(const vtkm::cont::DynamicCellSet& cellset,
31                                        const vtkm::cont::CoordinateSystem& coordinates);
32 
33   VTKM_CONT
34   vtkm::cont::ArrayHandle<vtkm::Id4> ExternalTrianglesStructured(
35     vtkm::cont::CellSetStructured<3>& cellSetStructured);
36 
37   vtkm::cont::ArrayHandle<vtkm::Id> GetFaceConnectivity();
38 
39   vtkm::cont::ArrayHandle<vtkm::Id> GetFaceOffsets();
40 
41   vtkm::cont::ArrayHandle<vtkm::Id4> GetTriangles();
42 
43 protected:
44   VTKM_CONT
45   void BuildConnectivity(vtkm::cont::CellSetSingleType<>& cellSetUnstructured,
46                          const vtkm::cont::CoordinateSystem::MultiplexerArrayType& coordinates,
47                          vtkm::Bounds coordsBounds);
48 
49   VTKM_CONT
50   void BuildConnectivity(vtkm::cont::CellSetExplicit<>& cellSetUnstructured,
51                          const vtkm::cont::CoordinateSystem::MultiplexerArrayType& coordinates,
52                          vtkm::Bounds coordsBounds);
53 
54   vtkm::cont::ArrayHandle<vtkm::Id> FaceConnectivity;
55   vtkm::cont::ArrayHandle<vtkm::Id> FaceOffsets;
56   vtkm::cont::ArrayHandle<vtkm::Id4> Triangles;
57 };
58 }
59 }
60 } //namespace vtkm::rendering::raytracing
61 #endif
62