From dc5ca5bf660d67dab8db145a6363a9e15a30b995 Mon Sep 17 00:00:00 2001 From: nds Date: Wed, 22 May 2019 17:33:02 +0300 Subject: [PATCH] Revert "0030737: Visualization - implementing new selection schemes in context" This reverts commit f7a533506e3db4dd75f61459c6898863ff9e8ac0. --- src/AIS/AIS_InteractiveContext.cxx | 6 -- src/AIS/AIS_InteractiveContext.hxx | 11 --- src/AIS/AIS_InteractiveContext_1.cxx | 112 ++++++++++----------------- src/AIS/AIS_Selection.cxx | 70 ----------------- src/AIS/AIS_Selection.hxx | 24 ------ src/AIS/AIS_SelectionScheme.hxx | 31 -------- src/AIS/AIS_SelectionType.hxx | 31 -------- src/AIS/FILES | 2 - 8 files changed, 43 insertions(+), 244 deletions(-) delete mode 100644 src/AIS/AIS_SelectionScheme.hxx delete mode 100644 src/AIS/AIS_SelectionType.hxx diff --git a/src/AIS/AIS_InteractiveContext.cxx b/src/AIS/AIS_InteractiveContext.cxx index 7daeb7a38b..5c8aa1368c 100644 --- a/src/AIS/AIS_InteractiveContext.cxx +++ b/src/AIS/AIS_InteractiveContext.cxx @@ -163,12 +163,6 @@ myIsAutoActivateSelMode(Standard_True) aStyle->SetMethod(Aspect_TOHM_COLOR); aStyle->SetColor (Quantity_NOC_GRAY40); } - SetSelectionScheme (AIS_SelectionType_Select, AIS_SelectionScheme_ClearAndAdd); - SetSelectionScheme (AIS_SelectionType_SelectInRect, AIS_SelectionScheme_ClearAndAdd); - SetSelectionScheme (AIS_SelectionType_SelectInPoly, AIS_SelectionScheme_ClearAndAdd); - SetSelectionScheme (AIS_SelectionType_ShiftSelect, AIS_SelectionScheme_Switch); - SetSelectionScheme (AIS_SelectionType_ShiftSelectInRect, AIS_SelectionScheme_Switch); - SetSelectionScheme (AIS_SelectionType_ShiftSelectInPoly, AIS_SelectionScheme_Switch); InitAttributes(); } diff --git a/src/AIS/AIS_InteractiveContext.hxx b/src/AIS/AIS_InteractiveContext.hxx index 868a47b7e1..779af679bc 100644 --- a/src/AIS/AIS_InteractiveContext.hxx +++ b/src/AIS/AIS_InteractiveContext.hxx @@ -25,8 +25,6 @@ #include #include #include -#include -#include #include #include #include @@ -445,14 +443,6 @@ public: //! @name Selection management return AddSelect (theObject->GlobalSelOwner()); } - //! Returns selection scheme used in Select - AIS_SelectionScheme SelectionScheme (const AIS_SelectionType theType) const - { return mySelectionSchemes.Find (theType); } - - //! Returns selection scheme used in Select - void SetSelectionScheme (const AIS_SelectionType theType, const AIS_SelectionScheme theScheme) - { mySelectionSchemes.Bind (theType, theScheme); } - //! Selects everything found in the bounding rectangle defined by the pixel minima and maxima, XPMin, YPMin, XPMax, and YPMax in the view. //! The objects detected are passed to the main viewer, which is then updated. Standard_EXPORT AIS_StatusOfPick Select (const Standard_Integer theXPMin, @@ -1371,7 +1361,6 @@ protected: //! @name internal fields Standard_Boolean myAutoHilight; Standard_Boolean myIsAutoActivateSelMode; - NCollection_DataMap mySelectionSchemes; }; DEFINE_STANDARD_HANDLE(AIS_InteractiveContext, Standard_Transient) diff --git a/src/AIS/AIS_InteractiveContext_1.cxx b/src/AIS/AIS_InteractiveContext_1.cxx index 8ad48b24eb..15b388d436 100644 --- a/src/AIS/AIS_InteractiveContext_1.cxx +++ b/src/AIS/AIS_InteractiveContext_1.cxx @@ -454,22 +454,18 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer theXPMi // all objects detected by the selector are taken, previous current objects are emptied, // new objects are put... - if (myAutoHilight) - { - clearDynamicHighlight(); - UnhilightSelected (Standard_False); - } + ClearSelected (Standard_False); myWasLastMain = Standard_True; - myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView); - - AIS_NListOfEntityOwner aPickedOwners; for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter) { - aPickedOwners.Append (myMainSel->Picked (aPickIter)); + const Handle(SelectMgr_EntityOwner)& aCurOwner = myMainSel->Picked (aPickIter); + if (aCurOwner.IsNull() || !aCurOwner->HasSelectable() || !myFilters->IsOk (aCurOwner)) + continue; + + mySelection->Select (aCurOwner); aCurOwner->SetSelected (Standard_True); } - mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_SelectInRect), myFilters); if (myAutoHilight) { @@ -499,22 +495,18 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& the // all objects detected by the selector are taken, previous current objects are emptied, // new objects are put... - if (myAutoHilight) - { - clearDynamicHighlight(); - UnhilightSelected (Standard_False); - } - + ClearSelected (Standard_False); myWasLastMain = Standard_True; myMainSel->Pick (thePolyline, theView); - - AIS_NListOfEntityOwner aPickedOwners; for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter) { - aPickedOwners.Append (myMainSel->Picked (aPickIter)); + const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter); + if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner)) + continue; + + mySelection->Select (anOwner); anOwner->SetSelected (Standard_True); } - mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_SelectInPoly), myFilters); if (myAutoHilight) { @@ -535,34 +527,26 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& the //======================================================================= AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean toUpdateViewer) { - // special case: single selection of detected owner - is it necessary ? - /*if (myWasLastMain && !myLastinMain.IsNull() && !myAutoHilight && - (myLastinMain->IsSelected() - && !myLastinMain->IsForcedHilight() - && NbSelected() <= 1)) - { - mySelection->selectOwner(myLastinMain, aPrevSelected, SelectionScheme (AIS_SelectionType_Select)); - return getStatusOfPick (NbSelected()); - }*/ - - if (myAutoHilight) - { - clearDynamicHighlight(); - UnhilightSelected (Standard_False); - } - - AIS_NListOfEntityOwner aPickedOwners; - aPickedOwners.Append (myLastinMain); - mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_Select), myFilters); - - if (myAutoHilight) + if (myWasLastMain && !myLastinMain.IsNull()) { - HilightSelected (toUpdateViewer); + if (myAutoHilight) + { + clearDynamicHighlight(); + } + if (!myLastinMain->IsSelected() + || myLastinMain->IsForcedHilight() + || NbSelected() > 1) + { + SetSelected (myLastinMain, Standard_False); + if(toUpdateViewer) + { + UpdateCurrentViewer(); + } + } } - - if(toUpdateViewer) + else { - UpdateCurrentViewer(); + ClearSelected (toUpdateViewer); } Standard_Integer aSelNum = NbSelected(); @@ -578,25 +562,15 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean toUpdate //======================================================================= AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean toUpdateViewer) { - AIS_NListOfEntityOwner aPrevSelected = mySelection->Objects(); if (myAutoHilight) { clearDynamicHighlight(); - UnhilightSelected (Standard_False); } - - AIS_NListOfEntityOwner aPickedOwners; - aPickedOwners.Append (myLastinMain); - mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_ShiftSelect), myFilters); - - if (myAutoHilight) + if (myWasLastMain && !myLastinMain.IsNull()) { - HilightSelected (toUpdateViewer); + AddOrRemoveSelected (myLastinMain, toUpdateViewer); } - if (toUpdateViewer) - UpdateCurrentViewer(); - Standard_Integer aSelNum = NbSelected(); return (aSelNum == 0) ? AIS_SOP_NothingSelected @@ -620,21 +594,21 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument"); } - AIS_NListOfEntityOwner aPrevSelected = mySelection->Objects(); if (myAutoHilight) { - clearDynamicHighlight(); UnhilightSelected (Standard_False); } myWasLastMain = Standard_True; myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView); - - AIS_NListOfEntityOwner aPickedOwners; for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter) { - aPickedOwners.Append (myMainSel->Picked (aPickIter)); + const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter); + if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner)) + continue; + + AIS_SelectStatus aSelStatus = mySelection->Select (anOwner); + anOwner->SetSelected (aSelStatus == AIS_SS_Added); } - mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_ShiftSelectInRect), myFilters); if (myAutoHilight) { @@ -662,21 +636,21 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument"); } - AIS_NListOfEntityOwner aPrevSelected = mySelection->Objects(); if (myAutoHilight) { - clearDynamicHighlight(); UnhilightSelected (Standard_False); } myWasLastMain = Standard_True; myMainSel->Pick (thePolyline, theView); - - AIS_NListOfEntityOwner aPickedOwners; for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter) { - aPickedOwners.Append (myMainSel->Picked (aPickIter)); + const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter); + if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner)) + continue; + + AIS_SelectStatus aSelStatus = mySelection->Select (anOwner); + anOwner->SetSelected (aSelStatus == AIS_SS_Added); } - mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_ShiftSelectInPoly), myFilters); if (myAutoHilight) { diff --git a/src/AIS/AIS_Selection.cxx b/src/AIS/AIS_Selection.cxx index 2a8e86e1ac..1af6833a9a 100644 --- a/src/AIS/AIS_Selection.cxx +++ b/src/AIS/AIS_Selection.cxx @@ -15,8 +15,6 @@ #include #include -#include -#include IMPLEMENT_STANDARD_RTTIEXT(AIS_Selection, Standard_Transient) @@ -124,71 +122,3 @@ AIS_SelectStatus AIS_Selection::AddSelect (const Handle(SelectMgr_EntityOwner)& myResultMap.Bind (theObject, aListIter); return AIS_SS_Added; } - -//======================================================================= -//function : SelectOwners -//purpose : -//======================================================================= -void AIS_Selection::SelectOwners (const AIS_NListOfEntityOwner& thePickedOwners, - const int theSelScheme, - const Handle(SelectMgr_Filter)& theFilter) -{ - int aSelScheme = theSelScheme; - AIS_NListOfEntityOwner aPrevSelected = Objects(); - if (theSelScheme & AIS_SelectionScheme_Clear) - { - Clear(); - - if (theSelScheme & AIS_SelectionScheme_Switch && - theSelScheme & AIS_SelectionScheme_PickedIfEmpty && - thePickedOwners.Size() < aPrevSelected.Size()) - { - // check if all picked objects are in previous selected list, if so, all objects will be deselected, - // but in mode AIS_SelectionScheme_PickedIfEmpty new picked objects should be selected, here, after Clear, Add - Standard_Boolean anOtherFound = Standard_False; - for (AIS_NListOfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next()) - { - anOtherFound = !aPrevSelected.Contains (aSelIter.Value()); - if (anOtherFound) - break; - } - if (!anOtherFound) - aSelScheme = AIS_SelectionScheme_Add; - } - } - - for (AIS_NListOfEntityOwner::Iterator aSelIter (thePickedOwners); aSelIter.More(); aSelIter.Next()) - { - selectOwner(aSelIter.Value(), aPrevSelected, aSelScheme, theFilter); - } -} - -//======================================================================= -//function : selectOwner -//purpose : -//======================================================================= -AIS_SelectStatus AIS_Selection::selectOwner (const Handle(SelectMgr_EntityOwner)& theOwner, - const AIS_NListOfEntityOwner& thePreviousSelected, - const int theSelScheme, - const Handle(SelectMgr_Filter)& theFilter) -{ - if (theOwner.IsNull() || !theOwner->HasSelectable() || !theFilter->IsOk (theOwner)) - return AIS_SS_NotDone; - - if (theSelScheme & AIS_SelectionScheme_Add) - { - return AddSelect (theOwner); - } - else if (theSelScheme & AIS_SelectionScheme_Switch) - { - if (thePreviousSelected.Contains (theOwner)) // was selected, should not be now - { - if (theOwner->IsSelected()) - return Select (theOwner); // deselect - } - else - return AddSelect (theOwner); // was not selected, should be now - } - - return AIS_SS_NotDone; -} diff --git a/src/AIS/AIS_Selection.hxx b/src/AIS/AIS_Selection.hxx index dc56d6dad6..8e7cf50e91 100644 --- a/src/AIS/AIS_Selection.hxx +++ b/src/AIS/AIS_Selection.hxx @@ -22,8 +22,6 @@ #include #include -class SelectMgr_Filter; - //! Class holding the list of selected owners. class AIS_Selection : public Standard_Transient { @@ -77,28 +75,6 @@ public: //! Return selected object at iterator position. const Handle(SelectMgr_EntityOwner)& Value() const { return myIterator.Value(); } - //! Select or deselect owners depending on the selection scheme - //! \param theOwners elements to change selection state - //! \param theSelScheme selection scheme, defines how owner is selected - //! \param theFilter context filter to skip not acceptable owners - //! \return result of selection - Standard_EXPORT virtual void SelectOwners (const AIS_NListOfEntityOwner& thePickedOwners, - const int theSelScheme, - const Handle(SelectMgr_Filter)& theFilter); - -protected: - //! Select or deselect owner depending on the selection scheme - //! \param theOwner element to change selection state - //! \param thePreviousSelected previous selected objects - //! \param theSelScheme selection scheme, defines how owner is selected - //! \param theFilter context filter to skip not acceptable owners - //! \return result of selection - Standard_EXPORT virtual AIS_SelectStatus selectOwner (const Handle(SelectMgr_EntityOwner)& theOwner, - const AIS_NListOfEntityOwner& thePreviousSelected, - const int theSelScheme, - const Handle(SelectMgr_Filter)& theFilter); - - private: AIS_NListOfEntityOwner myresult; diff --git a/src/AIS/AIS_SelectionScheme.hxx b/src/AIS/AIS_SelectionScheme.hxx deleted file mode 100644 index d34c3f40c3..0000000000 --- a/src/AIS/AIS_SelectionScheme.hxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2019 OPEN CASCADE SAS -// -// This file is part of Open CASCADE Technology software library. -// -// This library is free software; you can redistribute it and/or modify it under -// the terms of the GNU Lesser General Public License version 2.1 as published -// by the Free Software Foundation, with special exception defined in the file -// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT -// distribution for complete text of the license and disclaimer of any warranty. -// -// Alternatively, this file may be used under the terms of Open CASCADE -// commercial license or contractual agreement. - - -#ifndef _AIS_SelectionScheme_HeaderFile -#define _AIS_SelectionScheme_HeaderFile - - -//! Sets selection schemes for interactive contexts. -//! It is possible to use combination of schemes. -enum AIS_SelectionScheme -{ - AIS_SelectionScheme_Clear = 0x0001, // clears current selection - AIS_SelectionScheme_Add = 0x0002, // add detected object to current selection - AIS_SelectionScheme_Switch = 0x0004, // switch selection state in values selected/deselected - AIS_SelectionScheme_PickedIfEmpty = 0x0008, // if after switch, result selection is empty, select picked objects - AIS_SelectionScheme_ClearAndSwitch = AIS_SelectionScheme_Clear | AIS_SelectionScheme_Switch, - AIS_SelectionScheme_ClearAndAdd = AIS_SelectionScheme_Clear | AIS_SelectionScheme_Add -}; - -#endif // _AIS_SelectionScheme_HeaderFile diff --git a/src/AIS/AIS_SelectionType.hxx b/src/AIS/AIS_SelectionType.hxx deleted file mode 100644 index 22c11aa386..0000000000 --- a/src/AIS/AIS_SelectionType.hxx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2019 OPEN CASCADE SAS -// -// This file is part of Open CASCADE Technology software library. -// -// This library is free software; you can redistribute it and/or modify it under -// the terms of the GNU Lesser General Public License version 2.1 as published -// by the Free Software Foundation, with special exception defined in the file -// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT -// distribution for complete text of the license and disclaimer of any warranty. -// -// Alternatively, this file may be used under the terms of Open CASCADE -// commercial license or contractual agreement. - - -#ifndef _AIS_SelectionType_HeaderFile -#define _AIS_SelectionType_HeaderFile - - -//! Sets selection schemes for interactive contexts. -//! It is possible to use combination of schemes. -enum AIS_SelectionType -{ - AIS_SelectionType_Select, - AIS_SelectionType_SelectInRect, - AIS_SelectionType_SelectInPoly, - AIS_SelectionType_ShiftSelect, - AIS_SelectionType_ShiftSelectInRect, - AIS_SelectionType_ShiftSelectInPoly -}; - -#endif // _AIS_SelectionType_HeaderFile diff --git a/src/AIS/FILES b/src/AIS/FILES index 40ae9d0018..c7d6cca95f 100644 --- a/src/AIS/FILES +++ b/src/AIS/FILES @@ -138,8 +138,6 @@ AIS_Selection.cxx AIS_Selection.hxx AIS_SelectStatus.hxx AIS_SelectionModesConcurrency.hxx -AIS_SelectionScheme.hxx -AIS_SelectionType.hxx AIS_SequenceOfDimension.hxx AIS_SequenceOfInteractive.hxx AIS_Shape.cxx -- 2.39.5