BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / meshTools / triSurface / orientedSurface / orientedSurface.H
blob7b010d55a57299a6947099fd535f788a31feb273
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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
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
19     for more details.
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 Class
25     Foam::orientedSurface
27 Description
28     Given point flip all faces such that normals point in same direction.
30 SourceFiles
31     orientedSurface.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef orientedSurface_H
36 #define orientedSurface_H
38 #include "triSurface.H"
39 #include "typeInfo.H"
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 namespace Foam
46 // Forward declaration of classes
48 /*---------------------------------------------------------------------------*\
49                            Class orientedSurface Declaration
50 \*---------------------------------------------------------------------------*/
52 class orientedSurface
54     public triSurface
56     // Data types
58         //- Enumeration listing whether face needs to be flipped.
59         enum sideStat
60         {
61             UNVISITED,
62             FLIP,
63             NOFLIP
64         };
67     // Private Member Functions
69         //- Return true if edge is used in opposite order in faces
70         static bool consistentEdge
71         (
72             const edge& e,
73             const triSurface::FaceType& f0,
74             const triSurface::FaceType& f1
75         );
77         //- From changed faces get the changed edges
78         static labelList faceToEdge
79         (
80             const triSurface&,
81             const labelList& changedFaces
82         );
84         //- From changed edges check the orientation of the connected faces
85         //  and flip them. Return changed faces.
86         static labelList edgeToFace
87         (
88             const triSurface&,
89             const labelList& changedEdges,
90             labelList& flip
91         );
93         //- Walk from face across connected faces. Change orientation to be
94         //  consistent with startFaceI.
95         static void walkSurface
96         (
97             const triSurface& s,
98             const label startFaceI,
99             labelList& flipState
100         );
102         //- Given nearest point and face check orientation to nearest face
103         //  and flip if nessecary (only marked in flipState) and propagate.
104         static void propagateOrientation
105         (
106             const triSurface&,
107             const point& outsidePoint,
108             const bool orientOutside,
109             const label nearestFaceI,
110             const point& nearestPt,
111             labelList& flipState
112         );
114         //- Given flipState reverse triangles of *this. Return true if
115         //  anything flipped.
116         static bool flipSurface(triSurface& s, const labelList& flipState);
118 public:
120     ClassName("orientedSurface");
123     // Constructors
125         //- Construct null
126         orientedSurface();
128         //- Construct from triSurface and sample point which is either
129         //  outside (orientOutside = true) or inside (orientOutside = false).
130         //  Uses linear search to find nearest.
131         orientedSurface
132         (
133             const triSurface&,
134             const point& samplePoint,
135             const bool orientOutside = true
136         );
138         //- Construct from triSurface. Calculates outside point as being
139         //  outside the bounding box of the surface.
140         orientedSurface(const triSurface&, const bool orientOutside = true);
143     // Member Functions
145         //- Flip faces such that normals are consistent with point:
146         //  orientOutside=true : point outside surface
147         //  orientOutside=false : point inside surface
148         static bool orient(triSurface&, const point&, const bool orientOutside);
153 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
155 } // End namespace Foam
157 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
159 #endif
161 // ************************************************************************* //