mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +03:00
0029711: General Fuse operation produces invalid result
The following improvements have been introduced in Boolean Operations algorithm s: 1. UBTree is replaced with EBTree in Boolean operations to be able to add/remove elements into the tree of bounding boxes. 2. Repeated (nested) intersection of sub-shapes is performed with argument vertices whose tolerances increased during the operation. 3. The algorithms of Edge/Edge and Edge/Face intersection have been improved for the cases when the intersection point is located close to the edge boundaries . 4. New procedure has been implemented to ensure forced creation of Edge/Face common blocks in cases when the edge is really close to the face. 5. Post-processing of Face/Face intersection results has been improved. 6. Extension of the planar faces for Plane/Plane intersection is avoided. 7. Builder Face now better classifies potentially internal edges relatively to new faces with filtering by bounding boxes. Side effect changes: 1. IntTools_ShrunkRange now keeps the length of the valid range of the edge. 2. The method BOPDS_DS::UpdateEdgeTolerance() has been removed as unused (replaced by the BOPAlgo_PaveFiller::UpdateEdgeTolerance()). Test case for the issue 0029900. Test case for the issue 0029711. Adjustments of the existing test cases. Avoid using uninitialized variables.
This commit is contained in:
@@ -128,7 +128,7 @@ void BOPTest::DebugCommands(Draw_Interpretor& theCommands)
|
||||
__FILE__, bopindex, g);
|
||||
theCommands.Add("bopsd", "Gets the Same domain shape. Use: bopsd #",
|
||||
__FILE__, bopsd, g);
|
||||
theCommands.Add("bopsc", "Shows the section curves. Use: bopsc [nF1 nF2]",
|
||||
theCommands.Add("bopsc", "Shows the section curves. Use: bopsc [nF1 [nF2]]",
|
||||
__FILE__, bopsc, g);
|
||||
theCommands.Add("boppb", "Shows information about pave blocks. Use: boppb [#e]",
|
||||
__FILE__, boppb, g);
|
||||
@@ -637,8 +637,8 @@ Standard_Integer bopsc(Draw_Interpretor& di,
|
||||
Standard_Integer n,
|
||||
const char** a)
|
||||
{
|
||||
if (n != 1 && n != 3) {
|
||||
di << "Shows the section curves. Use: bopsc [nF1 nF2]\n";
|
||||
if (n > 3) {
|
||||
di.PrintHelp(a[0]);
|
||||
return 1;
|
||||
}
|
||||
//
|
||||
@@ -658,11 +658,11 @@ Standard_Integer bopsc(Draw_Interpretor& di,
|
||||
BOPDS_ListIteratorOfListOfPaveBlock aItLPB;
|
||||
//
|
||||
nSF1 = nSF2 = -1;
|
||||
if (n == 3) {
|
||||
if (n > 1)
|
||||
nSF1 = Draw::Atoi(a[1]);
|
||||
if (n > 2)
|
||||
nSF2 = Draw::Atoi(a[2]);
|
||||
}
|
||||
//
|
||||
|
||||
BOPDS_VectorOfInterfFF& aFFs = pDS->InterfFF();
|
||||
//
|
||||
iCnt = 0;
|
||||
@@ -676,6 +676,10 @@ Standard_Integer bopsc(Draw_Interpretor& di,
|
||||
}
|
||||
iPriz = 1;
|
||||
}
|
||||
else if (n == 2) {
|
||||
if (!aFF.Contains(nSF1))
|
||||
continue;
|
||||
}
|
||||
//
|
||||
aFF.Indices(nF1, nF2);
|
||||
//
|
||||
|
Reference in New Issue
Block a user