Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / applications / utilities / surface / surfaceOrient / surfaceOrient.C
blobe14746704dc7826e60fdce9db3621a01f4897ee7
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 Description
25     Set normal consistent with respect to a user provided 'outside' point.
26     If -inside the point is considered inside.
28 \*---------------------------------------------------------------------------*/
30 #include "argList.H"
31 #include "orientedSurface.H"
33 using namespace Foam;
35 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
38 // Main program:
40 int main(int argc, char *argv[])
42     argList::noParallel();
43     argList::validArgs.clear();
44     argList::validArgs.append("Foam surface file");
45     argList::validArgs.append("visiblePoint");
46     argList::validArgs.append("output file");
47     argList::validOptions.insert("inside", "");
48     argList args(argc, argv);
50     fileName surfFileName(args.additionalArgs()[0]);
51     Info<< "Reading surface from " << surfFileName << endl;
53     point visiblePoint(IStringStream(args.additionalArgs()[1])());
54     Info<< "Visible point " << visiblePoint << endl;
56     bool orientInside = args.optionFound("inside");
58     if (orientInside)
59     {
60         Info<< "Orienting surface such that visiblePoint " << visiblePoint
61             << " is inside" << endl;
62     }
63     else
64     {
65         Info<< "Orienting surface such that visiblePoint " << visiblePoint
66             << " is outside" << endl;
67     }
69     fileName outFileName(args.additionalArgs()[2]);
70     Info<< "Writing surface to " << outFileName << endl;
73     // Load surface
74     triSurface surf(surfFileName);
76     //orientedSurface normalSurf(surf, visiblePoint, !orientInside);
77     bool anyFlipped = orientedSurface::orient
78     (
79         surf,
80         visiblePoint,
81        !orientInside
82     );
84     if (anyFlipped)
85     {
86         Info<< "Flipped orientation of (part of) surface." << endl;
87     }
88     else
89     {
90         Info<< "Did not flip orientation of any triangle of surface." << endl;
91     }
93     Info<< "Writing new surface to " << outFileName << endl;
95     surf.write(outFileName);
97     Info << "End\n" << endl;
99     return 0;
103 // ************************************************************************* //