From ec36e7a4b52e9cc65dde11e699915a3fbda3c188 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Thu, 14 Feb 2019 14:42:56 +0100
Subject: [PATCH] ENH: additional vtk::Tools methods for cloud-related meshes

- the Tools::Vertices() method for creating a vtkPolyData with the
  given points and a corresponding Verts for the points.
---
 src/conversion/vtk/adaptor/foamVtkTools.H  | 13 ++++++++++++
 src/conversion/vtk/adaptor/foamVtkToolsI.H | 24 ++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/src/conversion/vtk/adaptor/foamVtkTools.H b/src/conversion/vtk/adaptor/foamVtkTools.H
index f9cb5c7bcdd..215fb421012 100644
--- a/src/conversion/vtk/adaptor/foamVtkTools.H
+++ b/src/conversion/vtk/adaptor/foamVtkTools.H
@@ -210,6 +210,19 @@ namespace Tools
     template<class Face>
     vtkSmartPointer<vtkCellArray> Faces(const UList<Face>& faces);
 
+    //- Return vtkPolyData of vertices for each point
+    inline vtkSmartPointer<vtkPolyData> Vertices
+    (
+        const UList<point>& pts
+    );
+
+    //- Return vtkPolyData of vertices for each point
+    inline vtkSmartPointer<vtkPolyData> Vertices
+    (
+        const UList<point>& pts,
+        const labelUList& addr
+    );
+
     //- Min/Max of scalar, or mag() of non-scalars. Includes nullptr check.
     inline scalarMinMax rangeOf(vtkDataArray* data);
 
diff --git a/src/conversion/vtk/adaptor/foamVtkToolsI.H b/src/conversion/vtk/adaptor/foamVtkToolsI.H
index 2be7434d1d3..40ffae57e65 100644
--- a/src/conversion/vtk/adaptor/foamVtkToolsI.H
+++ b/src/conversion/vtk/adaptor/foamVtkToolsI.H
@@ -98,6 +98,30 @@ Foam::vtk::Tools::Points(const UList<point>& pts, const labelUList& addr)
 }
 
 
+inline vtkSmartPointer<vtkPolyData>
+Foam::vtk::Tools::Vertices(const UList<point>& pts)
+{
+    auto vtkmesh = vtkSmartPointer<vtkPolyData>::New();
+
+    vtkmesh->SetPoints(Tools::Points(pts));
+    vtkmesh->SetVerts(Tools::identityVertices(pts.size()));
+
+    return vtkmesh;
+}
+
+
+inline vtkSmartPointer<vtkPolyData>
+Foam::vtk::Tools::Vertices(const UList<point>& pts, const labelUList& addr)
+{
+    auto vtkmesh = vtkSmartPointer<vtkPolyData>::New();
+
+    vtkmesh->SetPoints(Tools::Points(pts, addr));
+    vtkmesh->SetVerts(Tools::identityVertices(addr.size()));
+
+    return vtkmesh;
+}
+
+
 inline Foam::scalarMinMax Foam::vtk::Tools::rangeOf(vtkDataArray* data)
 {
     double range[2]{GREAT, -GREAT};
-- 
GitLab