#ifndef _AIS_InteractiveContext_HeaderFile
#define _AIS_InteractiveContext_HeaderFile
-#include <Standard.hxx>
-#include <Standard_Type.hxx>
-
-#include <AIS_DataMapOfIOStatus.hxx>
-#include <PrsMgr_PresentationManager3d.hxx>
-#include <StdSelect_ViewerSelector3d.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <Standard_Boolean.hxx>
-#include <Prs3d_Drawer.hxx>
-#include <Quantity_NameOfColor.hxx>
-#include <Standard_Integer.hxx>
#include <AIS_DataMapOfILC.hxx>
+#include <AIS_DataMapOfIOStatus.hxx>
+#include <AIS_DisplayMode.hxx>
#include <AIS_DisplayStatus.hxx>
+#include <AIS_ClearMode.hxx>
#include <AIS_KindOfInteractive.hxx>
-#include <Standard_Real.hxx>
-#include <Aspect_TypeOfFacingModel.hxx>
-#include <Graphic3d_NameOfMaterial.hxx>
-#include <Standard_ShortReal.hxx>
-#include <TColStd_ListOfInteger.hxx>
-#include <AIS_DisplayMode.hxx>
-#include <AIS_TypeOfIso.hxx>
+#include <AIS_ListOfInteractive.hxx>
+#include <AIS_Selection.hxx>
#include <AIS_StatusOfDetection.hxx>
#include <AIS_StatusOfPick.hxx>
-#include <TColgp_Array1OfPnt2d.hxx>
+#include <AIS_TypeOfIso.hxx>
+#include <Aspect_TypeOfFacingModel.hxx>
+#include <Graphic3d_NameOfMaterial.hxx>
+#include <Prs3d_Drawer.hxx>
+#include <Prs3d_TypeOfHighlight.hxx>
+#include <PrsMgr_PresentationManager3d.hxx>
#include <SelectMgr_IndexedMapOfOwner.hxx>
-#include <AIS_ClearMode.hxx>
-#include <TopAbs_ShapeEnum.hxx>
#include <SelectMgr_ListOfFilter.hxx>
-#include <AIS_ListOfInteractive.hxx>
-#include <Standard_CString.hxx>
-#include <AIS_Selection.hxx>
-#include <Prs3d_TypeOfHighlight.hxx>
+#include <SelectMgr_PickingStrategy.hxx>
+#include <Standard.hxx>
+#include <Standard_Type.hxx>
+#include <StdSelect_ViewerSelector3d.hxx>
+#include <TCollection_AsciiString.hxx>
+#include <TColgp_Array1OfPnt2d.hxx>
+#include <TColStd_ListOfInteger.hxx>
+#include <TopAbs_ShapeEnum.hxx>
+#include <Quantity_Color.hxx>
+
class SelectMgr_SelectionManager;
class V3d_Viewer;
class AIS_InteractiveObject;
class V3d_View;
class AIS_LocalContext;
class TopLoc_Location;
-class Quantity_Color;
class TCollection_ExtendedString;
class Prs3d_LineAspect;
class Prs3d_BasicAspect;
class SelectMgr_EntityOwner;
-class Standard_Transient;
class SelectMgr_Filter;
class TCollection_AsciiString;
Standard_EXPORT Standard_Boolean GetAutoActivateSelection() const;
+ //! Setup picking strategy - which entities detected by picking line will be accepted, considering Selection Filters.
+ //! By default (SelectMgr_PickingStrategy_FirstAcceptable), Selection Filters reduce the list of entities
+ //! so that the context accepts topmost in remaining.
+ //!
+ //! This means that entities behind non-selectable (by filters) parts can be picked by user.
+ //! If this behavior is undesirable, and user wants that non-selectable (by filters) parts
+ //! should remain an obstacle for picking, SelectMgr_PickingStrategy_OnlyTopmost can be set instead.
+ //!
+ //! Notice, that since Selection Manager operates only objects registered in it,
+ //! SelectMgr_PickingStrategy_OnlyTopmost will NOT prevent picking entities behind
+ //! visible by unregistered in Selection Manager presentations (e.g. deactivated).
+ //! Hence, SelectMgr_PickingStrategy_OnlyTopmost changes behavior only with Selection Filters enabled.
+ void SetPickingStrategy (const SelectMgr_PickingStrategy theStrategy)
+ {
+ myPickingStrategy = theStrategy;
+ }
+
+ //! Return picking strategy; SelectMgr_PickingStrategy_FirstAcceptable by default.
+ SelectMgr_PickingStrategy PickingStrategy() const { return myPickingStrategy; }
+
//! Controls the choice between the using the display
//! and selection modes of open local context which you
//! have defined and activating those available by default.
TColStd_SequenceOfInteger myDetectedSeq;
Standard_Integer myCurDetected;
Standard_Integer myCurHighlighted;
+ SelectMgr_PickingStrategy myPickingStrategy; //!< picking strategy to be applied within MoveTo()
Standard_Boolean myIsAutoActivateSelMode;
};
--- /dev/null
+// Copyright (c) 2017 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 _SelectMgr_PickingStrategy_HeaderFile
+#define _SelectMgr_PickingStrategy_HeaderFile
+
+//! Enumeration defines picking strategy - which entities detected by picking line will be accepted, considering selection filters.
+enum SelectMgr_PickingStrategy
+{
+ SelectMgr_PickingStrategy_FirstAcceptable, //!< the first detected entity passing selection filter is accepted (e.g. any)
+ SelectMgr_PickingStrategy_OnlyTopmost //!< only topmost detected entity passing selection filter is accepted
+};
+
+#endif // _SelectMgr_PickingStrategy_HeaderFile
}
aCtx->SetAutoActivateSelection (toEnable);
}
+ else if (anArg == "-pickstrategy"
+ || anArg == "-pickingstrategy")
+ {
+ if (++anArgIter >= theArgsNb)
+ {
+ std::cout << "Syntax error: type of highlighting is undefined\n";
+ return 1;
+ }
+
+ SelectMgr_PickingStrategy aStrategy = SelectMgr_PickingStrategy_FirstAcceptable;
+ TCollection_AsciiString aVal (theArgVec[anArgIter]);
+ aVal.LowerCase();
+ if (aVal == "first"
+ || aVal == "firstaccepted"
+ || aVal == "firstacceptable")
+ {
+ aStrategy = SelectMgr_PickingStrategy_FirstAcceptable;
+ }
+ else if (aVal == "topmost"
+ || aVal == "onlyTopmost")
+ {
+ aStrategy = SelectMgr_PickingStrategy_OnlyTopmost;
+ }
+ else
+ {
+ std::cout << "Syntax error: unknwon picking strategy '" << aVal << "'\n";
+ return 1;
+ }
+
+ aCtx->SetPickingStrategy (aStrategy);
+ }
else if (anArg == "-pixtol"
&& anArgIter + 1 < theArgsNb)
{
"\n vselprops [dynHighlight|localDynHighlight|selHighlight|localSelHighlight] [options]"
"\n Customizes selection and dynamic highlight parameters for the whole interactive context:"
"\n -autoActivate {0|1} : disables|enables default computation and activation of global selection mode"
+ "\n -pickStrategy {first|topmost} : defines picking strategy"
+ "\n 'first' to pick first acceptable (default)"
+ "\n 'topmost' to pick only topmost (and nothing, if topmost is rejected by filters)"
"\n -pixTol value : sets up pixel tolerance"
"\n -dispMode dispMode : sets display mode for highlighting"
"\n -layer ZLayer : sets ZLayer for highlighting"