63 os <<
"v " << pt.
x() <<
' ' << pt.
y() <<
' ' << pt.
z() <<
nl;
88 pointStream <<
"l " <<
e.start() + 1 <<
' ' <<
e.end() + 1 <<
nl;
103 Info<<
"Writing mesh points and edges to " << fName <<
endl;
115 label celli = cellLabels[i];
121 const edge&
e =
mesh.edges()[cEdges[cEdgeI]];
125 const auto e0Fnd = pointToObj.cfind(
e[0]);
134 meshTools::writeOBJ(str,
mesh.points()[
e[0]]);
135 pointToObj.insert(
e[0], v0);
140 const auto e1Fnd = pointToObj.cfind(
e[1]);
149 meshTools::writeOBJ(str,
mesh.points()[
e[1]]);
150 pointToObj.insert(
e[1], v1);
154 str <<
"l " << v0+1 <<
' ' << v1+1 <<
nl;
174 Info<<
"Writing mesh points and edges to " << fName <<
endl;
178 const cell& cFaces =
mesh.cells()[celli];
180 meshTools::writeOBJ(pointStream,
mesh.faces(),
mesh.points(), cFaces);
191 /
"meshFaceCentres_" +
timeName +
".obj"
194 Info<<
"Writing mesh face centres to " << faceFile <<
endl;
209 mesh.time().path()/
"meshCellCentres_" +
timeName +
".obj"
212 Info<<
"Writing mesh cell centres to " << cellFile <<
endl;
223void writePatchCentres
240 Info<<
"Writing patch face centres to " << faceFile <<
endl;
270 Info<<
"Writing patch faces to " << faceFile <<
endl;
283 patchFaceStream<<
'f';
287 patchFaceStream <<
' ' <<
f[fp]+1;
289 patchFaceStream <<
nl;
295void writePatchBoundaryEdges
313 Info<<
"Writing patch edges to " << edgeFile <<
endl;
328 patchEdgeStream<<
"l " <<
e[0]+1 <<
' ' <<
e[1]+1 <<
nl;
350 allEdges.insert(cEdges);
357 /
"pointEdges_" +
timeName +
'_' +
name(pointi) +
".obj"
360 Info<<
"Writing pointEdges to " << pFile <<
endl;
366 for (
const label edgei : allEdges)
370 meshTools::writeOBJ(pointStream,
mesh.points()[
e[0]]); vertI++;
371 meshTools::writeOBJ(pointStream,
mesh.points()[
e[1]]); vertI++;
372 pointStream<<
"l " << vertI-1 <<
' ' << vertI <<
nl;
378int main(
int argc,
char *argv[])
382 "For mesh debugging: write mesh as separate OBJ files"
385 timeSelector::addOptions();
386 argList::addBoolOption
389 "Write patch faces edges"
391 argList::addBoolOption
394 "Write patch boundary edges"
400 "Write points for the specified cell"
406 "Write specified face"
412 "Write specified point"
418 "Write points for specified cellSet"
424 "Write points for specified faceSet"
428 argList::noFunctionObjects();
433 const bool patchFaces =
args.
found(
"patchFaces");
434 const bool patchEdges =
args.
found(
"patchEdges");
436 const bool doPoint =
args.
found(
"point");
438 const bool doCellSet =
args.
found(
"cellSet");
439 const bool doFaceSet =
args.
found(
"faceSet");
442 Info<<
"Writing mesh objects as .obj files such that the object"
443 <<
" numbering" <<
endl
444 <<
"(for points, faces, cells) is consistent with"
445 <<
" Foam numbering (starting from 0)." <<
endl <<
endl;
453 runTime.setTime(timeDirs[timeI], timeI);
459 if (!timeI || state != polyMesh::UNCHANGED)
471 const label celli =
args.
get<label>(
"cell");
477 const label pointi =
args.
get<label>(
"point");
483 const label facei =
args.
get<label>(
"face");
495 Info<<
"Writing mesh points and edges to " << fName <<
endl;
505 const word setName =
args[
"cellSet"];
509 Info<<
"Read " <<
cells.size() <<
" cells from set " << setName
516 const word setName =
args[
"faceSet"];
520 Info<<
"Read " << faces.size() <<
" faces from set " << setName
533 Info<<
"Writing mesh points and edges to " << fName <<
endl;
A HashTable to objects of type <T> with a label key.
Output to file stream, using an OSstream.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
label nEdges() const
Number of edges in patch.
const edgeList & edges() const
Return list of edges, address into LOCAL point list.
label nInternalEdges() const
Number of internal edges.
const Field< point_type > & localPoints() const
Return pointField of points in patch.
const labelListList & edgeFaces() const
Return edge-face addressing.
const List< face_type > & localFaces() const
Return patch faces addressing into local point list.
void size(const label n)
Older name for setAddressableSize.
const Cmpt & z() const
Access to the vector z component.
const Cmpt & y() const
Access to the vector y component.
const Cmpt & x() const
Access to the vector x component.
T get(const label index) const
Get a value from the argument at index.
bool found(const word &optName) const
Return true if the named option is found.
A collection of cell labels.
A cell is defined as a list of faces with extra functionality.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
A face is a list of labels corresponding to mesh vertices.
A class for handling file names.
const word & name() const noexcept
The patch name.
Inserts points at locations specified in a pointFile into the surfaces to be conformed to of the conf...
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO.
Mesh consisting of general polyhedral cells.
readUpdateState
Enumeration defining the state of the mesh after a read update.
A patch is a list of labels that address the faces in the global face list.
const vectorField::subField faceCentres() const
Return face centres.
A class for handling words, derived from Foam::string.
const polyBoundaryMesh & patches
OBJstream os(runTime.globalPath()/outputName)
messageStream Info
Information stream (stdout output on master, null elsewhere)
Ostream & endl(Ostream &os)
Add newline and flush stream.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
constexpr char nl
The newline '\n' character (0x0a)
Foam::argList args(argc, argv)
#define forAll(list, i)
Loop across all elements in list.