From c5e4b10f960af59c11659db00a6a98af16741cd3 Mon Sep 17 00:00:00 2001 From: nds Date: Fri, 24 May 2019 09:50:47 +0300 Subject: [PATCH] 0030726: Visualization - change Selected state of owner in AIS_Selection # IsHilighted by owner should use the same logic like when it is highlighted. IsSelected is used for selection state, not highlight. # # Without this correction, object is never shown as selected by click (Select(bool)): # if (!HighlightStyle (theOwner, aCustomStyle) || # (!aCustomStyle.IsNull() && aCustomStyle != anObjSelStyle)) # IsSelected is already true, so the highlight style is equal to selection style, nothing to do. (cherry picked from commit b3d449ff2f7b8ed5afba33106d045427d2c146de) --- src/AIS/AIS_InteractiveContext.cxx | 4 +++- src/AIS/AIS_InteractiveContext_1.cxx | 25 +++---------------------- src/AIS/AIS_Selection.cxx | 8 ++++++++ 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/AIS/AIS_InteractiveContext.cxx b/src/AIS/AIS_InteractiveContext.cxx index 5c8aa1368c..572979090b 100644 --- a/src/AIS/AIS_InteractiveContext.cxx +++ b/src/AIS/AIS_InteractiveContext.cxx @@ -756,7 +756,9 @@ Standard_Boolean AIS_InteractiveContext::IsHilighted (const Handle(SelectMgr_Ent return myObjects (anObj)->IsHilighted(); } - return theOwner->IsSelected(); + const Handle(Prs3d_Drawer)& aStyle = getSelStyle (anObj, theOwner); + const Standard_Integer aHiMode = getHilightMode (anObj, aStyle, -1); + return theOwner->IsHilighted (myMainPM, aHiMode); } //======================================================================= diff --git a/src/AIS/AIS_InteractiveContext_1.cxx b/src/AIS/AIS_InteractiveContext_1.cxx index 466deaca1a..9ebb78e867 100644 --- a/src/AIS/AIS_InteractiveContext_1.cxx +++ b/src/AIS/AIS_InteractiveContext_1.cxx @@ -184,7 +184,6 @@ void AIS_InteractiveContext::unhighlightSelected (const Standard_Boolean theIsTo { anObjToClear.Add (anInteractive); } - anOwner->SetSelected (Standard_False); if (anOwner == anInteractive->GlobalSelOwner()) { myObjects.ChangeFind (anInteractive)->SetHilightStatus (Standard_False); @@ -464,7 +463,6 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer theXPMi continue; mySelection->Select (aCurOwner); - aCurOwner->SetSelected (Standard_True); } if (myAutoHilight) @@ -505,7 +503,6 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& the continue; mySelection->Select (anOwner); - anOwner->SetSelected (Standard_True); } if (myAutoHilight) @@ -606,8 +603,7 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner)) continue; - AIS_SelectStatus aSelStatus = mySelection->Select (anOwner); - anOwner->SetSelected (aSelStatus == AIS_SS_Added); + mySelection->Select (anOwner); } if (myAutoHilight) @@ -648,8 +644,7 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner)) continue; - AIS_SelectStatus aSelStatus = mySelection->Select (anOwner); - anOwner->SetSelected (aSelStatus == AIS_SS_Added); + mySelection->Select (anOwner); } if (myAutoHilight) @@ -684,7 +679,6 @@ void AIS_InteractiveContext::HilightSelected (const Standard_Boolean theToUpdate aState->SetHilightStatus (Standard_True); aState->SetHilightStyle (anObjSelStyle); } - anOwner->SetSelected (Standard_True); if (!anOwner->IsAutoHilight()) { NCollection_Handle aSeq; @@ -734,7 +728,6 @@ void AIS_InteractiveContext::UnhilightSelected (const Standard_Boolean theToUpda myObjects.ChangeFind (anObj)->SetHilightStatus (Standard_False); } - anOwner->SetSelected (Standard_False); anOwner->Unhilight (myMainPM); } @@ -756,13 +749,6 @@ void AIS_InteractiveContext::ClearSelected (const Standard_Boolean theToUpdateVi { unhighlightSelected(); } - else - { - for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next()) - { - aSelIter.Value()->SetSelected (Standard_False); - } - } mySelection->Clear(); if (myAutoHilight) @@ -824,7 +810,6 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t { Unhilight (aSelectable, Standard_False); } - aSelOwner->SetSelected (Standard_False); if (aSelOwner == aSelectable->GlobalSelOwner()) { myObjects.ChangeFind (aSelectable)->SetHilightStatus (Standard_False); @@ -849,7 +834,6 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t HilightWithColor (theObject, anObjSelStyle, Standard_False); } } - anOwner->SetSelected (Standard_True); if (theToUpdateViewer) UpdateCurrentViewer(); @@ -896,12 +880,10 @@ void AIS_InteractiveContext::SetSelected (const Handle(SelectMgr_EntityOwner)& t if (!HighlightStyle (theOwner, aCustomStyle) || (!aCustomStyle.IsNull() && aCustomStyle != anObjSelStyle)) { - theOwner->SetSelected (Standard_True); highlightSelected (theOwner); } } - theOwner->SetSelected (Standard_True); if (myAutoHilight && theOwner == anObject->GlobalSelOwner()) { Handle(AIS_GlobalStatus)& aState = myObjects.ChangeFind (anObject); @@ -950,8 +932,7 @@ void AIS_InteractiveContext::AddOrRemoveSelected (const Handle(SelectMgr_EntityO if (!myFilters->IsOk(theOwner) && !theOwner->IsSelected()) return; - AIS_SelectStatus aSelStat = mySelection->Select (theOwner); - theOwner->SetSelected (aSelStat == AIS_SS_Added); + mySelection->Select (theOwner); if (myAutoHilight) { diff --git a/src/AIS/AIS_Selection.cxx b/src/AIS/AIS_Selection.cxx index 1af6833a9a..e26bddf828 100644 --- a/src/AIS/AIS_Selection.cxx +++ b/src/AIS/AIS_Selection.cxx @@ -39,6 +39,11 @@ AIS_Selection::AIS_Selection() //======================================================================= void AIS_Selection::Clear() { + for (AIS_NListOfEntityOwner::Iterator aSelIter (Objects()); aSelIter.More(); aSelIter.Next()) + { + const Handle(SelectMgr_EntityOwner) anObject = aSelIter.Value(); + anObject->SetSelected (Standard_False); + } myresult.Clear(); myResultMap.Clear(); myIterator = AIS_NListOfEntityOwner::Iterator(); @@ -61,6 +66,7 @@ AIS_SelectStatus AIS_Selection::Select (const Handle(SelectMgr_EntityOwner)& the AIS_NListOfEntityOwner::Iterator aListIter; myresult.Append (theObject, aListIter); myResultMap.Bind (theObject, aListIter); + theObject->SetSelected (Standard_True); return AIS_SS_Added; } @@ -87,6 +93,7 @@ AIS_SelectStatus AIS_Selection::Select (const Handle(SelectMgr_EntityOwner)& the myresult.Remove (aListIter); myResultMap.UnBind (theObject); + theObject->SetSelected (Standard_False); // update list iterator for next object in list if any if (aListIter.More()) @@ -120,5 +127,6 @@ AIS_SelectStatus AIS_Selection::AddSelect (const Handle(SelectMgr_EntityOwner)& AIS_NListOfEntityOwner::Iterator aListIter; myresult.Append (theObject, aListIter); myResultMap.Bind (theObject, aListIter); + theObject->SetSelected (Standard_True); return AIS_SS_Added; } -- 2.39.5