BUGFIX: Uninitialised member variables
[foam-extend-3.2.git] / applications / utilities / surface / surfaceClean / surfaceClean.C
blobc5150c4140f2b718eeab91c8e19e8db6f997c40e
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Application
26     surfaceClean
28 Description
29     - collapses small edges, removing triangles.
30     - converts sliver triangles into split edges by projecting point onto
31       base of triangle.
33 \*---------------------------------------------------------------------------*/
35 #include "triSurface.H"
36 #include "argList.H"
37 #include "OFstream.H"
39 #include "collapseBase.H"
40 #include "collapseEdge.H"
42 using namespace Foam;
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 // Main program:
48 int main(int argc, char *argv[])
50     argList::validArgs.clear();
51     argList::noParallel();
52     argList::validArgs.append("surface file");
53     argList::validArgs.append("min length");
54     argList::validArgs.append("output surface file");
55     argList args(argc, argv);
57     fileName inFileName(args.additionalArgs()[0]);
58     scalar minLen(readScalar(IStringStream(args.additionalArgs()[1])()));
59     fileName outFileName(args.additionalArgs()[2]);
61     Pout<< "Reading surface " << inFileName << nl
62         << "Collapsing all triangles with edges or heights < " << minLen << nl
63         << "Writing result to " << outFileName << nl << endl;
66     Pout<< "Reading surface from " << inFileName << " ..." << nl << endl;
67     triSurface surf(inFileName);
68     surf.writeStats(Pout);
71     Pout<< "Collapsing triangles to edges ..." << nl << endl;
73     while (true)
74     {
75         label nEdgeCollapse = collapseEdge(surf, minLen);
77         if (nEdgeCollapse == 0)
78         {
79             break;
80         }
81     }
82     while (true)
83     {
84         label nSplitEdge = collapseBase(surf, minLen);
86         if (nSplitEdge == 0)
87         {
88             break;
89         }
90     }
92     Pout<< nl << "Resulting surface:" << endl;
93     surf.writeStats(Pout);
94     Pout<< nl;
96     Pout<< "Writing refined surface to " << outFileName << " ..." << endl;
97     surf.write(outFileName);
98     Pout<< nl;
100     Pout<< "End\n" << endl;
102     return 0;
106 // ************************************************************************* //