From f4dfa5f4936875de9707e045a8bb4270f17c9937 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Tue, 19 Mar 2019 10:03:14 +0100 Subject: [PATCH] ENH: support VTK multi-piece output for surfaces --- .../vtk/write/foamVtkSurfaceWriter.C | 39 ++++++++++++------- .../vtk/write/foamVtkSurfaceWriter.H | 8 +++- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/fileFormats/vtk/write/foamVtkSurfaceWriter.C b/src/fileFormats/vtk/write/foamVtkSurfaceWriter.C index f21ca93f7e..edfc7babc4 100644 --- a/src/fileFormats/vtk/write/foamVtkSurfaceWriter.C +++ b/src/fileFormats/vtk/write/foamVtkSurfaceWriter.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2018-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,11 +32,11 @@ License void Foam::vtk::surfaceWriter::beginPiece() { // Basic sizes - nLocalPoints_ = points_.size(); - nLocalFaces_ = faces_.size(); + nLocalPoints_ = points_.get().size(); + nLocalFaces_ = faces_.get().size(); nLocalVerts_ = 0; - for (const face& f : faces_) + for (const face& f : faces_.get()) { nLocalVerts_ += f.size(); } @@ -90,7 +90,7 @@ void Foam::vtk::surfaceWriter::writePoints() if (parallel_ ? Pstream::master() : true) { { - vtk::writeList(format(), points_); + vtk::writeList(format(), points_.get()); } } @@ -128,7 +128,7 @@ void Foam::vtk::surfaceWriter::writePoints() ); { - toMaster << points_; + toMaster << points_.get(); } } } @@ -182,7 +182,7 @@ void Foam::vtk::surfaceWriter::writePolysLegacy(const label pointOffset) label off = pointOffset; { - for (const face& f : faces_) + for (const face& f : faces_.get()) { *iter = f.size(); // The size prefix ++iter; @@ -193,7 +193,7 @@ void Foam::vtk::surfaceWriter::writePolysLegacy(const label pointOffset) ++iter; } } - // off += points_.size(); + // off += points_.get().size(); } } @@ -251,7 +251,7 @@ void Foam::vtk::surfaceWriter::writePolys(const label pointOffset) label off = pointOffset; { - for (const face& f : faces_) + for (const face& f : faces_.get()) { for (const label pfi : f) { @@ -259,7 +259,7 @@ void Foam::vtk::surfaceWriter::writePolys(const label pointOffset) ++iter; } } - // off += points_.size(); + // off += points_.get().size(); } } @@ -312,7 +312,7 @@ void Foam::vtk::surfaceWriter::writePolys(const label pointOffset) auto iter = vertOffsets.begin(); { - for (const face& f : faces_) + for (const face& f : faces_.get()) { off += f.size(); // End offset *iter = off; @@ -355,8 +355,8 @@ Foam::vtk::surfaceWriter::surfaceWriter ) : vtk::fileWriter(vtk::fileTag::POLY_DATA, opts), - points_(points), - faces_(faces), + points_(std::cref(points)), + faces_(std::cref(faces)), numberOfPoints_(0), numberOfCells_(0), nLocalPoints_(0), @@ -473,4 +473,17 @@ void Foam::vtk::surfaceWriter::writeTimeValue() } +void Foam::vtk::surfaceWriter::piece +( + const pointField& points, + const faceList& faces +) +{ + endPiece(); + + points_ = std::cref(points); + faces_ = std::cref(faces); +} + + // ************************************************************************* // diff --git a/src/fileFormats/vtk/write/foamVtkSurfaceWriter.H b/src/fileFormats/vtk/write/foamVtkSurfaceWriter.H index 45e240734b..2a7a289495 100644 --- a/src/fileFormats/vtk/write/foamVtkSurfaceWriter.H +++ b/src/fileFormats/vtk/write/foamVtkSurfaceWriter.H @@ -51,6 +51,7 @@ SourceFiles #include "pointField.H" #include "faceList.H" #include "instant.H" +#include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -70,10 +71,10 @@ class surfaceWriter // Private Member Data //- Reference to the points - const pointField& points_; + std::reference_wrapper points_; //- Reference to the faces - const faceList& faces_; + std::reference_wrapper faces_; //- The numer of field points for the current Piece label numberOfPoints_; @@ -209,6 +210,9 @@ public: //- Write the currently set time as "TimeValue" FieldData void writeTimeValue(); + //- Reset point, face references to begin a new piece + void piece(const pointField& points, const faceList& faces); + // Write