diff --git a/src/AIS/AIS_InteractiveContext.cxx b/src/AIS/AIS_InteractiveContext.cxx index a2130989ac..7525f7ef80 100644 --- a/src/AIS/AIS_InteractiveContext.cxx +++ b/src/AIS/AIS_InteractiveContext.cxx @@ -996,6 +996,7 @@ void AIS_InteractiveContext::RecomputePrsOnly (const Handle(AIS_InteractiveObjec myMainVwr->Update(); } } + //======================================================================= //function : RecomputeSelectionOnly //purpose : @@ -1007,9 +1008,20 @@ void AIS_InteractiveContext::RecomputeSelectionOnly (const Handle(AIS_Interactiv return; } - mgrSelector->RecomputeSelection (theIO); - const Handle(AIS_GlobalStatus)* aStatus = myObjects.Seek (theIO); + if (aStatus != NULL) + { + if (!myLastPicked.IsNull() + && myLastPicked->IsSameSelectable (theIO)) + { + clearDynamicHighlight(); + myLastPicked.Nullify(); + } + + unselectOwners (theIO); + } + + mgrSelector->RecomputeSelection (theIO); if (aStatus == NULL || theIO->DisplayStatus() != PrsMgr_DisplayStatus_Displayed) { diff --git a/src/AIS/AIS_InteractiveContext.hxx b/src/AIS/AIS_InteractiveContext.hxx index 5b9ec24c28..d2c6808482 100644 --- a/src/AIS/AIS_InteractiveContext.hxx +++ b/src/AIS/AIS_InteractiveContext.hxx @@ -147,6 +147,7 @@ public: //! @name object display management Standard_EXPORT void RemoveAll (const Standard_Boolean theToUpdateViewer); //! Recomputes the seen parts presentation of the Object. + //! The object will be also unhighlighted and removed from selection. //! If theAllModes equals true, all presentations are present in the object even if unseen. Standard_EXPORT void Redisplay (const Handle(AIS_InteractiveObject)& theIObj, const Standard_Boolean theToUpdateViewer, @@ -159,13 +160,14 @@ public: //! @name object display management const Standard_Boolean theToUpdateViewer); //! Recomputes the displayed presentations, flags the others. - //! Doesn't update presentations. + //! Doesn't update selections. Standard_EXPORT void RecomputePrsOnly (const Handle(AIS_InteractiveObject)& theIObj, const Standard_Boolean theToUpdateViewer, const Standard_Boolean theAllModes = Standard_False); //! Recomputes the active selections, flags the others. //! Doesn't update presentations. + //! The object will be also unhighlighted and removed from selection. Standard_EXPORT void RecomputeSelectionOnly (const Handle(AIS_InteractiveObject)& anIObj); //! Updates displayed interactive object by checking and recomputing its flagged as "to be recomputed" presentation and selection structures. diff --git a/src/ViewerTest/ViewerTest.cxx b/src/ViewerTest/ViewerTest.cxx index 533ffb7a4a..4a4b81857d 100644 --- a/src/ViewerTest/ViewerTest.cxx +++ b/src/ViewerTest/ViewerTest.cxx @@ -5238,6 +5238,8 @@ static int VDisplay2 (Draw_Interpretor& theDI, } } + // invalidate picking cache + ViewerTest::CurrentEventManager()->ResetPreviousMoveTo(); return 0; }