mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-09-18 14:27:39 +03:00
0029972: Intersection curve has a weird gap in the middle of it
1. The condition of WLine breaking (in IntWalk_IWalking algorithm) has become more independent of the input tolerance. 2. Currently the algorithm of IntPatch_Points of WLine processing depends on the algorithm of obtaining the WLine. 3. The methods IntSurf_LineOn2S::Add(...) and IntSurf_LineOn2S::SetUV(...) have become not inline (see the message ~0077431 in the issue #29866).
This commit is contained in:
@@ -74,7 +74,7 @@ void IntWalk_IWalking::ComputeOpenLine(const TColStd_SequenceOfReal& Umult,
|
||||
Handle(IntWalk_TheIWLine) CurrentLine; // line under construction
|
||||
Standard_Boolean Tgtend;
|
||||
|
||||
IntWalk_StatusDeflection aStatus, StatusPrecedent;
|
||||
IntWalk_StatusDeflection aStatus = IntWalk_OK, StatusPrecedent = IntWalk_OK;
|
||||
|
||||
Standard_Integer NbDivision;
|
||||
// number of divisions of step for each section
|
||||
|
@@ -446,9 +446,11 @@ void IntWalk_IWalking::ComputeCloseLine(const TColStd_SequenceOfReal& Umult,
|
||||
if (wd2[I].etat > 12) { //line closed good case
|
||||
CurrentLine->AddStatusFirstLast(Standard_True,
|
||||
Standard_False,Standard_False);
|
||||
CurrentLine->AddPoint(CurrentLine->Value(1));
|
||||
CurrentLine->AddPoint(CurrentLine->Value(1));
|
||||
}
|
||||
else if (N >0) { //point of stop given at input
|
||||
else if ((N >0) && (Pnts1.Length() >= N))
|
||||
{
|
||||
//point of stop given at input
|
||||
PathPnt = Pnts1.Value(N);
|
||||
CurrentLine->AddStatusLast(Standard_True,N,PathPnt);
|
||||
AddPointInCurrentLine(N,PathPnt,CurrentLine);
|
||||
|
@@ -74,18 +74,19 @@ IntWalk_StatusDeflection IntWalk_IWalking::TestDeflection
|
||||
|
||||
gp_Vec Corde(previousPoint.Value(), sp.Point());
|
||||
|
||||
const Standard_Real Norme = Corde.SquareMagnitude(),
|
||||
aTol = epsilon*Precision::PConfusion();
|
||||
const Standard_Real Norme = Corde.SquareMagnitude();
|
||||
|
||||
//if ((++NbPointsConfondusConsecutifs < 10) && (Norme <= epsilon)) { // the square is already taken in the constructor
|
||||
if ((Norme <= epsilon) && ((Duv <= aTol) || (StatusPrecedent != IntWalk_OK)))
|
||||
if ((Norme <= 4.0*Precision::SquareConfusion()) &&
|
||||
((Duv <= Precision::SquarePConfusion()) || (StatusPrecedent != IntWalk_OK)))
|
||||
{ // the square is already taken in the constructor
|
||||
aStatus = IntWalk_PointConfondu;
|
||||
if (StatusPrecedent == IntWalk_PasTropGrand) {
|
||||
if (StatusPrecedent == IntWalk_PasTropGrand)
|
||||
{
|
||||
return IntWalk_ArretSurPointPrecedent;
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
Standard_Real Cosi = Corde * previousd3d;
|
||||
Standard_Real Cosi2 = 0.0;
|
||||
|
||||
|
Reference in New Issue
Block a user