0028639: Improve performance of the IntPolyh_MaillageAffinage algorithm
[occt.git] / src / IntPolyh / IntPolyh_Couple.hxx
1 // Created on: 1999-04-08
2 // Created by: Fabrice SERVANT
3 // Copyright (c) 1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _IntPolyh_Couple_HeaderFile
18 #define _IntPolyh_Couple_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <Standard_Integer.hxx>
25 #include <Standard_Real.hxx>
26
27 //! The class represents the couple of indices with additional
28 //! characteristics such as analyzed flag and an angle.<br>
29 //! In IntPolyh_MaillageAffinage algorithm the class is used as a
30 //! couple of interfering triangles with the intersection angle.
31 class IntPolyh_Couple
32 {
33 public:
34
35   DEFINE_STANDARD_ALLOC
36
37   //! Constructor
38   IntPolyh_Couple() :
39     myIndex1(-1),myIndex2(-1),myAnalyzed(0),myAngle(-2.0)
40   {}
41   //! Constructor
42   IntPolyh_Couple(const Standard_Integer theTriangle1,
43                   const Standard_Integer theTriangle2,
44                   const Standard_Real theAngle = -2.0)
45   :
46     myIndex1(theTriangle1),
47     myIndex2(theTriangle2),
48     myAnalyzed(Standard_False),
49     myAngle(theAngle)
50   {}
51
52   //! Returns the first index
53   Standard_Integer FirstValue() const
54   {
55     return myIndex1;
56   }
57   //! Returns the second index
58   Standard_Integer SecondValue() const
59   {
60     return myIndex2;
61   }
62   //! Returns TRUE if the couple has been analyzed
63   Standard_Boolean IsAnalyzed() const
64   {
65     return myAnalyzed;
66   }
67   //! Returns the angle
68   Standard_Real Angle() const
69   {
70     return myAngle;
71   }
72   //! Sets the triangles
73   void SetCoupleValue(const Standard_Integer theInd1,
74                       const Standard_Integer theInd2)
75   {
76     myIndex1 = theInd1;
77     myIndex2 = theInd2;
78   }
79   //! Sets the analyzed flag
80   void SetAnalyzed(const Standard_Boolean theAnalyzed)
81   {
82     myAnalyzed = theAnalyzed;
83   }
84   //! Sets the angle
85   void SetAngle(const Standard_Real theAngle)
86   {
87     myAngle = theAngle;
88   }
89   //! Returns true if the Couple is equal to <theOther>
90   Standard_Boolean IsEqual (const IntPolyh_Couple& theOther) const
91   {
92     return (myIndex1 == theOther.myIndex1 && myIndex2 == theOther.myIndex2) ||
93            (myIndex1 == theOther.myIndex2 && myIndex2 == theOther.myIndex1);
94   }
95   //
96   //! Returns hash code
97   Standard_Integer HashCode (const Standard_Integer theUpper) const
98   {
99     return ::HashCode(myIndex1 + myIndex2, theUpper);
100   }
101   // Dump
102   Standard_EXPORT void Dump (const Standard_Integer v) const;
103
104 protected:
105
106 private:
107
108   Standard_Integer myIndex1;
109   Standard_Integer myIndex2;
110   Standard_Boolean myAnalyzed;
111   Standard_Real myAngle;
112
113 };
114
115 #endif // _IntPolyh_Couple_HeaderFile