1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0028473: Incorrect result of 3D offset operation in mode Complete, Join type Intersection (spike is created)

Looking for inverted edges among the neutral ones while checking the offset edges on validity (BRepOffset_MakeOffset_1::FindInvalidEdges).

Test cases for the issue.
This commit is contained in:
emv
2017-02-20 10:54:22 +03:00
parent d86f61c932
commit e36b5effa4
11 changed files with 89 additions and 13 deletions

View File

@@ -196,7 +196,6 @@ static
const TopTools_DataMapOfShapeListOfShape& theOEImages,
const TopTools_DataMapOfShapeListOfShape& theOEOrigins,
const TopTools_DataMapOfShapeListOfShape& theEdgesOrigins,
const TopTools_IndexedDataMapOfShapeListOfShape& theDMEF,
const TopTools_IndexedDataMapOfShapeListOfShape& theDMVE,
const TopTools_IndexedMapOfShape& theMEdges,
TopTools_MapOfShape& theMEInverted);
@@ -1675,7 +1674,7 @@ void FindInvalidEdges(const TopoDS_Face& theF,
// check if the edge has been inverted
Standard_Boolean bInverted = !aNbE ? Standard_False :
CheckInverted(aEIm, aFOr, theOEImages, theOEOrigins,
theEdgesOrigins, aDMEF, aDMVE, aMEdges, theMEInverted);
theEdgesOrigins, aDMVE, aMEdges, theMEInverted);
//
if (!bInverted || !aNbVOr) {
theValidEdges.Add(aEIm);
@@ -2162,16 +2161,11 @@ Standard_Boolean CheckInverted(const TopoDS_Edge& theEIm,
const TopTools_DataMapOfShapeListOfShape& theOEImages,
const TopTools_DataMapOfShapeListOfShape& theOEOrigins,
const TopTools_DataMapOfShapeListOfShape& theEdgesOrigins,
const TopTools_IndexedDataMapOfShapeListOfShape& theDMEF,
const TopTools_IndexedDataMapOfShapeListOfShape& theDMVE,
const TopTools_IndexedMapOfShape& theMEdges,
TopTools_MapOfShape& theMEInverted)
{
if (theDMEF.FindFromKey(theEIm).Extent() > 1) {
return Standard_False;
}
//
// it is necessary to compare the direction from first vertex
// It is necessary to compare the direction from first vertex
// to the last vertex on the original edge with the
// same direction on the new edge. If the directions
// will be different - the edge has been inverted.