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 -------------------------------------------------------------------------------
10 License
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"
31 #include "UnsortedMeshedSurface.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 // ************************************************************************* //
Foam::word::lessExt
word lessExt() const
Return word without extension (part before last .)
Definition: word.C:113
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::fileName
A class for handling file names.
Definition: fileName.H:73
Foam::IFstream
Input from file stream, using an ISstream.
Definition: IFstream.H:53
Foam::word::ext
word ext() const
Return file name extension (part after last .)
Definition: word.C:126
triSurface.H
UnsortedMeshedSurface.H
Foam::UnsortedMeshedSurface
A surface geometry mesh, in which the surface zone information is conveyed by the 'zoneId' associated...
Definition: MeshedSurface.H:83
Foam::triSurface::New
static autoPtr< triSurface > New(const fileName &name, const word &fileType)
Read construct from filename with given file type.
Definition: triSurfaceNew.C:37
Foam::FatalError
error FatalError
Foam::flatOutput
FlatOutput::OutputAdaptor< Container, Delimiters > flatOutput(const Container &obj, Delimiters delim)
Global flatOutput() function with specified output delimiters.
Definition: FlatOutput.H:216
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
Foam::New
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
Definition: DimensionedFieldReuseFunctions.H:105
found
bool found
Definition: TABSMDCalcMethod2.H:32
Foam::autoPtr< Foam::triSurface >
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
Foam::nl
constexpr char nl
Definition: Ostream.H:404
Fstream.H
Foam::name
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
Definition: exprTraits.C:59
Foam::MeshedSurface
A surface geometry mesh with zone information, not to be confused with the similarly named surfaceMes...
Definition: triSurfaceTools.H:80
MeshedSurface.H