]> OCCT Git - occt-copy.git/commitdiff
Revert "0030737: Visualization - implementing new selection schemes in context"
authorage <age@opencascade.com>
Tue, 24 Nov 2020 07:25:32 +0000 (10:25 +0300)
committerage <age@opencascade.com>
Tue, 22 Dec 2020 10:43:01 +0000 (13:43 +0300)
This reverts commit 502194e4fca701d2a5cf7e54e62862ff9c90db03.

src/AIS/AIS_InteractiveContext.hxx
src/AIS/AIS_InteractiveContext_1.cxx
src/AIS/AIS_Selection.cxx
src/AIS/AIS_Selection.hxx
src/AIS/AIS_SelectionScheme.hxx [deleted file]
src/AIS/FILES

index 42cb59921ffe3ac44f3f6e3378018e4893cb25a9..ce0f34b5e687e37ef0b0afe02d544a2b27178b11 100644 (file)
@@ -25,7 +25,6 @@
 #include <AIS_ListOfInteractive.hxx>
 #include <AIS_Selection.hxx>
 #include <AIS_SelectionModesConcurrency.hxx>
-#include <AIS_SelectionScheme.hxx>
 #include <AIS_StatusOfDetection.hxx>
 #include <AIS_StatusOfPick.hxx>
 #include <AIS_TypeOfIso.hxx>
@@ -476,24 +475,6 @@ public: //! @name Selection management
     return AddSelect (theObject->GlobalSelOwner());
   }
 
-  //! 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,
-                                           const Standard_Integer  theYPMin,
-                                           const Standard_Integer  theXPMax,
-                                           const Standard_Integer  theYPMax,
-                                           const Handle(V3d_View)& theView,
-                                           const AIS_SelectionScheme theSelScheme);
-  
-  //! polyline selection; clears the previous picked list
-  Standard_EXPORT AIS_StatusOfPick Select (const TColgp_Array1OfPnt2d& thePolyline,
-                                           const Handle(V3d_View)&     theView,
-                                           const AIS_SelectionScheme   theSelScheme);
-
-  //! Stores and hilights the previous detected; Unhilights the previous picked.
-  //! @sa MoveTo().
-  Standard_EXPORT AIS_StatusOfPick Select (const AIS_SelectionScheme theSelScheme);
-
   //! 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,
@@ -535,13 +516,6 @@ public: //! @name Selection management
   //! Returns bounding box of selected objects.
   Standard_EXPORT Bnd_Box BoundingBoxOfSelection() const;
 
-  //! Sets list of owner selected/deselected using selection scheme
-  //! It is possible that selection of other objects is changed relatively selection scheme   .
-  //! \param theOwner owners to change selection state
-  //! \param theSelScheme selection scheme
-  Standard_EXPORT AIS_StatusOfPick Select (const AIS_NListOfEntityOwner& theOwners,
-                                           const AIS_SelectionScheme theSelScheme);
-
   //! Fits the view correspondingly to the bounds of selected objects.
   //! Infinite objects are ignored if infinite state of AIS_InteractiveObject is set to true.
   Standard_EXPORT void FitSelected (const Handle(V3d_View)& theView,
index da07cab1fe79bdf23c24e8adeb99f3507002b4df..204027446dcfa1e1d73354124e60e010b359f63d 100644 (file)
@@ -495,37 +495,38 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer  theXPMi
                                                  const Standard_Integer  theXPMax,
                                                  const Standard_Integer  theYPMax,
                                                  const Handle(V3d_View)& theView,
-                                                 const AIS_SelectionScheme theSelScheme)
+                                                 const Standard_Boolean  toUpdateViewer)
 {
   if (theView->Viewer() != myMainVwr)
   {
     throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument");
   }
 
+  // all objects detected by the selector are taken, previous current objects are emptied,
+  // new objects are put...
+  ClearSelected (Standard_False);
   myLastActiveView = theView.get();
-  if (!myLastPicked.IsNull())
+  myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
+  for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
   {
-    Graphic3d_Vec2i aMousePos (-1, -1);
-    if (myMainSel->GetManager().GetActiveSelectionType() == SelectBasics_SelectingVolumeManager::Point)
-    {
-      aMousePos.SetValues ((Standard_Integer )myMainSel->GetManager().GetMousePosition().X(),
-                           (Standard_Integer )myMainSel->GetManager().GetMousePosition().Y());
-    }
-    if (myLastPicked->HandleMouseClick (aMousePos, Aspect_VKeyMouse_LeftButton, Aspect_VKeyFlags_NONE, false))
-    {
-      return AIS_SOP_NothingSelected;
-    }
-  }
+    const Handle(SelectMgr_EntityOwner)& aCurOwner = myMainSel->Picked (aPickIter);
+    if (aCurOwner.IsNull() || !aCurOwner->HasSelectable() || !myFilters->IsOk (aCurOwner))
+      continue;
 
-  myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
+    mySelection->Select (aCurOwner);
+  }
 
