triSurfaceNew.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2020 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "triSurface.H"
29#include "Fstream.H"
30#include "MeshedSurface.H"
32
33// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
34
37(
38 const fileName& name,
39 const word& fileType
40)
41{
42 const word ext(name.ext());
43
44 if (fileType.empty())
45 {
46 // Handle empty/missing type
47
48 if (ext.empty())
49 {
51 << "Cannot determine format from filename" << nl
52 << " " << name << nl
53 << exit(FatalError);
54 }
55
56 return New(name, ext);
57 }
58 else if (fileType == "gz")
59 {
60 // Degenerate call
61 fileName unzipName(name.lessExt());
62 return New(unzipName, unzipName.ext());
63 }
64 else if (ext == "gz")
65 {
66 // Handle trailing "gz" on file name
67 return New(name.lessExt(), fileType);
68 }
69
70 // if (check && !exists(name))
71 // {
72 // FatalErrorInFunction
73 // << "No such file " << name << nl
74 // << exit(FatalError);
75 // }
76
77
78 // Hard-coded readers
79 if (fileType == "ftr")
80 {
81 auto surf = autoPtr<triSurface>::New();
82
83 IFstream is(name);
84 surf->readNative(is);
85 return surf;
86 }
87 else if (fileType == "stl")
88 {
89 auto surf = autoPtr<triSurface>::New();
90
91 surf->readSTL(name); // ASCII
92 return surf;
93 }
94 else if (fileType == "stlb")
95 {
96 auto surf = autoPtr<triSurface>::New();
97
98 surf->readSTL(name, true); // Force BINARY
99 return surf;
100 }
101
102 {
103 // UnsortedMeshedSurface
104 using proxyType = UnsortedMeshedSurface<labelledTri>;
105 if (proxyType::readTypes().found(fileType))
106 {
107 auto surf = autoPtr<triSurface>::New();
108
109 surf->transfer(*proxyType::New(name, fileType));
110 return surf;
111 }
112 }
113
114 // MeshedSurface
115 {
116 using proxyType = MeshedSurface<labelledTri>;
117 if (proxyType::readTypes().found(fileType))
118 {
119 auto surf = autoPtr<triSurface>::New();
120
121 surf->transfer(*proxyType::New(name, fileType));
122 return surf;
123 }
124 }
125
126 {
128 << "Unknown surface format " << fileType
129 << " for reading file " << name << nl
130 << "Valid types:" << nl
131 << " " << flatOutput(readTypes().sortedToc()) << nl
132 << exit(FatalError);
133 }
134
135 // Failed
136 return nullptr;
137}
138
139
142{
143 const word ext(name.ext());
144 if (ext == "gz")
145 {
146 // Handle trailing "gz" on file name
147
148 fileName unzipName(name.lessExt());
149 return New(unzipName, unzipName.ext());
150 }
151
152 return New(name, ext);
153}
154
155
156// ************************************************************************* //
bool found
Input from file stream, using an ISstream.
Definition: IFstream.H:57
A surface geometry mesh with zone information, not to be confused with the similarly named surfaceMes...
Definition: MeshedSurface.H:99
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
Definition: Time.C:717
A surface geometry mesh, in which the surface zone information is conveyed by the 'zoneId' associated...
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: autoPtr.H:66
A class for handling file names.
Definition: fileName.H:76
word ext() const
Return file name extension (part after last .)
Definition: fileNameI.H:218
static autoPtr< triSurface > New(const fileName &name, const word &fileType)
Read construct from filename with given file type.
Definition: triSurfaceNew.C:37
static wordHashSet readTypes()
Known readable file-types, including via friends or proxies.
Definition: triSurfaceIO.C:40
A class for handling words, derived from Foam::string.
Definition: word.H:68
word ext() const
Return file name extension (part after last .)
Definition: word.C:126
word lessExt() const
Return word without extension (part before last .)
Definition: word.C:113
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
FlatOutput::OutputAdaptor< Container, Delimiters > flatOutput(const Container &obj, Delimiters delim)
Global flatOutput() function with specified output delimiters.
Definition: FlatOutput.H:215
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh > > &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
error FatalError
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
Definition: exprTraits.C:59
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
constexpr char nl
The newline '\n' character (0x0a)
Definition: Ostream.H:53