Forward compatibility: flex
[foam-extend-3.2.git] / applications / utilities / postProcessing / dataConversion / foamToVTK / faMeshWriter.C
blob9f1416b80b8a3b986d100db884fb39331d2c1b26
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 "faMeshWriter.H"
27 #include "writeFuns.H"
29 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
31 // Construct from components
32 Foam::faMeshWriter::faMeshWriter
34     const faMesh& aMesh,
35     const bool binary,
36     const fileName& fName
39     aMesh_(aMesh),
40     binary_(binary),
41     os_(fName.c_str())
43     // Write header
44     writeFuns::writeHeader(os_, binary_, faMesh::typeName);
45     os_ << "DATASET UNSTRUCTURED_GRID" << std::endl;
47     // Write topology
48     label nFaceVerts = 0;
50     const faceList& pp = aMesh.faces();
52     forAll(pp, faceI)
53     {
54         nFaceVerts += pp[faceI].size() + 1;
55     }
57     os_ << "POINTS " << aMesh.nPoints() << " float" << std::endl;
59     DynamicList<floatScalar> ptField(3*aMesh.nPoints());
61     writeFuns::insert(aMesh.points(), ptField);
62     writeFuns::write(os_, binary_, ptField);
64     os_ << "CELLS " << aMesh.nFaces() << ' ' << nFaceVerts
65         << std::endl;
67     DynamicList<label> vertLabels(nFaceVerts);
68     DynamicList<label> faceTypes(nFaceVerts);
70     forAll(pp, faceI)
71     {
72         const face& f = pp[faceI];
74         const label fSize = f.size();
75         vertLabels.append(fSize);
77         writeFuns::insert(f, vertLabels);
79         if (fSize == 3)
80         {
81             faceTypes.append(vtkTopo::VTK_TRIANGLE);
82         }
83         else if (fSize == 4)
84         {
85             faceTypes.append(vtkTopo::VTK_QUAD);
86         }
87         else
88         {
89             faceTypes.append(vtkTopo::VTK_POLYGON);
90         }
91     }
93     writeFuns::write(os_, binary_, vertLabels);
95     os_ << "CELL_TYPES " << aMesh.nFaces() << std::endl;
97     writeFuns::write(os_, binary_, faceTypes);
101 // ************************************************************************* //