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

0028017: Unexpected result of General Fuse operation

Several improvements have been made in BO code to fix the bug:

- Create empty edge-edge interference if intersection is close to an end vertex. This will help to avoid creation of unnecessary edge-face intersections.
- Improve PutPaveOnCurve() method to join nearly located vertices when they are put on the same section curve.
- Add processing of same-domain vertices for section edges in UpdatePaveBlocks() method.
- Improve the method CorrectWires() in order to not increase vertex tolerance if it will cover the major part of an edge.
- Replace vertices of section edges by same-domain equivalents.
- In the algorithm BOPAlgo_WireSplitter, correct angles computation and evaluation, taking into account periodicity.
- Modify PostTreatFF to properly take into account the orientations of coinciding section edges.
- In IntTools_Context::ComputePE, check distance from the point to vertices of the edge if the projection to the curve is failure.

Tests update:
- test offset\faces_type_i\C9 has been updated; now instead of returning bad shape it returns null result.

Notes for porting:
- Modify BopAlgo_PaveFiller so that on output each interference refers to the new vertex that will hit in the result (same-domain of the initial new vertex).
- Make the method BOPDS_DS::Index() returning valid index for new shapes.

// eliminate compile warning on VC14
This commit is contained in:
msv
2016-12-16 11:59:13 +03:00
committed by apn
parent 5200cc4aa3
commit 24542bc056
13 changed files with 356 additions and 206 deletions

View File

@@ -576,21 +576,6 @@ Standard_Integer bopindex (Draw_Interpretor& di,
di << " Index: " << ind << "\n";
}
else {
Standard_Integer i1, i2;
//
i1 = pDS->NbSourceShapes();
i2 = pDS->NbShapes();
for (ind = i1; ind < i2; ++ind) {
const TopoDS_Shape& aSx = pDS->Shape(ind);
if (aSx.IsSame(aS)) {
di << " Index: " << ind << "\n";
bFound = Standard_True;
break;
}
}
}
//
if (!bFound) {
di << " DS does not contain the shape\n";
}
//