0028527: Visualization, AIS_InteractiveContext - custom selection presentation is...
authorkgv <kgv@opencascade.com>
Thu, 17 Aug 2017 08:43:08 +0000 (11:43 +0300)
committerabv <abv@opencascade.com>
Thu, 17 Aug 2017 19:21:31 +0000 (22:21 +0300)
src/AIS/AIS_InteractiveContext.cxx
src/SelectMgr/SelectMgr_SelectableObject.cxx
src/SelectMgr/SelectMgr_SelectableObject.hxx

index 5c7c027..ebde074 100644 (file)
@@ -2336,6 +2336,9 @@ void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& t
     clearDynamicHighlight();
   }
 
+  // make sure highlighting presentations are properly erased
+  theIObj->ErasePresentations (false);
+
   if (IsSelected (theIObj)
    && aStatus->DisplayMode() != aDispMode)
   {
@@ -2396,6 +2399,7 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
   unhighlightOwners (theIObj);
 
   myMainPM->Erase (theIObj, -1);
+  theIObj->ErasePresentations (true); // make sure highlighting presentations are properly erased
 
   // Object removes from Detected sequence
   Standard_DISABLE_DEPRECATION_WARNINGS
index 4173124..504ca4a 100644 (file)
@@ -379,6 +379,32 @@ Handle(Prs3d_Presentation) SelectMgr_SelectableObject::GetSelectPresentation (co
 }
 
 //=======================================================================
+//function : ErasePresentations
+//purpose  :
+//=======================================================================
+void SelectMgr_SelectableObject::ErasePresentations (Standard_Boolean theToRemove)
+{
+  if (!mySelectionPrs.IsNull())
+  {
+    mySelectionPrs->Erase();
+    if (theToRemove)
+    {
+      mySelectionPrs->Clear();
+      mySelectionPrs.Nullify();
+    }
+  }
+  if (!myHilightPrs.IsNull())
+  {
+    myHilightPrs->Erase();
+    if (theToRemove)
+    {
+      myHilightPrs->Clear();
+      myHilightPrs.Nullify();
+    }
+  }
+}
+
+//=======================================================================
 //function : SetZLayer
 //purpose  :
 //=======================================================================
index cf749e2..412ac68 100644 (file)
@@ -168,7 +168,10 @@ public:
   Standard_EXPORT Handle(Prs3d_Presentation) GetHilightPresentation (const Handle(PrsMgr_PresentationManager3d)& TheMgr);
   
   Standard_EXPORT Handle(Prs3d_Presentation) GetSelectPresentation (const Handle(PrsMgr_PresentationManager3d)& TheMgr);
-  
+
+  //! Removes presentations returned by GetHilightPresentation() and GetSelectPresentation().
+  Standard_EXPORT virtual void ErasePresentations (Standard_Boolean theToRemove);
+
   //! Set Z layer ID and update all presentations of the selectable object.
   //! The layers mechanism allows drawing objects in higher layers in overlay of objects in lower layers.
   Standard_EXPORT virtual void SetZLayer (const Graphic3d_ZLayerId theLayerId) Standard_OVERRIDE;
@@ -219,14 +222,15 @@ protected:
 
   SelectMgr_SequenceOfSelection myselections;
   Handle(SelectMgr_EntityOwner) myAssemblyOwner;
+  Handle(Prs3d_Presentation) mySelectionPrs;
+  Handle(Prs3d_Presentation) myHilightPrs;
   Standard_Boolean myAutoHilight;
 
 private:
 
   Standard_Integer mycurrent;
-  Handle(Prs3d_Presentation) mySelectionPrs;
-  Handle(Prs3d_Presentation) myHilightPrs;
   Standard_Integer myGlobalSelMode;
+
 };
 
 #endif // _SelectMgr_SelectableObject_HeaderFile