X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSVTK%2FSVTK_Selector.cxx;h=51b32f21efb7c7cde2c229ad30b723669cd4ca5d;hb=refs%2Fheads%2Fngr%2Fpython3_dev_pv5.4;hp=fe5a930470c1bbf2c9585722dacbe98c23e1624a;hpb=f830c97c748d8f8a6a7eccc8e3a58e19066a1181;p=modules%2Fgui.git diff --git a/src/SVTK/SVTK_Selector.cxx b/src/SVTK/SVTK_Selector.cxx index fe5a93047..51b32f21e 100644 --- a/src/SVTK/SVTK_Selector.cxx +++ b/src/SVTK/SVTK_Selector.cxx @@ -1,36 +1,38 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// SALOME SALOMEGUI : implementation of desktop and GUI kernel // File : SALOME_Selection.cxx // Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - #include "SVTK_SelectorDef.h" +#include + #include "SALOME_Actor.h" +#include +#include + #include #include @@ -39,24 +41,6 @@ #include -/*! - Find first SALOME_Actor from the end of actors collection -*/ -inline -SALOME_Actor* -GetLastSALOMEActor(vtkActorCollection* theCollection) -{ - if (theCollection) { - for (int i = theCollection->GetNumberOfItems() - 1; i >= 0; i--) { - if (SALOME_Actor* anActor = dynamic_cast(theCollection->GetItemAsObject(i))) - if (anActor->hasIO()) - return anActor; - } - } - return NULL; -} - - /*! \return new SVTK_Selector */ @@ -76,6 +60,9 @@ SVTK_SelectorDef myCellPicker(vtkCellPicker::New()) { mySelectionMode = ActorSelection; + myDynamicPreselection = true; + myPreselectionEnabled = true; + mySelectionEnabled = true; myPicker->Delete(); myCellPicker->Delete(); @@ -284,7 +271,7 @@ SVTK_SelectorDef void SVTK_SelectorDef ::GetIndex( const Handle(SALOME_InteractiveObject)& theIO, - TColStd_IndexedMapOfInteger& theIndex) + TColStd_IndexedMapOfInteger& theIndex) { TMapIOSubIndex::const_iterator anIter = myMapIOSubIndex.find(theIO); if(anIter != myMapIOSubIndex.end()) @@ -301,7 +288,7 @@ SVTK_SelectorDef bool SVTK_SelectorDef ::IsIndexSelected(const Handle(SALOME_InteractiveObject)& theIO, - int theIndex) const + int theIndex) const { TMapIOSubIndex::const_iterator anIter = myMapIOSubIndex.find(theIO); if(anIter != myMapIOSubIndex.end()){ @@ -343,8 +330,8 @@ static bool removeIndex(TColStd_IndexedMapOfInteger& theMapIndex, const int theI bool SVTK_SelectorDef ::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_IndexedMapOfInteger& theIndices, - bool theIsModeShift) + const TColStd_IndexedMapOfInteger& theIndices, + bool theIsModeShift) { TMapIOSubIndex::iterator aMapIter = myMapIOSubIndex.find(theIO); if(aMapIter == myMapIOSubIndex.end()){ @@ -378,8 +365,8 @@ SVTK_SelectorDef bool SVTK_SelectorDef ::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_MapOfInteger& theIndices, - bool theIsModeShift) + const TColStd_MapOfInteger& theIndices, + bool theIsModeShift) { TMapIOSubIndex::iterator aMapIter = myMapIOSubIndex.find(theIO); if(aMapIter == myMapIOSubIndex.end()){ @@ -414,8 +401,8 @@ SVTK_SelectorDef bool SVTK_SelectorDef ::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex, - bool theIsModeShift) + int theIndex, + bool theIsModeShift) { TMapIOSubIndex::iterator anIter = myMapIOSubIndex.find(theIO); if(anIter == myMapIOSubIndex.end()){ @@ -450,7 +437,7 @@ SVTK_SelectorDef void SVTK_SelectorDef ::RemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex) + int theIndex) { if(IsIndexSelected(theIO,theIndex)){ TMapIOSubIndex::iterator anIter = myMapIOSubIndex.find(theIO); @@ -512,8 +499,8 @@ SVTK_SelectorDef bool SVTK_SelectorDef ::IsValid(SALOME_Actor* theActor, - const TFilterID theId, - const bool theIsNode) const + const TFilterID theId, + const bool theIsNode) const { TFilters::const_iterator anIter = myFilters.begin(); for(; anIter != myFilters.end(); ++anIter){ @@ -541,34 +528,78 @@ SVTK_SelectorDef return Handle(VTKViewer_Filter)(); } -SALOME_Actor* +vtkActorCollection* SVTK_SelectorDef ::Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const { - myCellPicker->Pick(theEvent->myX, - theEvent->myY, - 0.0, - theRenderer); - - vtkActorCollection* aListActors = myCellPicker->GetActors(); - SALOME_Actor* anActor = GetLastSALOMEActor(aListActors); + vtkActorCollection* aListActors = NULL; + + if ( GetDynamicPreSelection() ) { + myCellPicker->Pick(theEvent->myX, + theEvent->myY, + 0.0, + theRenderer); - if (! anActor) { + aListActors = myCellPicker->GetActors(); + } + + if ( !aListActors || !aListActors->GetNumberOfItems() ) { myPicker->Pick(theEvent->myX, - theEvent->myY, - 0.0, - theRenderer); + theEvent->myY, + 0.0, + theRenderer); aListActors = myPicker->GetActors(); - anActor = GetLastSALOMEActor(aListActors); } - return anActor; + return aListActors; } void SVTK_SelectorDef ::SetTolerance(const double& theTolerance) { - myPicker->SetTolerance(theTolerance); + myPicker->SetTolerance(theTolerance); myCellPicker->SetTolerance(theTolerance); } + +void +SVTK_SelectorDef +::SetDynamicPreSelection( bool theIsDynPreselect ) +{ + myDynamicPreselection = theIsDynPreselect; +} + +bool +SVTK_SelectorDef +::GetDynamicPreSelection() const +{ + return myDynamicPreselection; +} + +void +SVTK_SelectorDef +::SetPreSelectionEnabled( bool theEnabled ) +{ + myPreselectionEnabled = theEnabled; +} + +bool +SVTK_SelectorDef +::IsPreSelectionEnabled() const +{ + return mySelectionEnabled && myPreselectionEnabled; +} + +void +SVTK_SelectorDef +::SetSelectionEnabled( bool theEnabled ) +{ + mySelectionEnabled = theEnabled; +} + +bool +SVTK_SelectorDef +::IsSelectionEnabled() const +{ + return mySelectionEnabled; +}