From 24c8f5a597db90804c8b15b9993db60c6abd328a Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Sun, 16 Dec 2018 13:52:16 +0100 Subject: [PATCH] ENH: arbitrary face types for vtk::Tools::Patch::faces() - the patch could use face or triFace (labelledTriFace) - avoid trigger patch faceNormals unnecessarily --- .../vtk/adaptor/foamVtkToolsTemplates.C | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C b/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C index 5049e67ff88..77ede96916e 100644 --- a/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C +++ b/src/conversion/vtk/adaptor/foamVtkToolsTemplates.C @@ -65,11 +65,11 @@ template<class PatchType> vtkSmartPointer<vtkCellArray> Foam::vtk::Tools::Patch::faces(const PatchType& p) { - // Faces as polygons - const faceList& fcs = p.localFaces(); + // List of faces or triFaces + const auto& fcs = p.localFaces(); label nAlloc = fcs.size(); - for (const face& f : fcs) + for (const auto& f : fcs) { nAlloc += f.size(); } @@ -81,7 +81,7 @@ Foam::vtk::Tools::Patch::faces(const PatchType& p) // Cell connectivity for polygons // [size, verts..., size, verts... ] auto iter = list.begin(); - for (const face& f : fcs) + for (const auto& f : fcs) { *(iter++) = f.size(); @@ -118,15 +118,24 @@ Foam::vtk::Tools::Patch::faceNormals(const PatchType& p) array->SetNumberOfTuples(p.size()); // Unit normals for patch faces. - // If not already cached, could be more memory efficient to loop over - // the individual faces instead. - - const vectorField& norms = p.faceNormals(); + // Cached values if available or loop over faces (avoid triggering cache) vtkIdType faceId = 0; - for (const vector& n : norms) + + if (p.hasFaceNormals()) + { + for (const vector& n : p.faceNormals()) + { + array->SetTuple(faceId++, n.v_); + } + } + else { - array->SetTuple(faceId++, n.v_); + for (const auto& f : p) + { + const vector n(f.unitNormal(p.points())); + array->SetTuple(faceId++, n.v_); + } } return array; -- GitLab