writeOBJ.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | foam-extend: Open Source CFD
4  \\ / O peration | Version: 3.2
5  \\ / A nd | Web: http://www.foam-extend.org
6  \\/ M anipulation | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9  This file is part of foam-extend.
10 
11  foam-extend is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by the
13  Free Software Foundation, either version 3 of the License, or (at your
14  option) any later version.
15 
16  foam-extend is distributed in the hope that it will be useful, but
17  WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  General Public License for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
23 
24 Description
25  Lightwave OBJ format.
26 
27  Note: Java obj loader does not support '#' on line
28 
29 \*---------------------------------------------------------------------------*/
30 
31 #include "triSurface.H"
32 
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
34 
35 namespace Foam
36 {
37 
38 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
39 
40 void triSurface::writeOBJ(const bool writeSorted, Ostream& os) const
41 {
42  // Write header
43  os << "# Wavefront OBJ file" << endl
44  << "# Regions:" << endl;
45 
47 
49 
50  const pointField& ps = points();
51 
52  // Print patch names as comment
53  forAll(myPatches, patchI)
54  {
55  os << "# " << patchI << " "
56  << myPatches[patchI].name() << endl;
57  }
58  os << "#" << endl;
59 
60  os << "# points : " << ps.size() << endl
61  << "# triangles : " << size() << endl
62  << "#" << endl;
63 
64 
65  // Write vertex coords
66  forAll(ps, pointi)
67  {
68  os << "v "
69  << ps[pointi].x() << ' '
70  << ps[pointi].y() << ' '
71  << ps[pointi].z() << endl;
72  }
73 
74  if (writeSorted)
75  {
76  label faceIndex = 0;
77 
78  forAll(myPatches, patchI)
79  {
80  // Print all faces belonging to this patch
81 
82  os << "g " << myPatches[patchI].name() << endl;
83 
84  for
85  (
86  label patchFaceI = 0;
87  patchFaceI < myPatches[patchI].size();
88  patchFaceI++
89  )
90  {
91  const label faceI = faceMap[faceIndex++];
92 
93  os << "f "
94  << operator[](faceI)[0] + 1 << ' '
95  << operator[](faceI)[1] + 1 << ' '
96  << operator[](faceI)[2] + 1
97  //<< " # " << operator[](faceI).region()
98  << endl;
99  }
100  }
101  }
102  else
103  {
104  forAll(*this, faceI)
105  {
106  os << "f "
107  << operator[](faceI)[0] + 1 << ' '
108  << operator[](faceI)[1] + 1 << ' '
109  << operator[](faceI)[2] + 1
110  //<< " # " << operator[](faceI).region()
111  << endl;
112  }
113  }
114 }
115 
116 
117 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
118 
119 } // End namespace Foam
120 
121 // ************************************************************************* //
Foam::faceMap
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
Definition: blockMeshMergeFast.C:90
Foam::PrimitivePatch< labelledTri, List, pointField, point >::points
const Field< point > & points() const
Return reference to global points.
Definition: PrimitivePatchTemplate.H:282
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:406
Foam::triSurface::writeOBJ
void writeOBJ(const bool writeSorted, Ostream &) const
Write to Ostream in OBJ (Lightwave) format.
Definition: writeOBJ.C:40
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
Foam::label
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::List< labelledTri >::size
label size() const
Return the number of elements in the UList.
Foam::triSurface::calcPatches
surfacePatchList calcPatches(labelList &faceMap) const
Sort faces according to region. Returns patch list.
Definition: triSurface.C:501
Foam::List
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: HashTable.H:59
Foam::List::size
void size(const label)
Override size to be inconsistent with allocated storage.
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:53