Go to the documentation of this file.
41 const UList<Face>& faceLst
46 if (!faceTraits<Face>::isTri())
48 for (
const auto&
f : faceLst)
60 <<
"Surface has " << nNonTris <<
'/' << faceLst.size()
61 <<
" non-triangulated faces - not writing!" <<
endl;
96 <<
"Cannot read file " << filename <<
nl
101 string line = this->getLineNoComment(is);
114 auto& pointLst = this->storedPoints();
115 auto& faceLst = this->storedFaces();
116 auto& zoneIds = this->storedZoneIds();
119 faceLst.resize(nElems);
120 zoneIds.resize(nElems);
126 line = this->getLineNoComment(is);
133 pointLst[pointi] =
point(
x,
y, z);
141 line = this->getLineNoComment(is);
147 edges[edgei] =
edge(beg - 1,
end - 1);
155 label e0Label, e1Label, e2Label;
158 line = this->getLineNoComment(is);
162 >> e0Label >> e1Label >> e2Label;
169 if (!lineStream.
bad())
184 const edge& e0 = edges[e0Label - 1];
185 const edge& e1 = edges[e1Label - 1];
186 const edge& e2 = edges[e2Label - 1];
192 <<
"Edges 0 and 1 of triangle " << facei
193 <<
" do not share a point.\n"
194 <<
" edge0:" << e0 <<
nl
206 <<
"Edges 1 and 2 of triangle " << facei
207 <<
" do not share a point.\n"
208 <<
" edge1:" << e1 <<
nl
215 if (common12 != e1Far || e2Far != e0Far)
218 <<
"Edges of triangle " << facei
219 <<
" reference more than three points.\n"
220 <<
" edge0:" << e0 <<
nl
221 <<
" edge1:" << e1 <<
nl
222 <<
" edge2:" << e2 <<
nl
226 faceLst[facei] = Face{e0Far, common01, e1Far};
227 zoneIds[facei] = zoneI;
236 surfZoneIdentifier::defaultName(zonei),
241 this->storedZoneToc().transfer(newZones);
242 this->addZonesToFaces();
258 streamOpt.
format(IOstream::ASCII);
267 : surfaceFormatsCore::oneZone(faceLst)
270 checkIfTriangulated(faceLst);
276 <<
"Cannot write file " << filename <<
nl
282 os <<
"# GTS file" <<
nl
287 os <<
"# " << zonei <<
" "
288 << zones[zonei].name() <<
nl;
292 os <<
"# nPoints nEdges nTriangles" <<
nl
293 << pointLst.
size() <<
' ' << surf.nEdges() <<
' '
298 for (
const point& pt : pointLst)
300 os << pt.x() <<
' ' << pt.y() <<
' ' << pt.z() <<
nl;
307 const labelList& meshPts = surf.meshPoints();
309 for (
const edge&
e : es)
311 os << meshPts[
e.start()] + 1 <<
' '
312 << meshPts[
e.end()] + 1 <<
nl;
323 for (label nLocal =
zone.size(); nLocal--; ++faceIndex)
325 const label facei = faceIndex;
329 os << fEdges[0] + 1 <<
' '
330 << fEdges[1] + 1 <<
' '
331 << fEdges[2] + 1 <<
' '
350 streamOpt.
format(IOstream::ASCII);
357 checkIfTriangulated(faceLst);
363 <<
"Cannot write file " << filename <<
nl
369 os <<
"# GTS file" <<
nl
374 os <<
"# " << zonei <<
" "
375 << zoneToc[zonei].name() <<
nl;
379 os <<
"# nPoints nEdges nTriangles" <<
nl
380 << pointLst.
size() <<
' ' << surf.nEdges() <<
' '
385 for (
const point& pt : pointLst)
387 os << pt.x() <<
' ' << pt.y() <<
' ' << pt.z() <<
nl;
394 const labelList& meshPts = surf.meshPoints();
396 for (
const edge&
e : es)
398 os << meshPts[
e.start()] + 1 <<
' '
399 << meshPts[
e.end()] + 1 <<
nl;
409 os << fEdges[0] + 1 <<
' '
410 << fEdges[1] + 1 <<
' '
411 << fEdges[2] + 1 <<
' '
412 << zoneIds[facei] <<
nl;
const surfZoneList & surfZones() const
Const access to the surface zones.
label commonVertex(const edge &other) const
Return vertex common with other edge or -1 on failure.
A class for handling file names.
Input from file stream, using an ISstream.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
Base class for mesh zones.
streamFormat format() const noexcept
Get the current stream format.
const List< Face > & surfFaces() const
Return const access to the faces.
Input/output from string buffers.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Identifies a surface patch/zone by name and index, with optional geometric type.
#define forAll(list, i)
Loop across all elements in list.
bool good() const noexcept
True if next operation might succeed.
virtual const labelList & zoneIds() const
Return const access to the zone ids.
A surface geometry mesh, in which the surface zone information is conveyed by the 'zoneId' associated...
The IOstreamOption is a simple container for options an IOstream can normally have.
const List< surfZoneIdentifier > & zoneToc() const
Return const access to the zone table-of-contents.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
OBJstream os(runTime.globalPath()/outputName)
constexpr auto end(C &c) -> decltype(c.end())
Return iterator to the end of the container c.
bool bad() const noexcept
True if stream is corrupted.
label size() const
The surface size is the number of faces.
Input from string buffer, using a ISstream. Always UNCOMPRESSED.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Output to file stream, using an OSstream.
label otherVertex(const label pointLabel) const
Given the point label for one vertex, return the other one.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
A surface zone on a MeshedSurface.
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
const dimensionedScalar e
Elementary charge.
void size(const label n)
Older name for setAddressableSize.
vector point
Point is a vector.
A surface geometry mesh with zone information, not to be confused with the similarly named surfaceMes...
label size() const
The surface size is the number of faces.