From 84e8a5f88191acb2bf266f24d9905a52cff2c20e Mon Sep 17 00:00:00 2001 From: kgv Date: Fri, 11 Feb 2022 15:29:35 +0300 Subject: [PATCH] 0032829: Visualization - dynamic highlight results are not cleared by AIS_InteractiveContext::Redisplay() AIS_InteractiveContext::RecomputeSelectionOnly() now removes old Owners of recomputed object from selection results. vdisplay command now resets AIS_ViewController::ResetPreviousMoveTo() cache. --- src/AIS/AIS_InteractiveContext.cxx | 16 ++++++++++++++-- src/AIS/AIS_InteractiveContext.hxx | 4 +++- src/ViewerTest/ViewerTest.cxx | 2 ++ 3 files changed, 19 insertions(+), 3 deletions(-) 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; }