]> OCCT Git - occt-copy.git/commitdiff
0031955: Visualization - Graphic3d_CView::Erase() should always remove structure...
authorkgv <kgv@opencascade.com>
Mon, 23 Nov 2020 14:58:01 +0000 (17:58 +0300)
committerkgv <kgv@opencascade.com>
Mon, 23 Nov 2020 14:58:01 +0000 (17:58 +0300)
src/Graphic3d/Graphic3d_CView.cxx

index 2a0e8032ac728ba4614bac0c1d759f0263fab0e1..24f64919ade26b4915290d0aa88241c60331271c 100644 (file)
@@ -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());