From b4f6484ddfd9c9011cdff7e04b3d9957536139a0 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Sun, 7 May 2017 16:58:44 +0200 Subject: [PATCH] ENH: use faceTraits for managing differences between face representations --- src/surfMesh/MeshedSurface/MeshedSurface.C | 64 +++++++---- src/surfMesh/MeshedSurface/MeshedSurface.H | 47 ++++---- .../MeshedSurface/MeshedSurfaceCore.C | 6 +- src/surfMesh/MeshedSurface/MeshedSurfaceI.H | 103 ------------------ src/surfMesh/MeshedSurface/MeshedSurfaceIO.C | 7 +- src/surfMesh/MeshedSurface/MeshedSurfaceNew.C | 5 +- .../MeshedSurfaceProxy/MeshedSurfaceProxy.C | 58 +++++----- .../MeshedSurfaceProxy/MeshedSurfaceProxy.H | 30 +++-- .../UnsortedMeshedSurface.C | 7 +- .../UnsortedMeshedSurfaceNew.C | 5 +- .../surfaceFormats/ac3d/AC3DsurfaceFormat.C | 9 +- .../surfaceFormats/gts/GTSsurfaceFormat.C | 12 +- .../surfaceFormats/nas/NASsurfaceFormat.C | 33 +++--- .../surfaceFormats/obj/OBJsurfaceFormat.C | 8 +- .../surfaceFormats/off/OFFsurfaceFormat.C | 10 +- .../starcd/STARCDsurfaceFormat.C | 5 +- .../surfaceFormats/stl/STLsurfaceFormat.C | 4 +- .../surfaceFormats/tri/TRIsurfaceFormat.C | 6 +- .../surfaceFormats/vtk/VTKsurfaceFormat.C | 7 +- 19 files changed, 178 insertions(+), 248 deletions(-) delete mode 100644 src/surfMesh/MeshedSurface/MeshedSurfaceI.H diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C index 0606860e64a..41d0418a3b7 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.C +++ b/src/surfMesh/MeshedSurface/MeshedSurface.C @@ -33,24 +33,17 @@ License #include "polyMesh.H" #include "surfMesh.H" #include "primitivePatch.H" +#include "faceTraits.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -template<class Face> -inline bool Foam::MeshedSurface<Face>::isTri() -{ - return false; -} - - template<class Face> Foam::wordHashSet Foam::MeshedSurface<Face>::readTypes() { return wordHashSet(*fileExtensionConstructorTablePtr_); } - template<class Face> Foam::wordHashSet Foam::MeshedSurface<Face>::writeTypes() { @@ -116,25 +109,34 @@ void Foam::MeshedSurface<Face>::write const fileName& name, const MeshedSurface<Face>& surf ) +{ + write(name, name.ext(), surf); +} + + +template<class Face> +void Foam::MeshedSurface<Face>::write +( + const fileName& name, + const word& ext, + const MeshedSurface<Face>& surf +) { if (debug) { InfoInFunction << "Writing to " << name << endl; } - const word ext = name.ext(); - - typename writefileExtensionMemberFunctionTable::iterator mfIter = - writefileExtensionMemberFunctionTablePtr_->find(ext); + auto mfIter = writefileExtensionMemberFunctionTablePtr_->find(ext); - if (mfIter == writefileExtensionMemberFunctionTablePtr_->end()) + if (!mfIter.found()) { // No direct writer, delegate to proxy if possible const wordHashSet& delegate = ProxyType::writeTypes(); if (delegate.found(ext)) { - MeshedSurfaceProxy<Face>(surf).write(name); + MeshedSurfaceProxy<Face>(surf).write(name, ext); } else { @@ -850,6 +852,11 @@ bool Foam::MeshedSurface<Face>::checkFaces template<class Face> Foam::label Foam::MeshedSurface<Face>::nTriangles() const { + if (faceTraits<Face>::isTri()) + { + return ParentType::size(); + } + return nTriangles ( const_cast<List<label>&>(List<label>::null()) @@ -905,10 +912,18 @@ Foam::label Foam::MeshedSurface<Face>::nTriangles template<class Face> Foam::label Foam::MeshedSurface<Face>::triangulate() { - return triangulate - ( - const_cast<List<label>&>(List<label>::null()) - ); + if (faceTraits<Face>::isTri()) + { + // Inplace triangulation of triFace/labelledTri surface = no-op + return 0; + } + else + { + return triangulate + ( + const_cast<List<label>&>(List<label>::null()) + ); + } } @@ -918,6 +933,17 @@ Foam::label Foam::MeshedSurface<Face>::triangulate List<label>& faceMapOut ) { + if (faceTraits<Face>::isTri()) + { + // Inplace triangulation of triFace/labelledTri surface = no-op + if (notNull(faceMapOut)) + { + faceMapOut.clear(); + } + + return 0; + } + label nTri = 0; label maxTri = 0; // the maximum number of triangles for any single face List<Face>& faceLst = this->storedFaces(); @@ -966,7 +992,7 @@ Foam::label Foam::MeshedSurface<Face>::triangulate { label fp1 = f.fcIndex(fp); - newFaces[nTri] = triFace(f[0], f[fp], f[fp1]); + newFaces[nTri] = Face{f[0], f[fp], f[fp1]}; faceMap[nTri] = facei; nTri++; } diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.H b/src/surfMesh/MeshedSurface/MeshedSurface.H index 513a813597c..aca6e18647f 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.H +++ b/src/surfMesh/MeshedSurface/MeshedSurface.H @@ -186,9 +186,6 @@ public: // Static - //- Face storage only handles triangulated faces - inline static bool isTri(); - //- Can we read this file format? static bool canRead(const fileName&, const bool verbose=false); @@ -210,36 +207,36 @@ public: //- Construct by transferring components (points, faces, zones). MeshedSurface ( - const Xfer<pointField>&, - const Xfer<List<Face>>&, - const Xfer<surfZoneList>& + const Xfer<pointField>& pointLst, + const Xfer<List<Face>>& faceLst, + const Xfer<surfZoneList>& zoneLst ); //- Construct by transferring components (points, faces). // Use zone information if available MeshedSurface ( - const Xfer<pointField>&, - const Xfer<List<Face>>&, + const Xfer<pointField>& pointLst, + const Xfer<List<Face>>& faceLst, const labelUList& zoneSizes = labelUList(), const UList<word>& zoneNames = UList<word>() ); //- Construct as copy - MeshedSurface(const MeshedSurface&); + MeshedSurface(const MeshedSurface& surf); //- Construct from a UnsortedMeshedSurface - MeshedSurface(const UnsortedMeshedSurface<Face>&); + MeshedSurface(const UnsortedMeshedSurface<Face>& surf); //- Construct from a boundary mesh with local points/faces MeshedSurface ( - const polyBoundaryMesh&, + const polyBoundaryMesh& bMesh, const bool globalPoints=false ); //- Construct from a surfMesh - MeshedSurface(const surfMesh&); + MeshedSurface(const surfMesh& mesh); //- Construct by transferring the contents from a UnsortedMeshedSurface MeshedSurface(const Xfer<UnsortedMeshedSurface<Face>>&); @@ -248,18 +245,18 @@ public: MeshedSurface(const Xfer<MeshedSurface<Face>>&); //- Construct from file name (uses extension to determine type) - MeshedSurface(const fileName&); + MeshedSurface(const fileName& name); //- Construct from file name (uses extension to determine type) - MeshedSurface(const fileName&, const word& ext); + MeshedSurface(const fileName& name, const word& ext); //- Construct from Istream - MeshedSurface(Istream&); + MeshedSurface(Istream& is); //- Construct from database MeshedSurface ( - const Time&, + const Time& t, const word& surfName = word::null ); @@ -283,7 +280,7 @@ public: //- Select constructed from filename (explicit extension) static autoPtr<MeshedSurface> New ( - const fileName&, + const fileName& name, const word& ext ); @@ -310,11 +307,19 @@ public: (name, surf) ); - //- Write to file + //- Write to file, selecting writer based on its extension static void write ( - const fileName&, - const MeshedSurface<Face>& + const fileName& name, + const MeshedSurface<Face>& surf + ); + + //- Write to file, selecting writer based on the given extension + static void write + ( + const fileName& name, + const word& ext, + const MeshedSurface<Face>& surf ); @@ -563,8 +568,6 @@ bool MeshedSurface<labelledTri>::addZonesToFaces(); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "MeshedSurfaceI.H" - #ifdef NoRepository #include "MeshedSurface.C" #endif diff --git a/src/surfMesh/MeshedSurface/MeshedSurfaceCore.C b/src/surfMesh/MeshedSurface/MeshedSurfaceCore.C index 8640b6e5aeb..4a9bb6cac19 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurfaceCore.C +++ b/src/surfMesh/MeshedSurface/MeshedSurfaceCore.C @@ -50,7 +50,7 @@ namespace Foam ) { // First triangulate - // - slightly wasteful for space, but manages adjusts the zones too! + // - slightly wasteful for space, but adjusts the zones too! surf.triangulate(); this->storedPoints().transfer(surf.storedPoints()); this->storedZones().transfer(surf.storedZones()); @@ -81,12 +81,12 @@ namespace Foam ) { // First triangulate - // - slightly wasteful for space, but manages adjusts the zones too! + // - slightly wasteful for space, but adjusts the zones too! surf.triangulate(); this->storedPoints().transfer(surf.storedPoints()); this->storedZones().transfer(surf.storedZones()); - // transcribe from face -> triFace + // transcribe from face -> labelledTri (via triFace) const List<face>& origFaces = surf.surfFaces(); List<labelledTri> newFaces(origFaces.size()); forAll(origFaces, facei) diff --git a/src/surfMesh/MeshedSurface/MeshedSurfaceI.H b/src/surfMesh/MeshedSurface/MeshedSurfaceI.H deleted file mode 100644 index a7415f7b4b6..00000000000 --- a/src/surfMesh/MeshedSurface/MeshedSurfaceI.H +++ /dev/null @@ -1,103 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// A triFace surface only handles triangulated faces -template<> -inline bool MeshedSurface<triFace>::isTri() -{ - return true; -} - - -// A labelledTri surface only handles triangulated faces -template<> -inline bool MeshedSurface<labelledTri>::isTri() -{ - return true; -} - - -// Number of triangles for a triFace surface -template<> -inline label MeshedSurface<triFace>::nTriangles() const -{ - return ParentType::size(); -} - -// Number of triangles for a labelledTri surface -template<> -inline label MeshedSurface<labelledTri>::nTriangles() const -{ - return ParentType::size(); -} - - -// Inplace triangulation of triFace surface = no-op -template<> -inline label MeshedSurface<triFace>::triangulate() -{ - return 0; -} - -// Inplace triangulation of labelledTri surface = no-op -template<> -inline label MeshedSurface<labelledTri>::triangulate() -{ - return 0; -} - -// Inplace triangulation of triFace surface (with face map) = no-op -template<> -inline label MeshedSurface<triFace>::triangulate(List<label>& faceMap) -{ - if (notNull(faceMap)) - { - faceMap.clear(); - } - return 0; -} - -// Inplace triangulation of labelledTri surface (with face map) = no-op -template<> -inline label MeshedSurface<labelledTri>::triangulate(List<label>& faceMap) -{ - if (notNull(faceMap)) - { - faceMap.clear(); - } - return 0; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/surfMesh/MeshedSurface/MeshedSurfaceIO.C b/src/surfMesh/MeshedSurface/MeshedSurfaceIO.C index 9d8c5dd0912..a8c8e4c7a32 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurfaceIO.C +++ b/src/surfMesh/MeshedSurface/MeshedSurfaceIO.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -25,6 +25,7 @@ License #include "MeshedSurface.H" #include "boundBox.H" +#include "faceTraits.H" #include "Istream.H" #include "Ostream.H" @@ -58,7 +59,7 @@ template<class Face> void Foam::MeshedSurface<Face>::writeStats(Ostream& os) const { os << "points : " << this->points().size() << nl; - if (MeshedSurface<Face>::isTri()) + if (faceTraits<Face>::isTri()) { os << "triangles : " << this->size() << nl; } @@ -82,7 +83,7 @@ void Foam::MeshedSurface<Face>::writeStats(Ostream& os) const os << "faces : " << this->size() << " (tri:" << nTri << " quad:" << nQuad - << " poly:" << (this->size() - nTri - nQuad ) << ")" << nl; + << " poly:" << (this->size() - nTri - nQuad) << ")" << nl; } os << "boundingBox : " << boundBox(this->points()) << endl; diff --git a/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C b/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C index a8280451ee8..7d345191ff8 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C +++ b/src/surfMesh/MeshedSurface/MeshedSurfaceNew.C @@ -38,10 +38,9 @@ Foam::MeshedSurface<Face>::New(const fileName& name, const word& ext) InfoInFunction << "Constructing MeshedSurface" << endl; } - typename fileExtensionConstructorTable::iterator cstrIter = - fileExtensionConstructorTablePtr_->find(ext); + auto cstrIter = fileExtensionConstructorTablePtr_->find(ext); - if (cstrIter == fileExtensionConstructorTablePtr_->end()) + if (!cstrIter.found()) { // No direct reader, delegate to friend if possible const wordHashSet& delegate = FriendType::readTypes(); diff --git a/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.C b/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.C index 168155a5971..b5dbdb6c99d 100644 --- a/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.C +++ b/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.C @@ -29,6 +29,7 @@ License #include "ListOps.H" #include "surfMesh.H" #include "OFstream.H" +#include "faceTraits.H" // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // @@ -59,18 +60,27 @@ void Foam::MeshedSurfaceProxy<Face>::write const fileName& name, const MeshedSurfaceProxy& surf ) +{ + write(name, name.ext(), surf); +} + + +template<class Face> +void Foam::MeshedSurfaceProxy<Face>::write +( + const fileName& name, + const word& ext, + const MeshedSurfaceProxy& surf +) { if (debug) { InfoInFunction << "Writing to " << name << endl; } - const word ext = name.ext(); + auto mfIter = writefileExtensionMemberFunctionTablePtr_->find(ext); - typename writefileExtensionMemberFunctionTable::iterator mfIter = - writefileExtensionMemberFunctionTablePtr_->find(ext); - - if (mfIter == writefileExtensionMemberFunctionTablePtr_->end()) + if (!mfIter.found()) { FatalErrorInFunction << "Unknown file extension " << ext << nl << nl @@ -237,38 +247,24 @@ Foam::MeshedSurfaceProxy<Face>::~MeshedSurfaceProxy() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -namespace Foam -{ - -// Number of triangles for a triFace surface -template<> -inline label MeshedSurfaceProxy<triFace>::nTriangles() const -{ - return this->size(); -} - -// Number of triangles for a labelledTri surface -template<> -inline label MeshedSurfaceProxy<labelledTri>::nTriangles() const -{ - return this->size(); -} - -} - - template<class Face> inline Foam::label Foam::MeshedSurfaceProxy<Face>::nTriangles() const { - label nTri = 0; - const List<Face>& faceLst = this->surfFaces(); - forAll(faceLst, facei) + if (faceTraits<Face>::isTri()) { - nTri += faceLst[facei].nTriangles(); + return this->size(); } + else + { + label nTri = 0; + const List<Face>& faceLst = this->surfFaces(); + forAll(faceLst, facei) + { + nTri += faceLst[facei].nTriangles(); + } - return nTri; + return nTri; + } } diff --git a/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.H b/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.H index 3bedc3f0767..6c0f3582e57 100644 --- a/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.H +++ b/src/surfMesh/MeshedSurfaceProxy/MeshedSurfaceProxy.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -100,9 +100,9 @@ public: //- Construct from component references MeshedSurfaceProxy ( - const pointField&, - const List<Face>&, - const List<surfZone>& = List<surfZone>(), + const pointField& pointLst, + const List<Face>& faceLst, + const List<surfZone>& zoneLst = List<surfZone>(), const List<label>& faceMap = List<label>() ); @@ -126,11 +126,19 @@ public: (name, surf) ); - //- Write to file + //- Write to file, selected based on its extension static void write ( - const fileName&, - const MeshedSurfaceProxy<Face>& + const fileName& name, + const MeshedSurfaceProxy& surf + ); + + //- Write to file, selected based on given extension + static void write + ( + const fileName& name, + const word& ext, + const MeshedSurfaceProxy& surf ); @@ -188,10 +196,16 @@ public: write(name, *this); } + //- Generic write routine. Chooses writer based on extension. + virtual void write(const fileName& name, const word& ext) const + { + write(name, ext, *this); + } + //- Write to database virtual void write ( - const Time&, + const Time& t, const word& surfName = word::null ) const; }; diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C index 42a7d1d9fe1..7ac9a3e598c 100644 --- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C +++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C @@ -113,17 +113,16 @@ void Foam::UnsortedMeshedSurface<Face>::write const word ext = name.ext(); - typename writefileExtensionMemberFunctionTable::iterator mfIter = - writefileExtensionMemberFunctionTablePtr_->find(ext); + auto mfIter = writefileExtensionMemberFunctionTablePtr_->find(ext); - if (mfIter == writefileExtensionMemberFunctionTablePtr_->end()) + if (!mfIter.found()) { // No direct writer, delegate to proxy if possible const wordHashSet& delegate = ProxyType::writeTypes(); if (delegate.found(ext)) { - MeshedSurfaceProxy<Face>(surf).write(name); + MeshedSurfaceProxy<Face>(surf).write(name, ext); } else { diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurfaceNew.C b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurfaceNew.C index f6f1431a835..6f50b238975 100644 --- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurfaceNew.C +++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurfaceNew.C @@ -37,10 +37,9 @@ Foam::UnsortedMeshedSurface<Face>::New(const fileName& name, const word& ext) InfoInFunction << "Constructing UnsortedMeshedSurface" << endl; } - typename fileExtensionConstructorTable::iterator cstrIter = - fileExtensionConstructorTablePtr_->find(ext); + auto cstrIter = fileExtensionConstructorTablePtr_->find(ext); - if (cstrIter == fileExtensionConstructorTablePtr_->end()) + if (!cstrIter.found()) { // No direct reader, delegate to parent if possible const wordHashSet& delegate = ParentType::readTypes(); diff --git a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.C b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.C index 0c60b22ede2..daa0e2c1f8a 100644 --- a/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/ac3d/AC3DsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -26,6 +26,7 @@ License #include "AC3DsurfaceFormat.H" #include "IStringStream.H" #include "PrimitivePatch.H" +#include "faceTraits.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -194,9 +195,9 @@ bool Foam::fileFormats::AC3DsurfaceFormat<Face>::read verts[vertI] = parse<int>(line) + vertexOffset; } - labelUList& f = static_cast<labelUList&>(verts); + const labelUList& f = static_cast<const labelUList&>(verts); - if (MeshedSurface<Face>::isTri() && f.size() > 3) + if (faceTraits<Face>::isTri() && f.size() > 3) { // simple face triangulation about f[0] // points may be incomplete @@ -204,7 +205,7 @@ bool Foam::fileFormats::AC3DsurfaceFormat<Face>::read { label fp2 = f.fcIndex(fp1); - dynFaces.append(triFace(f[0], f[fp1], f[fp2])); + dynFaces.append(Face{f[0], f[fp1], f[fp2]}); sizes[zoneI]++; } } diff --git a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.C b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.C index 731b2e1b96a..f2aa5b22ee3 100644 --- a/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/gts/GTSsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -28,8 +28,8 @@ License #include "clock.H" #include "IFstream.H" #include "IStringStream.H" -#include "Ostream.H" #include "OFstream.H" +#include "faceTraits.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -187,7 +187,7 @@ bool Foam::fileFormats::GTSsurfaceFormat<Face>::read << exit(FatalError); } - faceLst[facei] = triFace(e0Far, common01, e1Far); + faceLst[facei] = Face{e0Far, common01, e1Far}; zoneIds[facei] = zoneI; } @@ -229,7 +229,7 @@ void Foam::fileFormats::GTSsurfaceFormat<Face>::write // check if output triangulation would be required // It is too annoying to triangulate on-the-fly // just issue a warning and get out - if (!MeshedSurface<Face>::isTri()) + if (!faceTraits<Face>::isTri()) { label nNonTris = 0; forAll(faceLst, facei) @@ -249,7 +249,6 @@ void Foam::fileFormats::GTSsurfaceFormat<Face>::write } } - OFstream os(filename); if (!os.good()) { @@ -331,7 +330,7 @@ void Foam::fileFormats::GTSsurfaceFormat<Face>::write // check if output triangulation would be required // It is too annoying to triangulate on-the-fly // just issue a warning and get out - if (!MeshedSurface<Face>::isTri()) + if (!faceTraits<Face>::isTri()) { label nNonTris = 0; forAll(faceLst, facei) @@ -351,7 +350,6 @@ void Foam::fileFormats::GTSsurfaceFormat<Face>::write } } - OFstream os(filename); if (!os.good()) { diff --git a/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C b/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C index d7b932ec485..55f941bf43f 100644 --- a/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/nas/NASsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -26,6 +26,7 @@ License #include "NASsurfaceFormat.H" #include "IFstream.H" #include "IStringStream.H" +#include "faceTraits.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -191,12 +192,10 @@ bool Foam::fileFormats::NASsurfaceFormat<Face>::read if (cmd == "CTRIA3") { - triFace fTri; - label groupId = readLabel(IStringStream(line.substr(16,8))()); - fTri[0] = readLabel(IStringStream(line.substr(24,8))()); - fTri[1] = readLabel(IStringStream(line.substr(32,8))()); - fTri[2] = readLabel(IStringStream(line.substr(40,8))()); + label a = readLabel(IStringStream(line.substr(24,8))()); + label b = readLabel(IStringStream(line.substr(32,8))()); + label c = readLabel(IStringStream(line.substr(40,8))()); // Convert groupID into zoneId Map<label>::const_iterator fnd = lookup.find(groupId); @@ -217,20 +216,17 @@ bool Foam::fileFormats::NASsurfaceFormat<Face>::read // Info<< "zone" << zoneI << " => group " << groupId <<endl; } - dynFaces.append(fTri); + dynFaces.append(Face{a, b, c}); dynZones.append(zoneI); dynSizes[zoneI]++; } else if (cmd == "CQUAD4") { - face fQuad(4); - labelUList& f = static_cast<labelUList&>(fQuad); - label groupId = readLabel(IStringStream(line.substr(16,8))()); - fQuad[0] = readLabel(IStringStream(line.substr(24,8))()); - fQuad[1] = readLabel(IStringStream(line.substr(32,8))()); - fQuad[2] = readLabel(IStringStream(line.substr(40,8))()); - fQuad[3] = readLabel(IStringStream(line.substr(48,8))()); + label a = readLabel(IStringStream(line.substr(24,8))()); + label b = readLabel(IStringStream(line.substr(32,8))()); + label c = readLabel(IStringStream(line.substr(40,8))()); + label d = readLabel(IStringStream(line.substr(48,8))()); // Convert groupID into zoneId Map<label>::const_iterator fnd = lookup.find(groupId); @@ -251,18 +247,17 @@ bool Foam::fileFormats::NASsurfaceFormat<Face>::read // Info<< "zone" << zoneI << " => group " << groupId <<endl; } - - if (MeshedSurface<Face>::isTri()) + if (faceTraits<Face>::isTri()) { - dynFaces.append(triFace(f[0], f[1], f[2])); - dynFaces.append(triFace(f[0], f[2], f[3])); + dynFaces.append(Face{a, b, c}); + dynFaces.append(Face{c, d, a}); dynZones.append(zoneI); dynZones.append(zoneI); dynSizes[zoneI] += 2; } else { - dynFaces.append(Face(f)); + dynFaces.append(Face{a,b,c,d}); dynZones.append(zoneI); dynSizes[zoneI]++; } diff --git a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C index 395e2bacb73..db2036aa888 100644 --- a/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/obj/OBJsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,9 +27,9 @@ License #include "clock.H" #include "IFstream.H" #include "IStringStream.H" -#include "Ostream.H" #include "OFstream.H" #include "ListOps.H" +#include "faceTraits.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -172,7 +172,7 @@ bool Foam::fileFormats::OBJsurfaceFormat<Face>::read labelUList& f = static_cast<labelUList&>(dynVertices); - if (MeshedSurface<Face>::isTri() && f.size() > 3) + if (faceTraits<Face>::isTri() && f.size() > 3) { // simple face triangulation about f[0] // points may be incomplete @@ -180,7 +180,7 @@ bool Foam::fileFormats::OBJsurfaceFormat<Face>::read { label fp2 = f.fcIndex(fp1); - dynFaces.append(triFace(f[0], f[fp1], f[fp2])); + dynFaces.append(Face{f[0], f[fp1], f[fp2]}); dynZones.append(zoneI); dynSizes[zoneI]++; } diff --git a/src/surfMesh/surfaceFormats/off/OFFsurfaceFormat.C b/src/surfMesh/surfaceFormats/off/OFFsurfaceFormat.C index fd869a0c508..3146f01b990 100644 --- a/src/surfMesh/surfaceFormats/off/OFFsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/off/OFFsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -27,7 +27,7 @@ License #include "clock.H" #include "IFstream.H" #include "IStringStream.H" -#include "Ostream.H" +#include "faceTraits.H" #include "OFstream.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -113,9 +113,9 @@ bool Foam::fileFormats::OFFsurfaceFormat<Face>::read lineStream >> verts[vertI]; } - labelUList& f = static_cast<labelUList&>(verts); + const labelUList& f = static_cast<const labelUList&>(verts); - if (MeshedSurface<Face>::isTri() && f.size() > 3) + if (faceTraits<Face>::isTri() && f.size() > 3) { // simple face triangulation about f[0] // cannot use face::triangulation (points may be incomplete) @@ -123,7 +123,7 @@ bool Foam::fileFormats::OFFsurfaceFormat<Face>::read { label fp2 = f.fcIndex(fp1); - dynFaces.append(triFace(f[0], f[fp1], f[fp2])); + dynFaces.append(Face{f[0], f[fp1], f[fp2]}); } } else diff --git a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.C b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.C index 7240ee78245..36e3f2b0a0b 100644 --- a/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/starcd/STARCDsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -25,6 +25,7 @@ License #include "STARCDsurfaceFormat.H" #include "ListOps.H" +#include "faceTraits.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -193,7 +194,7 @@ bool Foam::fileFormats::STARCDsurfaceFormat<Face>::read } SubList<label> vertices(vertexLabels, vertexLabels.size()); - if (MeshedSurface<Face>::isTri() && nLabels > 3) + if (faceTraits<Face>::isTri() && nLabels > 3) { // face needs triangulation face f(vertices); diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C index ee598a5228e..f9e335c39eb 100644 --- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C @@ -146,7 +146,7 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read forAll(faceLst, facei) { const label startPt = 3*facei; - faceLst[facei] = triFace(startPt, startPt+1, startPt+2); + faceLst[facei] = Face{startPt, startPt+1, startPt+2}; } } else @@ -160,7 +160,7 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read forAll(faceMap, facei) { const label startPt = 3*faceMap[facei]; - faceLst[facei] = triFace(startPt, startPt+1, startPt+2); + faceLst[facei] = Face{startPt, startPt+1, startPt+2}; } } zoneIds.clear(); diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C index 5b0aba1f880..cb2aa80823b 100644 --- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -97,7 +97,7 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read forAll(faceLst, facei) { const label startPt = 3*facei; - faceLst[facei] = triFace(startPt, startPt+1, startPt+2); + faceLst[facei] = Face{startPt, startPt+1, startPt+2}; } } else @@ -111,7 +111,7 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read forAll(faceMap, facei) { const label startPt = 3*faceMap[facei]; - faceLst[facei] = triFace(startPt, startPt+1, startPt+2); + faceLst[facei] = Face{startPt, startPt+1, startPt+2}; } } zoneIds.clear(); diff --git a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C index aedd18d6c85..b0a5d271149 100644 --- a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. + \\/ M anipulation | Copyright (C) 2016-2107 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -26,6 +26,7 @@ License #include "VTKsurfaceFormat.H" #include "vtkUnstructuredReader.H" #include "scalarIOField.H" +#include "faceTraits.H" #include "OFstream.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -150,7 +151,7 @@ bool Foam::fileFormats::VTKsurfaceFormat<Face>::read // Check if it needs triangulation label nTri = 0; - if (MeshedSurface<Face>::isTri()) + if (faceTraits<Face>::isTri()) { forAll(faces, facei) { @@ -172,7 +173,7 @@ bool Foam::fileFormats::VTKsurfaceFormat<Face>::read { label fp2 = f.fcIndex(fp1); - dynFaces.append(triFace(f[0], f[fp1], f[fp2])); + dynFaces.append(Face{f[0], f[fp1], f[fp2]}); dynZones.append(zones[facei]); } } -- GitLab