{
myS = (Adaptor3d_SurfacePtr)&S;
mySinit = Standard_True;
- myPoints.Clear();
- mySqDistances.Clear();
+ myPoints.clear();
+ mySqDistances.clear();
myTarget = Extrema_ExtFlag_MINMAX;
myBestSqDistance = -1;
}
myPinit = Standard_True;
myTarget = theTarget;
myBestSqDistance = (myTarget == Extrema_ExtFlag_MIN ? RealLast() : RealFirst());
- myPoints.Clear();
- mySqDistances.Clear();
+ myPoints.clear();
+ mySqDistances.clear();
}
//=============================================================================
// Comparison of solution with previous solutions
Standard_Real tol2d = Precision::SquarePConfusion();
- Standard_Integer i = 0, nbSol = mySqDistances.Length();
+ std::size_t i = 0, nbSol = mySqDistances.size();
for (; i < nbSol; i++)
{
Standard_Real aU, aV;
- Extrema_POnSurf& aPOnSurf = myPoints (i);
+ Extrema_POnSurf& aPOnSurf = myPoints[i];
aPOnSurf.Parameter (aU, aV);
if (((myU - aU) * (myU - aU) + (myV - aV) * (myV - aV)) <= tol2d)
{
if (myTarget != Extrema_ExtFlag_MINMAX)
{
// Check if new solution gives better distance than the existing solution.
- Standard_Real& anOldSqDist = mySqDistances (i);
+ Standard_Real& anOldSqDist = mySqDistances[i];
if ((myTarget == Extrema_ExtFlag_MIN && aNewSqDist < anOldSqDist) ||
(myTarget == Extrema_ExtFlag_MAX && aNewSqDist > anOldSqDist))
{
}
if (i < nbSol)
return 0;
- mySqDistances.Append (aNewSqDist);
- myPoints.Append (Extrema_POnSurf (myU, myV, myPs));
+ mySqDistances.push_back (aNewSqDist);
+ myPoints.push_back (Extrema_POnSurf (myU, myV, myPs));
return 0;
}
//=============================================================================
Standard_Integer Extrema_FuncPSNorm::NbExt () const
{
- return mySqDistances.Length();
+ return static_cast<Standard_Integer>(mySqDistances.size());
}
//=============================================================================
Standard_Real Extrema_FuncPSNorm::SquareDistance (const Standard_Integer N) const
{
if (!myPinit || !mySinit) throw Standard_TypeMismatch();
- return mySqDistances (N - 1);
+ return mySqDistances [N - 1];
}
//=============================================================================
const Extrema_POnSurf& Extrema_FuncPSNorm::Point (const Standard_Integer N) const
{
if (!myPinit || !mySinit) throw Standard_TypeMismatch();
- return myPoints (N - 1);
+ return myPoints [N - 1];
}
#include <gp_Pnt.hxx>
#include <Adaptor3d_SurfacePtr.hxx>
#include <Standard_Real.hxx>
-#include <TColStd_SequenceOfReal.hxx>
-#include <Extrema_SequenceOfPOnSurf.hxx>
#include <Extrema_ExtFlag.hxx>
#include <Standard_Boolean.hxx>
#include <math_FunctionSetWithDerivatives.hxx>
#include <Standard_Integer.hxx>
#include <math_Vector.hxx>
-#include <NCollection_Vector.hxx>
+#include <vector>
class Standard_OutOfRange;
class gp_Pnt;
class Adaptor3d_Surface;
Standard_Real myU;
Standard_Real myV;
gp_Pnt myPs;
- NCollection_Vector<Standard_Real> mySqDistances;
- NCollection_Vector<Extrema_POnSurf> myPoints;
+ std::vector<Standard_Real> mySqDistances;
+ std::vector<Extrema_POnSurf> myPoints;
Standard_Boolean myPinit;
Standard_Boolean mySinit;
Extrema_ExtFlag myTarget;
if (U1 != U2 || V1 != V2)
{
gp_Pnt aPMid = myS->Value ((U1 + U2) * 0.5, (V1 + V2) * 0.5);
- aGridBox.Add (aPMid);
gp_Vec aDir (aPMin.Value(), aPMax.Value());
- if (aDir.SquareMagnitude() > gp::Resolution())
+ Standard_Real diag = aDir.SquareMagnitude();
+ if (diag > gp::Resolution())
{
+ //aDir /= Sqrt (diag);
+ //gp_XYZ aPL = aPMin.Value().XYZ() + ((aPMid.XYZ() - aPMin.Value().XYZ()).Dot (aDir.XYZ())) * aDir.XYZ();
+ //gp_XYZ aVMid (aPL - aPMid.XYZ());
+ //aGridBox.Add (gp_Pnt (aPL - 1.1 * aVMid));
+ //aGridBox.Add (gp_Pnt (aPL + 1.1 * aVMid));
aGridBox.Enlarge (gp_Lin (aPMin.Value(), aDir).Distance (aPMid));
}
+ else
+ {
+ aGridBox.Add (aPMid);
+ }
}
aGridSet.CellBoxSet->UpdateBox (iCell, Bnd_Tools::Bnd2BVH (aGridBox));