0031642: Visualization - crash in Graphic3d_Structure::SetVisual() on redisplaying...
authorkgv <kgv@opencascade.com>
Tue, 30 Jun 2020 15:48:36 +0000 (18:48 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 3 Jul 2020 08:03:07 +0000 (11:03 +0300)
Fixed unexpected calling of PrsMgr_Presentation::Erase() from Graphic3d_Structure::SetVisual().

src/Graphic3d/Graphic3d_Structure.cxx
src/Graphic3d/Graphic3d_Structure.hxx
src/PrsMgr/PrsMgr_Presentation.cxx

index e165e71..c021fac 100644 (file)
@@ -73,10 +73,10 @@ Graphic3d_Structure::~Graphic3d_Structure()
 }
 
 //=============================================================================
-//function : Clear
+//function : clear
 //purpose  :
 //=============================================================================
-void Graphic3d_Structure::Clear (const Standard_Boolean theWithDestruction)
+void Graphic3d_Structure::clear (const Standard_Boolean theWithDestruction)
 {
   if (IsDeleted()) return;
 
@@ -206,10 +206,10 @@ void Graphic3d_Structure::ResetDisplayPriority()
 }
 
 //=============================================================================
-//function : Erase
+//function : erase
 //purpose  :
 //=============================================================================
-void Graphic3d_Structure::Erase()
+void Graphic3d_Structure::erase()
 {
   if (IsDeleted())
   {
@@ -431,7 +431,7 @@ void Graphic3d_Structure::SetVisual (const Graphic3d_TypeOfStructure theVisual)
   }
   else
   {
-    Erase();
+    erase();
     myVisual = theVisual;
     SetComputeVisual (theVisual);
     Display();
index 3812df9..9739cbe 100644 (file)
@@ -66,7 +66,10 @@ public:
   //! The structure itself is conserved.
   //! The transformation and the attributes of <me> are conserved.
   //! The childs of <me> are conserved.
-  Standard_EXPORT virtual void Clear (const Standard_Boolean WithDestruction = Standard_True);
+  virtual void Clear (const Standard_Boolean WithDestruction = Standard_True)
+  {
+    clear (WithDestruction);
+  }
   
   //! Suppresses the structure <me>.
   //! It will be erased at the next screen update.
@@ -78,9 +81,8 @@ public:
   //! Returns the current display priority for this structure.
   Standard_Integer DisplayPriority() const { return myCStructure->Priority; }
   
-  //! Erases the structure <me> in all the views
-  //! of the visualiser.
-  Standard_EXPORT virtual void Erase();
+  //! Erases this structure in all the views of the visualiser.
+  virtual void Erase() { erase(); }
   
   //! Highlights the structure in all the views with the given style
   //! @param theStyle [in] the style (type of highlighting: box/color, color and opacity)
@@ -428,6 +430,12 @@ protected:
   //! Removes the given ancestor structure.
   Standard_EXPORT Standard_Boolean RemoveAncestor (Graphic3d_Structure* theAncestor);
 
+  //! Clears all the groups of primitives in the structure.
+  Standard_EXPORT void clear (const Standard_Boolean WithDestruction);
+
+  //! Erases this structure in all the views of the visualiser.
+  Standard_EXPORT void erase();
+
 private:
 
   //! Suppress in the structure <me>, the group theGroup.
index f28b959..c53573d 100644 (file)
@@ -102,12 +102,12 @@ void PrsMgr_Presentation::Erase()
   }
 
   // Erase structure from structure manager
-  base_type::Erase();
-  base_type::Clear();
+  erase();
+  clear (true);
   // Disconnect other structures
-  base_type::DisconnectAll (Graphic3d_TOC_DESCENDANT);
+  DisconnectAll (Graphic3d_TOC_DESCENDANT);
   // Clear groups and remove graphic structure
-  base_type::Remove();
+  Remove();
 }
 
 //=======================================================================
@@ -140,7 +140,7 @@ void PrsMgr_Presentation::Unhighlight()
       base_type::SetVisible (Standard_False);
       break;
     case State_Empty:
-      base_type::Erase();
+      base_type::erase();
       break;
   }
 }
@@ -162,8 +162,8 @@ void PrsMgr_Presentation::Clear (const Standard_Boolean theWithDestruction)
     return;
   }
 
-  base_type::Clear (theWithDestruction);
-  base_type::DisconnectAll (Graphic3d_TOC_DESCENDANT);
+  clear (theWithDestruction);
+  DisconnectAll (Graphic3d_TOC_DESCENDANT);
 }
 
 //=======================================================================