ENH: add stream operators for MeshedSurface, UnsortedMeshedSurface

- add corrsponding testing into surfaceMeshConvertTesting too
This commit is contained in:
Mark Olesen 2016-09-06 14:45:44 +02:00
parent ba413e1f9a
commit 29d5a10f97
10 changed files with 412 additions and 62 deletions

View File

@ -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) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -66,6 +66,9 @@ Note
#include "MeshedSurfaces.H"
#include "UnsortedMeshedSurfaces.H"
#include "IStringStream.H"
#include "OStringStream.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -84,11 +87,33 @@ int main(int argc, char *argv[])
argList::validArgs.append("outputFile");
argList::addBoolOption("clean");
argList::addBoolOption("orient");
argList::addBoolOption("surfMesh");
argList::addBoolOption
(
"orient",
"check surface orientation"
);
argList::addBoolOption
(
"surfMesh",
"test surfMesh output"
);
argList::addBoolOption("triSurface");
argList::addBoolOption("unsorted");
argList::addBoolOption("triFace");
argList::addBoolOption
(
"unsorted",
"use UnsortedMeshedSurface instead of MeshedSurface, "
"or unsorted output (with -triSurface option)"
);
argList::addBoolOption
(
"triFace",
"use triFace instead of face"
);
argList::addBoolOption
(
"stdout",
"ignore output filename and write to stdout"
);
argList::addOption
(
@ -99,10 +124,11 @@ int main(int argc, char *argv[])
#include "setRootCase.H"
const bool optStdout = args.optionFound("stdout");
const scalar scaleFactor = args.optionLookupOrDefault("scale", 0.0);
const fileName importName = args[1];
const fileName exportName = args[2];
const fileName exportName = optStdout ? "-stdout" : args[2];
if (importName == exportName)
{
@ -114,7 +140,11 @@ int main(int argc, char *argv[])
if
(
!MeshedSurface<face>::canRead(importName, true)
|| !MeshedSurface<face>::canWriteType(exportName.ext(), true)
||
(
!optStdout
&& !MeshedSurface<face>::canWriteType(exportName.ext(), true)
)
)
{
return 1;
@ -128,6 +158,19 @@ int main(int argc, char *argv[])
surf.writeStats(Info);
Info<< endl;
// check: output to ostream, construct from istream
{
OStringStream os;
os << surf;
IStringStream is(os.str());
triSurface surf2(is);
// is.rewind();
// is >> surf2; // FAIL: uses List<labelledTri> base class
// surf2.read(is); // FAIL: private method
}
if (args.optionFound("orient"))
{
Info<< "Checking surface orientation" << endl;
@ -156,8 +199,15 @@ int main(int argc, char *argv[])
Info<< endl;
}
// write sorted by region
surf.write(exportName, true);
if (optStdout)
{
Info<< surf;
}
else
{
// normally write sorted (looks nicer)
surf.write(exportName, !args.optionFound("unsorted"));
}
}
else if (args.optionFound("unsorted"))
{
@ -167,6 +217,23 @@ int main(int argc, char *argv[])
surf.writeStats(Info);
Info<< endl;
// check: output to ostream, construct from istream
{
OStringStream os;
os << surf;
IStringStream is(os.str());
// both work:
UnsortedMeshedSurface<face> surf2(is);
// OR
// is.rewind();
// UnsortedMeshedSurface<face> surf2;
// is >> surf2;
// surf2.read(is); // FAIL: private method
}
if (args.optionFound("orient"))
{
Info<< "Checking surface orientation" << endl;
@ -194,9 +261,16 @@ int main(int argc, char *argv[])
surf.writeStats(Info);
Info<< endl;
}
surf.write(exportName);
if (optStdout)
{
Info<< surf;
}
else
{
surf.write(exportName);
}
}
#if 1
else if (args.optionFound("triFace"))
{
MeshedSurface<triFace> surf(importName);
@ -205,6 +279,23 @@ int main(int argc, char *argv[])
surf.writeStats(Info);
Info<< endl;
// check: output to ostream, construct from istream
{
OStringStream os;
os << surf;
IStringStream is(os.str());
// both work:
MeshedSurface<face> surf2(is);
// OR
// is.rewind();
// MeshedSurface<face> surf2;
// is >> surf2;
// surf2.read(is); // FAIL: private method
}
if (args.optionFound("orient"))
{
Info<< "Checking surface orientation" << endl;
@ -232,9 +323,16 @@ int main(int argc, char *argv[])
surf.writeStats(Info);
Info<< endl;
}
surf.write(exportName);
if (optStdout)
{
Info<< surf;
}
else
{
surf.write(exportName);
}
}
#endif
else
{
MeshedSurface<face> surf(importName);
@ -243,6 +341,23 @@ int main(int argc, char *argv[])
surf.writeStats(Info);
Info<< endl;
// check: output to ostream, construct from istream
{
OStringStream os;
os << surf;
IStringStream is(os.str());
// both work:
MeshedSurface<face> surf2(is);
// OR
// is.rewind();
// MeshedSurface<face> surf2;
// is >> surf2;
// surf2.read(is); // FAIL: private method
}
if (args.optionFound("orient"))
{
Info<< "Checking surface orientation" << endl;
@ -258,7 +373,6 @@ int main(int argc, char *argv[])
Info<< endl;
}
Info<< "writing " << exportName;
if (scaleFactor <= 0)
{
@ -271,7 +385,15 @@ int main(int argc, char *argv[])
surf.writeStats(Info);
Info<< endl;
}
surf.write(exportName);
if (optStdout)
{
Info<< surf;
}
else
{
surf.write(exportName);
}
if (args.optionFound("surfMesh"))
{
@ -287,7 +409,6 @@ int main(int argc, char *argv[])
Info<< "runTime.instance() = " << runTime.instance() << endl;
Info<< "runTime.timeName() = " << runTime.timeName() << endl;
Info<< "write MeshedSurface 'yetAnother' via proxy as surfMesh"
<< endl;
surf.write
@ -312,14 +433,11 @@ int main(int argc, char *argv[])
MeshedSurface<face> surfIn2(runTime, "foobar");
Info<<"surfIn2 = " << surfIn2.size() << endl;
Info<< "surfIn = " << surfIn.size() << endl;
Info<< "writing surfMesh as obj = oldSurfIn.obj" << endl;
surfIn.write("oldSurfIn.obj");
Info<< "runTime.instance() = " << runTime.instance() << endl;
surfMesh surfOut

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -343,7 +343,10 @@ Foam::MeshedSurface<Face>::MeshedSurface
template<class Face>
Foam::MeshedSurface<Face>::MeshedSurface(const fileName& name)
Foam::MeshedSurface<Face>::MeshedSurface
(
const fileName& name
)
:
ParentType(List<Face>(), pointField())
{
@ -351,6 +354,19 @@ Foam::MeshedSurface<Face>::MeshedSurface(const fileName& name)
}
template<class Face>
Foam::MeshedSurface<Face>::MeshedSurface
(
Istream& is
)
:
ParentType(List<Face>(), pointField()),
zones_()
{
read(is);
}
template<class Face>
Foam::MeshedSurface<Face>::MeshedSurface
(

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -69,11 +69,18 @@ namespace Foam
class Time;
class surfMesh;
class polyBoundaryMesh;
class Istream;
class Ostream;
template<class Face> class MeshedSurface;
template<class Face> class MeshedSurfaceProxy;
template<class Face> class UnsortedMeshedSurface;
template<class Face>
Istream& operator>>(Istream&, MeshedSurface<Face>&);
template<class Face>
Ostream& operator<<(Ostream&, const MeshedSurface<Face>&);
/*---------------------------------------------------------------------------*\
Class MeshedSurface Declaration
\*---------------------------------------------------------------------------*/
@ -84,7 +91,7 @@ class MeshedSurface
public PrimitivePatch<Face, ::Foam::List, pointField, point>,
public fileFormats::surfaceFormatsCore
{
// friends - despite different face representationsx
// friends - despite different face representations
template<class Face2> friend class MeshedSurface;
template<class Face2> friend class UnsortedMeshedSurface;
friend class surfMesh;
@ -114,6 +121,15 @@ private:
List<surfZone> zones_;
// Private Member functions
//- Read/construct from Istream
Istream& read(Istream&);
//- Write to Ostream
Ostream& write(Ostream&) const;
protected:
// Protected Member functions
@ -133,7 +149,7 @@ protected:
//- Non-const access to the faces
List<Face>& storedFaces()
{
return static_cast<List<Face> &>(*this);
return static_cast<List<Face>&>(*this);
}
//- Non-const access to the zones
@ -234,8 +250,15 @@ public:
//- Construct from file name (uses extension to determine type)
MeshedSurface(const fileName&, const word& ext);
//- Construct from Istream
MeshedSurface(Istream&);
//- Construct from database
MeshedSurface(const Time&, const word& surfName="");
MeshedSurface
(
const Time&,
const word& surfName = word::null
);
// Declare run-time constructor selection table
@ -285,7 +308,11 @@ public:
);
//- Write to file
static void write(const fileName&, const MeshedSurface<Face>&);
static void write
(
const fileName&,
const MeshedSurface<Face>&
);
// Member Functions
@ -301,7 +328,7 @@ public:
//- Return const access to the faces
inline const List<Face>& faces() const
{
return static_cast<const List<Face> &>(*this);
return static_cast<const List<Face>&>(*this);
}
//- Const access to the surface zones.
@ -353,7 +380,7 @@ public:
// Note, optimized to avoid overwriting data (with Xfer::null)
virtual void reset
(
const Xfer<pointField >& points,
const Xfer<pointField>& points,
const Xfer<List<Face>>& faces,
const Xfer<surfZoneList>& zones
);
@ -364,7 +391,7 @@ public:
(
const Xfer<List<point>>& points,
const Xfer<List<Face>>& faces,
const Xfer<surfZoneList >& zones
const Xfer<surfZoneList>& zones
);
//- Remove invalid faces
@ -435,7 +462,11 @@ public:
}
//- Write to database
void write(const Time&, const word& surfName="") const;
void write
(
const Time&,
const word& surfName = word::null
) const;
// Member operators
@ -444,6 +475,25 @@ public:
//- Conversion operator to MeshedSurfaceProxy
operator MeshedSurfaceProxy<Face>() const;
// IOstream Operators
//- Read MeshedSurface from Istream.
friend Istream& operator>> <Face>
(
Istream&,
MeshedSurface<Face>&
);
//- Write MeshedSurface to Ostream.
friend Ostream& operator<< <Face>
(
Ostream&,
const MeshedSurface<Face>&
);
};

View File

@ -66,12 +66,4 @@ namespace Foam
} // end of namespace Foam
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* //

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -25,10 +25,35 @@ License
#include "MeshedSurface.H"
#include "boundBox.H"
#include "Istream.H"
#include "Ostream.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Face>
Foam::Istream& Foam::MeshedSurface<Face>::read(Istream& is)
{
is >> this->storedZones()
>> this->storedPoints()
>> this->storedFaces();
is.check("MeshedSurface::read(Istream&)");
return is;
}
template<class Face>
Foam::Ostream& Foam::MeshedSurface<Face>::write(Ostream& os) const
{
os << this->surfZones()
<< this->points()
<< this->faces();
os.check("MeshedSurface::write(Ostream&) const");
return os;
}
template<class Face>
void Foam::MeshedSurface<Face>::writeStats(Ostream& os) const
{
@ -64,4 +89,28 @@ void Foam::MeshedSurface<Face>::writeStats(Ostream& os) const
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
template<class Face>
Foam::Istream& Foam::operator>>
(
Foam::Istream& is,
Foam::MeshedSurface<Face>& surf
)
{
return surf.read(is);
}
template<class Face>
Foam::Ostream& Foam::operator<<
(
Foam::Ostream& os,
const Foam::MeshedSurface<Face>& surf
)
{
return surf.write(os);
}
// ************************************************************************* //

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -128,7 +128,11 @@ public:
);
//- Write to file
static void write(const fileName&, const MeshedSurfaceProxy<Face>&);
static void write
(
const fileName&,
const MeshedSurfaceProxy<Face>&
);
// Member Functions
@ -176,7 +180,11 @@ public:
}
//- Write to database
virtual void write(const Time&, const word& surfName = "") const;
virtual void write
(
const Time&,
const word& surfName = word::null
) const;
};

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -263,7 +263,10 @@ Foam::UnsortedMeshedSurface<Face>::UnsortedMeshedSurface
template<class Face>
Foam::UnsortedMeshedSurface<Face>::UnsortedMeshedSurface(const fileName& name)
Foam::UnsortedMeshedSurface<Face>::UnsortedMeshedSurface
(
const fileName& name
)
:
ParentType()
{
@ -271,6 +274,20 @@ Foam::UnsortedMeshedSurface<Face>::UnsortedMeshedSurface(const fileName& name)
}
template<class Face>
Foam::UnsortedMeshedSurface<Face>::UnsortedMeshedSurface
(
Istream& is
)
:
ParentType(),
zoneIds_(),
zoneToc_()
{
read(is);
}
template<class Face>
Foam::UnsortedMeshedSurface<Face>::UnsortedMeshedSurface
(
@ -422,6 +439,30 @@ void Foam::UnsortedMeshedSurface<Face>::remapFaces
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Face>
Foam::Istream& Foam::UnsortedMeshedSurface<Face>::read(Istream& is)
{
is >> this->storedZoneIds()
>> this->storedPoints()
>> this->storedFaces();
is.check("UnsortedMeshedSurface::read(Istream&)");
return is;
}
template<class Face>
Foam::Ostream& Foam::UnsortedMeshedSurface<Face>::write(Ostream& os) const
{
os << this->zoneIds()
<< this->points()
<< this->faces();
os.check("UnsortedMeshedSurface::write(Ostream&) const");
return os;
}
template<class Face>
void Foam::UnsortedMeshedSurface<Face>::setSize(const label s)
{
@ -759,6 +800,30 @@ Foam::MeshedSurfaceProxy<Face>() const
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
template<class Face>
Foam::Istream& Foam::operator>>
(
Foam::Istream& is,
Foam::UnsortedMeshedSurface<Face>& surf
)
{
return surf.read(is);
}
template<class Face>
Foam::Ostream& Foam::operator<<
(
Foam::Ostream& os,
const Foam::UnsortedMeshedSurface<Face>& surf
)
{
return surf.write(os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "UnsortedMeshedSurfaceNew.C"

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -62,12 +62,18 @@ namespace Foam
// Forward declaration of friend functions and operators
class Time;
class IFstream;
class Istream;
class Ostream;
template<class Face> class MeshedSurface;
template<class Face> class MeshedSurfaceProxy;
template<class Face> class UnsortedMeshedSurface;
template<class Face>
Istream& operator>>(Istream&, UnsortedMeshedSurface<Face>&);
template<class Face>
Ostream& operator<<(Ostream&, const UnsortedMeshedSurface<Face>&);
/*---------------------------------------------------------------------------*\
Class UnsortedMeshedSurface Declaration
\*---------------------------------------------------------------------------*/
@ -77,7 +83,7 @@ class UnsortedMeshedSurface
:
public MeshedSurface<Face>
{
// friends - despite different face representationsx
// friends - despite different face representations
template<class Face2> friend class MeshedSurface;
template<class Face2> friend class UnsortedMeshedSurface;
friend class surfMesh;
@ -104,11 +110,16 @@ private:
// Private Member Functions
//- Disable resize with value
void resize(const label, const Face&);
void resize(const label, const Face&) = delete;
//- Disable setSize with value
void setSize(const label, const Face&);
void setSize(const label, const Face&) = delete;
//- Read/construct from Istream
Istream& read(Istream&);
//- Write to Ostream
Ostream& write(Ostream&) const;
protected:
@ -199,8 +210,15 @@ public:
//- Construct from file name (uses extension to determine type)
UnsortedMeshedSurface(const fileName&, const word&);
//- Construct from Istream
UnsortedMeshedSurface(Istream&);
//- Construct from objectRegistry and a named surface
UnsortedMeshedSurface(const Time&, const word& surfName="");
UnsortedMeshedSurface
(
const Time&,
const word& surfName = word::null
);
// Declare run-time constructor selection table
@ -250,7 +268,11 @@ public:
);
//- Write to file
static void write(const fileName&, const UnsortedMeshedSurface<Face>&);
static void write
(
const fileName&,
const UnsortedMeshedSurface<Face>&
);
// Member Functions
@ -363,7 +385,11 @@ public:
}
//- Write to database
void write(const Time&, const word& surfName="") const;
void write
(
const Time&,
const word& surfName = word::null
) const;
// Member operators
@ -372,6 +398,24 @@ public:
//- Conversion operator to MeshedSurfaceProxy
operator MeshedSurfaceProxy<Face>() const;
// IOstream Operators
//- Read UnsortedMeshedSurface from Istream.
friend Istream& operator>> <Face>
(
Istream&,
UnsortedMeshedSurface<Face>&
);
//- Write UnsortedMeshedSurface to Ostream.
friend Ostream& operator<< <Face>
(
Ostream&,
const UnsortedMeshedSurface<Face>&
);
};

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -98,10 +98,10 @@ private:
// Private Member Functions
//- Disallow construct as copy
surfMesh(const surfMesh&);
surfMesh(const surfMesh&) = delete;
//- Disallow default bitwise assignment
void operator=(const surfMesh&);
void operator=(const surfMesh&) = delete;
protected:
@ -155,7 +155,11 @@ public:
// Constructors
//- Construct from IOobject, with alternative surface name
explicit surfMesh(const IOobject&, const word& surfName="");
explicit surfMesh
(
const IOobject&,
const word& surfName = word::null
);
//- Construct by transferring components (points, faces) without zones.
// surfZones are added using addZones() member function
@ -164,7 +168,7 @@ public:
const IOobject&,
const Xfer<pointField>&,
const Xfer<faceList>&,
const word& surfName=""
const word& surfName = word::null
);
//- Construct copy/move from MeshedSurface
@ -172,7 +176,7 @@ public:
(
const IOobject&,
const Xfer<MeshedSurface<face>>& surf,
const word& surfName=""
const word& surfName = word::null
);

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -54,10 +54,10 @@ class surfaceRegistry
// Private Member Functions
//- Disallow default bitwise copy construct
surfaceRegistry(const surfaceRegistry&);
surfaceRegistry(const surfaceRegistry&) = delete;
//- Disallow default bitwise assignment
void operator=(const surfaceRegistry&);
void operator=(const surfaceRegistry&) = delete;
public:
@ -75,7 +75,11 @@ public:
// Constructors
//- Construct for the given objectRegistry and named surface
surfaceRegistry(const objectRegistry&, const word& surfName = "");
surfaceRegistry
(
const objectRegistry&,
const word& surfName = word::null
);
//- Destructor