ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / meshTools / triSurface / surfaceLocation / surfaceLocation.H
blobdf1721a6941fca263a636e6148a4a7298eea3686
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::surfaceLocation
27 Description
28     Contains information about location on a triSurface:
29     - pointIndexHit:
30         - location
31         - bool: hit/miss
32         - index (of triangle/point/edge)
33     - elementType():
34         - what index above relates to. In triangle::proxType
35     - triangle():
36         - last known triangle
38 SourceFiles
40 \*---------------------------------------------------------------------------*/
42 #ifndef surfaceLocation_H
43 #define surfaceLocation_H
45 #include "pointIndexHit.H"
46 #include "triPointRef.H"
47 #include "InfoProxy.H"
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 namespace Foam
54 // Forward declaration of classes
55 class triSurface;
57 /*---------------------------------------------------------------------------*\
58                            Class surfaceLocation Declaration
59 \*---------------------------------------------------------------------------*/
61 class surfaceLocation
63     public pointIndexHit
65     // Private data
67         triPointRef::proxType elementType_;
69         label triangle_;
71 public:
74     // Constructors
76         //- Construct null
77         surfaceLocation()
78         :
79             pointIndexHit(),
80             elementType_(triPointRef::NONE),
81             triangle_(-1)
82         {}
84         //- Construct from components
85         surfaceLocation
86         (
87             const pointIndexHit& pih,
88             const triPointRef::proxType elementType,
89             const label triangle
90         )
91         :
92             pointIndexHit(pih),
93             elementType_(elementType),
94             triangle_(triangle)
95         {}
97         //- Construct from Istream
98         surfaceLocation(Istream& is)
99         :
100             pointIndexHit(is),
101             elementType_(triPointRef::proxType(readLabel(is))),
102             triangle_(readLabel(is))
103         {}
106     // Member Functions
108         triPointRef::proxType& elementType()
109         {
110             return elementType_;
111         }
113         triPointRef::proxType elementType() const
114         {
115             return elementType_;
116         }
118         label& triangle()
119         {
120             return triangle_;
121         }
123         label triangle() const
124         {
125             return triangle_;
126         }
128         //- Normal. Approximate for points.
129         vector normal(const triSurface& s) const;
131         //- Return info proxy.
132         //  Used to print token information to a stream
133         InfoProxy<surfaceLocation> info() const
134         {
135             return *this;
136         }
138         //- Write info to os
139         void write(Ostream& os, const triSurface& s) const;
142     // IOstream Operators
144         friend Istream& operator>>(Istream& is, surfaceLocation& sl);
146         friend Ostream& operator<<(Ostream& os, const surfaceLocation& sl);
148         friend Ostream& operator<<
149         (
150             Ostream&,
151             const InfoProxy<surfaceLocation>&
152         );
156 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
158 } // End namespace Foam
160 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
162 #endif
164 // ************************************************************************* //