1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-19 13:40:49 +03:00

0033193: Modeling Algorithms - Regression: UnifySameDomain raises SIGSEGV

ShapeUpgrade_UnifySameDomain.cxx - method ReconstructMissedSeam is improved.

tests/bugs/heal/bug33193 - new test case added
This commit is contained in:
ifv
2022-11-12 20:45:36 +03:00
committed by Vadim Glukhikh
parent f706dd34b3
commit 195aac3a42
2 changed files with 38 additions and 1 deletions

View File

@@ -753,7 +753,25 @@ static void ReconstructMissedSeam(const TopTools_SequenceOfShape& theRemovedEdge
if ((theUperiod != 0. && aUdiff > theUperiod/2) ||
(theVperiod != 0. && aVdiff > theVperiod/2))
{
anEdge.Reverse();
if (aLastVertex.IsSame(theCurVertex) || (theUperiod != 0. && theVperiod != 0.))
{
anEdge.Reverse();
}
else
{
TopAbs_Orientation anOri = anEdge.Orientation();
anEdge.Orientation(TopAbs_FORWARD);
Handle(Geom2d_Curve) aPC1 = BRep_Tool::CurveOnSurface(anEdge, theFrefFace, Param1, Param2);
anEdge.Reverse();
Handle(Geom2d_Curve) aPC2 = BRep_Tool::CurveOnSurface(anEdge, theFrefFace, Param1, Param2);
anEdge.Reverse(); // again FORWARD
TopLoc_Location aLoc;
BRep_Builder aBB;
Standard_Real aTol = BRep_Tool::Tolerance(anEdge);
const Handle(Geom_Surface)& aSurf = BRep_Tool::Surface(theFrefFace, aLoc);
aBB.UpdateEdge(anEdge, aPC2, aPC1, aSurf, aLoc, aTol);
anEdge.Orientation(anOri);
}
aPC = BRep_Tool::CurveOnSurface(anEdge, theFrefFace, Param1, Param2);
aParam = (anEdge.Orientation() == TopAbs_FORWARD)? Param1 : Param2;
aPoint = aPC->Value(aParam);