1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
7 -------------------------------------------------------------------------------
9 This file is part of OpenFOAM.
11 OpenFOAM is free software: you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version 3 of the License, or
14 (at your option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "X3DsurfaceFormat.H"
29 #include "IStringStream.H"
34 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
37 Foam::fileFormats::X3DsurfaceFormat<Face>::X3DsurfaceFormat()
41 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
44 void Foam::fileFormats::X3DsurfaceFormat<Face>::write
46 const fileName& filename,
47 const MeshedSurfaceProxy<Face>& surf
50 const pointField& pointLst = surf.points();
51 const List<Face>& faceLst = surf.faces();
52 const List<label>& faceMap = surf.faceMap();
54 // for no zones, suppress the group name
55 const List<surfZone>& zones =
57 surf.surfZones().empty()
58 ? surfaceFormatsCore::oneZone(faceLst, "")
62 const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1);
64 OFstream os(filename);
69 "fileFormats::X3DsurfaceFormat::write"
70 "(const fileName&, const MeshedSurfaceProxy<Face>&)"
72 << "Cannot open file for writing " << filename
85 // NOTE: we could provide an optimized IndexedTriangleSet output for
86 // triangulated surfaces too
89 " <IndexedFaceSet coordIndex='\n";
94 const surfZone& zone = zones[zoneI];
98 forAll(zone, localFaceI)
100 const Face& f = faceLst[faceMap[faceIndex++]];
111 forAll(zone, localFaceI)
113 const Face& f = faceLst[faceIndex++];
126 " <Coordinate point='\n";
128 // Write vertex coords
129 forAll(pointLst, ptI)
131 const point& pt = pointLst[ptI];
133 os << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl;
137 "' />\n" // end Coordinate
138 " </IndexedFaceSet>\n"
146 // ************************************************************************* //