1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0028390: Visualization, AIS_InteractiveContext - add topmost-only picking strategy

AIS_InteractiveContext::PickingStrategy(), added new property
defining picking strategy SelectMgr_PickingStrategy.
Strategy SelectMgr_PickingStrategy_OnlyTopmost allows picking only
topmost detected entity not rejected by Selection Filters.
This commit is contained in:
kgv
2017-04-11 10:25:21 +03:00
committed by bugmaster
parent 973d410ea4
commit 14c4193d11
7 changed files with 137 additions and 30 deletions

View File

@@ -17,38 +17,34 @@
#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_DisplayStatus.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_DataMapOfIOStatus.hxx>
#include <AIS_DisplayMode.hxx>
#include <AIS_TypeOfIso.hxx>
#include <AIS_DisplayStatus.hxx>
#include <AIS_ClearMode.hxx>
#include <AIS_KindOfInteractive.hxx>
#include <AIS_ListOfInteractive.hxx>
#include <AIS_Selection.hxx>
#include <AIS_StatusOfDetection.hxx>
#include <AIS_StatusOfPick.hxx>
#include <TColgp_Array1OfPnt2d.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 <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 <SelectMgr_ListOfFilter.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;
@@ -56,12 +52,10 @@ class SelectMgr_OrFilter;
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;
@@ -144,6 +138,26 @@ public:
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.
@@ -1864,6 +1878,7 @@ protected:
TColStd_SequenceOfInteger myDetectedSeq;
Standard_Integer myCurDetected;
Standard_Integer myCurHighlighted;
SelectMgr_PickingStrategy myPickingStrategy; //!< picking strategy to be applied within MoveTo()
Standard_Boolean myIsAutoActivateSelMode;
};