Better bounding on topo change
[foam-extend-3.2.git] / src / surfMesh / surfaceFormats / wrl / WRLsurfaceFormat.C
blob88f5a801e6350ec59f6c3279c4112415766f44b2
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.
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.
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.
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/>.
24 \*---------------------------------------------------------------------------*/
26 #include "WRLsurfaceFormat.H"
28 #include "Ostream.H"
29 #include "OFstream.H"
30 #include "ListOps.H"
32 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
34 template<class Face>
35 Foam::fileFormats::WRLsurfaceFormat<Face>::WRLsurfaceFormat()
39 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
41 template<class Face>
42 void Foam::fileFormats::WRLsurfaceFormat<Face>::write
44     const fileName& filename,
45     const MeshedSurfaceProxy<Face>& surf
48     const pointField& pointLst = surf.points();
49     const List<Face>&  faceLst = surf.faces();
50     const List<label>& faceMap = surf.faceMap();
52     // for no zones, suppress the group name
53     const List<surfZone>& zones =
54     (
55         surf.surfZones().size() > 1
56       ? surf.surfZones()
57       : WRLsurfaceFormat::oneZone(faceLst, "")
58     );
60     const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1);
62     OFstream os(filename);
63     if (!os.good())
64     {
65         FatalErrorIn
66         (
67             "fileFormats::WRLsurfaceFormat::write"
68             "(const fileName&, const MeshedSurfaceProxy<Face>&)"
69         )
70             << "Cannot open file for writing " << filename
71             << exit(FatalError);
72     }
74     writeHeader(os, pointLst, faceLst.size(), zones);
76     os  << "\n"
77         "Group {\n"
78         " children [\n"
79         "  Shape {\n";
81    writeAppearance(os);
83    os  <<
84         "   geometry IndexedFaceSet {\n"
85         "    coord Coordinate {\n"
86         "     point [\n";
88     // Write vertex coords
89     forAll(pointLst, ptI)
90     {
91         const point& pt = pointLst[ptI];
93         os  << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl;
94     }
96     os  <<
97         "     ]\n"                     // end point
98         "    }\n"                      // end coord Coordinate
99         "    coordIndex [\n";
101     label faceIndex = 0;
102     forAll(zones, zoneI)
103     {
104         const surfZone& zone = zones[zoneI];
106         if (useFaceMap)
107         {
108             forAll(zone, localFaceI)
109             {
110                 const Face& f = faceLst[faceMap[faceIndex++]];
112                 forAll(f, fp)
113                 {
114                     os << f[fp] << ' ';
115                 }
116                 os << "-1,\n";
117             }
118         }
119         else
120         {
121             forAll(zone, localFaceI)
122             {
123                 const Face& f = faceLst[faceIndex++];
125                 forAll(f, fp)
126                 {
127                     os << ' ' << f[fp];
128                 }
129                 os << " -1,\n";
130             }
131         }
132     }
134     os  <<
135         "    ]\n"                      // end coordIndex
136         "   }\n"                       // end geometry IndexedFaceSet
137         "  }\n"                        // end Shape
138         " ]\n"                         // end children
139         "}\n";                         // end Group
143 // ************************************************************************* //