From 1abdd41c29b3e48fbcb4ab59fd5e2e4e3ec89c14 Mon Sep 17 00:00:00 2001 From: kgv Date: Mon, 23 Nov 2020 17:58:01 +0300 Subject: [PATCH] 0031955: Visualization - Graphic3d_CView::Erase() should always remove structure from myStructsToCompute [OCCT 7.2.0 backport] --- src/Graphic3d/Graphic3d_CView.cxx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Graphic3d/Graphic3d_CView.cxx b/src/Graphic3d/Graphic3d_CView.cxx index 2a0e8032ac..24f64919ad 100644 --- a/src/Graphic3d/Graphic3d_CView.cxx +++ b/src/Graphic3d/Graphic3d_CView.cxx @@ -847,24 +847,23 @@ void Graphic3d_CView::Erase (const Handle(Graphic3d_Structure)& theStructure) return; } - Graphic3d_TypeOfAnswer anAnswer = acceptDisplay (theStructure->Visual()); - if (!ComputedMode()) - { - anAnswer = Graphic3d_TOA_YES; - } - + const Graphic3d_TypeOfAnswer anAnswer = myIsInComputedMode ? acceptDisplay (theStructure->Visual()) : Graphic3d_TOA_YES; if (anAnswer != Graphic3d_TOA_COMPUTE) { eraseStructure (theStructure->CStructure()); } - else if (anAnswer == Graphic3d_TOA_COMPUTE && myIsInComputedMode) + + const Standard_Integer anIndex = !myStructsToCompute.IsEmpty() ? IsComputed (theStructure) : 0; + if (anIndex != 0) { - const Standard_Integer anIndex = IsComputed (theStructure); - if (anIndex != 0) + if (anAnswer == Graphic3d_TOA_COMPUTE + && myIsInComputedMode) { const Handle(Graphic3d_Structure)& aCompStruct = myStructsComputed.ChangeValue (anIndex); eraseStructure (aCompStruct->CStructure()); } + myStructsComputed .Remove (anIndex); + myStructsToCompute.Remove (anIndex); } myStructsDisplayed.Remove (theStructure); Update (theStructure->GetZLayer());