mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +03:00
0028639: Improve performance of the IntPolyh_MaillageAffinage algorithm
The following improvements have been made: 1. Linking edges to triangles while creating the edges. 2. Replacing the array of couples of intersecting triangles with the list to avoid unnecessary allocations of memory. 3. Using the algorithm of unbalanced binary tree when looking for pairs of interfering triangles. 4. Building bounding boxes for the triangles only once and then reusing it. 5. Making the simple methods of the IntPolyh_Point, IntPolyh_Edge, IntPolyh_Triangle, IntPolyh_Couple classes inline. 6. The following methods of the *IntPolyh_Triangle* class have been removed as unused: - *CheckCommonEdge* - *SetEdgeandOrientation* - *MultipleMiddleRefinement2*. 7. The method *IntPolyh_Triangle::TriangleDeflection* has been replaced with the *IntPolyh_Triangle::ComputeDeflection*. 8. The following methods of the *IntPolyh_MaillageAffinage* class have been removed as unused: - *LinkEdges2Triangles*; - *TriangleEdgeContact2*; - *StartingPointsResearch2*; - *NextStartingPointsResearch2*; - *TriangleComparePSP*; - *StartPointsCalcul*.
This commit is contained in:
@@ -24,60 +24,92 @@
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
|
||||
|
||||
//! couple of triangles
|
||||
class IntPolyh_Couple
|
||||
//! The class represents the couple of indices with additional
|
||||
//! characteristics such as analyzed flag and an angle.<br>
|
||||
//! In IntPolyh_MaillageAffinage algorithm the class is used as a
|
||||
//! couple of interfering triangles with the intersection angle.
|
||||
class IntPolyh_Couple
|
||||
{
|
||||
public:
|
||||
|
||||
DEFINE_STANDARD_ALLOC
|
||||
|
||||
|
||||
Standard_EXPORT IntPolyh_Couple();
|
||||
|
||||
Standard_EXPORT IntPolyh_Couple(const Standard_Integer i1, const Standard_Integer i2);
|
||||
|
||||
Standard_EXPORT Standard_Integer FirstValue() const;
|
||||
|
||||
Standard_EXPORT Standard_Integer SecondValue() const;
|
||||
|
||||
Standard_EXPORT Standard_Integer AnalyseFlagValue() const;
|
||||
|
||||
Standard_EXPORT Standard_Real AngleValue() const;
|
||||
|
||||
Standard_EXPORT void SetCoupleValue (const Standard_Integer v, const Standard_Integer w);
|
||||
|
||||
Standard_EXPORT void SetAnalyseFlag (const Standard_Integer v);
|
||||
|
||||
Standard_EXPORT void SetAngleValue (const Standard_Real ang);
|
||||
|
||||
//! Constructor
|
||||
IntPolyh_Couple() :
|
||||
myIndex1(-1),myIndex2(-1),myAnalyzed(0),myAngle(-2.0)
|
||||
{}
|
||||
//! Constructor
|
||||
IntPolyh_Couple(const Standard_Integer theTriangle1,
|
||||
const Standard_Integer theTriangle2,
|
||||
const Standard_Real theAngle = -2.0)
|
||||
:
|
||||
myIndex1(theTriangle1),
|
||||
myIndex2(theTriangle2),
|
||||
myAnalyzed(Standard_False),
|
||||
myAngle(theAngle)
|
||||
{}
|
||||
|
||||
//! Returns the first index
|
||||
Standard_Integer FirstValue() const
|
||||
{
|
||||
return myIndex1;
|
||||
}
|
||||
//! Returns the second index
|
||||
Standard_Integer SecondValue() const
|
||||
{
|
||||
return myIndex2;
|
||||
}
|
||||
//! Returns TRUE if the couple has been analyzed
|
||||
Standard_Boolean IsAnalyzed() const
|
||||
{
|
||||
return myAnalyzed;
|
||||
}
|
||||
//! Returns the angle
|
||||
Standard_Real Angle() const
|
||||
{
|
||||
return myAngle;
|
||||
}
|
||||
//! Sets the triangles
|
||||
void SetCoupleValue(const Standard_Integer theInd1,
|
||||
const Standard_Integer theInd2)
|
||||
{
|
||||
myIndex1 = theInd1;
|
||||
myIndex2 = theInd2;
|
||||
}
|
||||
//! Sets the analyzed flag
|
||||
void SetAnalyzed(const Standard_Boolean theAnalyzed)
|
||||
{
|
||||
myAnalyzed = theAnalyzed;
|
||||
}
|
||||
//! Sets the angle
|
||||
void SetAngle(const Standard_Real theAngle)
|
||||
{
|
||||
myAngle = theAngle;
|
||||
}
|
||||
//! Returns true if the Couple is equal to <theOther>
|
||||
Standard_Boolean IsEqual (const IntPolyh_Couple& theOther) const
|
||||
{
|
||||
return (myIndex1 == theOther.myIndex1 && myIndex2 == theOther.myIndex2) ||
|
||||
(myIndex1 == theOther.myIndex2 && myIndex2 == theOther.myIndex1);
|
||||
}
|
||||
//
|
||||
//! Returns hash code
|
||||
Standard_Integer HashCode (const Standard_Integer theUpper) const
|
||||
{
|
||||
return ::HashCode(myIndex1 + myIndex2, theUpper);
|
||||
}
|
||||
// Dump
|
||||
Standard_EXPORT void Dump (const Standard_Integer v) const;
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
Standard_Integer t1;
|
||||
Standard_Integer t2;
|
||||
Standard_Integer ia;
|
||||
Standard_Real angle;
|
||||
|
||||
Standard_Integer myIndex1;
|
||||
Standard_Integer myIndex2;
|
||||
Standard_Boolean myAnalyzed;
|
||||
Standard_Real myAngle;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _IntPolyh_Couple_HeaderFile
|
||||
|
Reference in New Issue
Block a user