-  AIS_NListOfEntityOwner aPickedOwners;
-  for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
+  if (myAutoHilight)
   {
-    aPickedOwners.Append (myMainSel->Picked (aPickIter));
+    HilightSelected (toUpdateViewer);
   }
 
-  return Select (aPickedOwners, theSelScheme);
+  Standard_Integer aSelNum = NbSelected();
+
+  return (aSelNum == 0) ? AIS_SOP_NothingSelected
+                        : (aSelNum == 1) ? AIS_SOP_OneSelected
+                                         : AIS_SOP_SeveralSelected;
+  
 }
 
 //=======================================================================
@@ -534,38 +535,48 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer  theXPMi
 //=======================================================================
 AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& thePolyline,
                                                  const Handle(V3d_View)&     theView,
-                                                 const AIS_SelectionScheme   theSelScheme)
+                                                 const Standard_Boolean      toUpdateViewer)
 {
   if (theView->Viewer() != myMainVwr)
   {
     throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument");
   }
 
+  // all objects detected by the selector are taken, previous current objects are emptied,
+  // new objects are put...
+  ClearSelected (Standard_False);
+  myLastActiveView = theView.get();
   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);
+  }
+
+  if (myAutoHilight)
+  {
+    HilightSelected (toUpdateViewer);
   }
 
-  return Select (aPickedOwners, theSelScheme);
+  Standard_Integer aSelNum = NbSelected();
+
+  return (aSelNum == 0) ? AIS_SOP_NothingSelected
+                        : (aSelNum == 1) ? AIS_SOP_OneSelected
+                                         : AIS_SOP_SeveralSelected;
+  
 }
 
 //=======================================================================
 //function : Select
 //purpose  : 
 //=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::Select (const AIS_SelectionScheme theSelScheme)
+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))
+  if (!myLastPicked.IsNull())
   {
-    mySelection->selectOwner(myLastinMain, aPrevSelected, theSelScheme);
-
     Graphic3d_Vec2i aMousePos (-1, -1);
     if (myMainSel->GetManager().GetActiveSelectionType() == SelectBasics_SelectingVolumeManager::Point)
     {
@@ -576,65 +587,54 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const AIS_SelectionScheme theSe
     {
       return AIS_SOP_NothingSelected;
     }
-    return getStatusOfPick (NbSelected());
-  }*/
 
-  AIS_NListOfEntityOwner aPickedOwners;
-  if (!myLastPicked.IsNull() &&
-      myLastPicked->HasSelectable())
-  {
-    Handle(AIS_InteractiveObject) anIO = Handle(AIS_InteractiveObject)::DownCast(myLastPicked->Selectable());
-    if (!anIO.IsNull() &&
-        myObjects.IsBound(anIO))
+    if (myAutoHilight)
     {
-      aPickedOwners.Append (myLastPicked);
+      clearDynamicHighlight();
+    }
+    if (!myLastPicked->IsSelected()
+      || myLastPicked->IsForcedHilight()
+      || NbSelected() > 1)
+    {
+      SetSelected (myLastPicked, Standard_False);
+      if(toUpdateViewer)
+      {
+        UpdateCurrentViewer();
+      }
     }
   }
+  else
+  {
+    ClearSelected (toUpdateViewer);
+  }
 
-  return Select (aPickedOwners, theSelScheme);
-}
-
-//=======================================================================
-//function : Select
-//purpose  : 
-//=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer  theXPMin,
-                                                 const Standard_Integer  theYPMin,
-                                                 const Standard_Integer  theXPMax,
-                                                 const Standard_Integer  theYPMax,
-                                                 const Handle(V3d_View)& theView,
-                                                 const Standard_Boolean)
-{
-  return Select (theXPMin, theYPMin, theXPMax, theYPMax, theView, AIS_SelectionScheme_ClearAndAdd);
-}
-
-//=======================================================================
-//function : Select
-//purpose  : Selection by polyline
-//=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& thePolyline,
-                                                 const Handle(V3d_View)&     theView,
-                                                 const Standard_Boolean)
-{
-  return Select (thePolyline, theView, AIS_SelectionScheme_ClearAndAdd);
-}
+  Standard_Integer aSelNum = NbSelected();
 
-//=======================================================================
-//function : Select
-//purpose  : 
-//=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean)
-{
-  return Select (AIS_SelectionScheme_ClearAndAdd);
+  return (aSelNum == 0) ? AIS_SOP_NothingSelected
+                        : (aSelNum == 1) ? AIS_SOP_OneSelected
+                                         : AIS_SOP_SeveralSelected;
 }
 
 //=======================================================================
 //function : ShiftSelect
 //purpose  : 
 //=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean)
+AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean toUpdateViewer)
 {
-  return Select (AIS_SelectionScheme_Switch);
+  if (myAutoHilight)
+  {
+    clearDynamicHighlight();
+  }
+  if (!myLastPicked.IsNull())
+  {
+    AddOrRemoveSelected (myLastPicked, toUpdateViewer);
+  }
+
+  Standard_Integer aSelNum = NbSelected();
+
+  return (aSelNum == 0) ? AIS_SOP_NothingSelected
+                        : (aSelNum == 1) ? AIS_SOP_OneSelected
+                        : AIS_SOP_SeveralSelected;
 }
 
 //=======================================================================
@@ -646,9 +646,39 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the
                                                       const Standard_Integer theXPMax,
                                                       const Standard_Integer theYPMax,
                                                       const Handle(V3d_View)& theView,
-                                                      const Standard_Boolean)
+                                                      const Standard_Boolean toUpdateViewer)
 {
-  return Select (theXPMin, theYPMin, theXPMax, theYPMax, theView, AIS_SelectionScheme_Switch);
+  if (theView->Viewer() != myMainVwr)
+  {
+    throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument");
+  }
+
+  myLastActiveView = theView.get();
+  if (myAutoHilight)
+  {
+    UnhilightSelected (Standard_False);
+  }
+  myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
+  for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
+  {
+    const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter);
+    if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner))
+      continue;
+
+    mySelection->Select (anOwner);
+  }
+
+  if (myAutoHilight)
+  {
+    HilightSelected (toUpdateViewer);
+  }
+
+  Standard_Integer aSelNum = NbSelected();
+
+  return (aSelNum == 0) ? AIS_SOP_NothingSelected
+                        : (aSelNum == 1) ? AIS_SOP_OneSelected
+                                         : AIS_SOP_SeveralSelected;
+
 }
 
 //=======================================================================
@@ -657,31 +687,31 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the
 //=======================================================================
 AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d& thePolyline,
                                                       const Handle(V3d_View)& theView,
-                                                      const Standard_Boolean)
+                                                      const Standard_Boolean toUpdateViewer)
 {
-  return Select (thePolyline, theView, AIS_SelectionScheme_Switch);
-}
+  if (theView->Viewer() != myMainVwr)
+  {
+    throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument");
+  }
 
-//=======================================================================
-//function : Select
-//purpose  :
-//=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::Select (const AIS_NListOfEntityOwner& theOwners,
-                                                 const AIS_SelectionScheme theSelScheme)
-{
-  // all objects detected by the selector are taken, previous current objects are emptied,
-  // new objects are put...
+  myLastActiveView = theView.get();
   if (myAutoHilight)
   {
-    clearDynamicHighlight();
     UnhilightSelected (Standard_False);
   }
+  myMainSel->Pick (thePolyline, theView);
+  for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
+  {
+    const Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aPickIter);
+    if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner))
+      continue;
 
-  mySelection->SelectOwners (theOwners, theSelScheme, myFilters);
+    mySelection->Select (anOwner);
+  }
 
   if (myAutoHilight)
   {
-    HilightSelected (Standard_False);
+    HilightSelected (toUpdateViewer);
   }
 
   Standard_Integer aSelNum = NbSelected();
index b5eeb8c09fce2de3e0d39e0e2219f4769d741d38..e26bddf82834634843ed256bffbbe47d3c2665f7 100644 (file)
@@ -15,8 +15,6 @@
 #include <AIS_Selection.hxx>
 
 #include <AIS_InteractiveObject.hxx>
-#include <AIS_SelectionScheme.hxx>
-#include <SelectMgr_Filter.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(AIS_Selection, Standard_Transient)
 
@@ -132,71 +130,3 @@ AIS_SelectStatus AIS_Selection::AddSelect (const Handle(SelectMgr_EntityOwner)&
   theObject->SetSelected (Standard_True);
   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, SelectMgr_FilterReaction_Select))
-    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;
-}
index dc56d6dad6aa5d18b7edfe3170ab75bf92f0387c..8e7cf50e91dd39aa26c7571670340a74175016b2 100644 (file)
@@ -22,8 +22,6 @@
 #include <Standard.hxx>
 #include <Standard_Type.hxx>
 
-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 (file)
index 0dc03a3..0000000
+++ /dev/null
@@ -1,34 +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_Empty         = 0x0000, // do nothing
-  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,
-  AIS_SelectionScheme_ClearAndSwitchAndPicked = AIS_SelectionScheme_ClearAndSwitch | AIS_SelectionScheme_PickedIfEmpty,
-  AIS_SelectionScheme_Custom // reserved item for custom selection scheme
-};
-
-#endif // _AIS_SelectionScheme_HeaderFile
index 1f9b18b48f1553902a9696f087deec197e037678..e5bebe3142a8653c69f8b55747d4456e3e08e982 100644 (file)
@@ -88,7 +88,6 @@ AIS_Selection.cxx
 AIS_Selection.hxx
 AIS_SelectStatus.hxx
 AIS_SelectionModesConcurrency.hxx
-AIS_SelectionScheme.hxx
 AIS_SequenceOfInteractive.hxx
 AIS_Shape.cxx
 AIS_Shape.hxx