Forward compatibility: flex
[foam-extend-3.2.git] / src / dynamicMesh / dynamicTopoFvMesh / convexSetAlgorithm / triIntersection.H
blob324767706052dbe6fb4da0864119699ddb3fc4b4
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 Class
25     triIntersection
27 Description
28     Implementation of the triangle intersection algorithm
30 Implemented by
31     Sandeep Menon
32     University of Massachusetts Amherst
33     All rights reserved
35 SourceFiles
36     triIntersectionI.H
38 \*---------------------------------------------------------------------------*/
40 #ifndef triIntersection_H
41 #define triIntersection_H
43 #include "point.H"
44 #include "label.H"
45 #include "Tuple2.H"
46 #include "FixedList.H"
47 #include "DynamicList.H"
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 namespace Foam
54 /*---------------------------------------------------------------------------*\
55                        Class triIntersection Declaration
56 \*---------------------------------------------------------------------------*/
58 class triIntersection
60     // Private data
62         //- Const reference to clipping triangle
63         const FixedList<point, 3>& clipTri_;
65         //- Clip triangle normal
66         vector tNorm_;
68         //- Hessian-normal plane definition
69         typedef Tuple2<vector, scalar> hPlane;
71         FixedList<hPlane, 3> clipPlanes_;
73         //- Triangles used as temporaries
74         DynamicList<FixedList<point, 3> > inside_;
76         //- All intersection tris
77         DynamicList<FixedList<point, 3> > allTris_;
79     // Private Member Functions
81         //- Disallow default bitwise copy construct
82         triIntersection(const triIntersection&);
84         //- Disallow default bitwise assignment
85         void operator=(const triIntersection&);
87         //- Compute clip-planes
88         inline void computeClipPlanes();
90         //- Split and decompose
91         inline void splitAndDecompose
92         (
93             const label triPlaneIndex,
94             FixedList<point, 3>& tri,
95             DynamicList<FixedList<point, 3> >& decompTris
96         ) const;
98 public:
100     // Constructors
102         //- Construct from components
103         inline triIntersection(const FixedList<point, 3>& clipTri);
105     // Destructor
107         inline ~triIntersection();
109     // Member Functions
111         //- Evaluate for intersections against input triangle
112         inline bool evaluate(const FixedList<point, 3>& subjectTri);
114         //- Return intersections
115         inline const DynamicList<FixedList<point, 3> >& getIntersection() const;
117         //- Evaluate and return area / centroid
118         inline void getAreaAndCentre(scalar& area, vector& centre) const;
121 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
123 } // End namespace Foam
125 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
127 #include "triIntersectionI.H"
129 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
131 #endif
133 // ************************************************************************* //