#include <SelectMgr_DisabledObjectsFilter.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_Filter.hxx>
+#include <SelectMgr_FilterReaction.hxx>
#include <SelectMgr_OrFilter.hxx>
#include <SelectMgr_Selection.hxx>
#include <SelectMgr_SelectionManager.hxx>
{
Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aDetIter);
if (anOwner.IsNull()
- || !myFilters->IsOk (anOwner))
+ || !myFilters->IsOk (anOwner, SelectMgr_FilterReaction_Highlight))
{
if (myPickingStrategy == SelectMgr_PickingStrategy_OnlyTopmost)
{
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
{
const Handle(SelectMgr_EntityOwner)& aSelOwner = aSelIter.Value();
- if (!myFilters->IsOk (aSelOwner))
+ if (!myFilters->IsOk (aSelOwner, SelectMgr_FilterReaction_Select))
{
continue;
}
void AIS_InteractiveContext::SetSelected (const Handle(SelectMgr_EntityOwner)& theOwner,
const Standard_Boolean theToUpdateViewer)
{
- if (theOwner.IsNull() || !theOwner->HasSelectable() || !myFilters->IsOk (theOwner))
+ if (theOwner.IsNull() || !theOwner->HasSelectable() || !myFilters->IsOk (theOwner, SelectMgr_FilterReaction_Select))
return;
const Handle(AIS_InteractiveObject) anObject = Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
if (theOwner.IsNull() || !theOwner->HasSelectable())
return;
- if (!myFilters->IsOk(theOwner) && !theOwner->IsSelected())
+ if (!myFilters->IsOk(theOwner, SelectMgr_FilterReaction_Select) && !theOwner->IsSelected())
return;
mySelection->Select (theOwner);
SelectMgr_EntityOwner.hxx
SelectMgr_Filter.cxx
SelectMgr_Filter.hxx
+SelectMgr_FilterReaction.hxx
SelectMgr_Frustum.hxx
SelectMgr_Frustum.lxx
SelectMgr_FrustumBuilder.cxx
SelectMgr_AndFilter::SelectMgr_AndFilter()
{
}
-Standard_Boolean SelectMgr_AndFilter::IsOk(const Handle(SelectMgr_EntityOwner)& anobj) const
+Standard_Boolean SelectMgr_AndFilter::IsOk(const Handle(SelectMgr_EntityOwner)& theObj,
+ const SelectMgr_FilterReaction& theReaction) const
{
SelectMgr_ListIteratorOfListOfFilter it(myFilters);
- for ( ; it.More();it.Next())
- if(!it.Value()->IsOk(anobj))
+ for ( ; it.More();it.Next())
+ if(!it.Value()->IsOk(theObj, theReaction))
return Standard_False;
return Standard_True;
}
//! more types of entity.
Standard_EXPORT SelectMgr_AndFilter();
- Standard_EXPORT Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& anobj) const Standard_OVERRIDE;
-
+ Standard_EXPORT Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& anobj) const Standard_OVERRIDE
+ { return Standard_False; }
+ Standard_EXPORT virtual Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& theObj,
+ const SelectMgr_FilterReaction& theReaction) const;
DEFINE_STANDARD_RTTIEXT(SelectMgr_AndFilter,SelectMgr_CompositionFilter)
#include <Standard.hxx>
#include <Standard_Type.hxx>
+#include <SelectMgr_FilterReaction.hxx>
#include <Standard_Transient.hxx>
#include <Standard_Boolean.hxx>
#include <TopAbs_ShapeEnum.hxx>
//! virtual function ActsOn.
Standard_EXPORT virtual Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& anObj) const = 0;
+ //! Indicates that the selected Interactive Object
+ //! passes the filter. The owner, anObj, can be either
+ //! direct or user. A direct owner is the corresponding
+ //! construction element, whereas a user is the
+ //! compound shape of which the entity forms a part.
+ //! When an object is detected by the mouse - in AIS,
+ //! this is done through a context selector - its owner
+ //! is passed to the filter as an argument.
+ //! If the object returns Standard_True, it is kept; if
+ //! not, it is rejected.
+ //! If you are creating a filter class inheriting this
+ //! framework, and the daughter class is to be used in
+ //! an AIS local context, you will need to implement the
+ //! virtual function ActsOn.
+ Standard_EXPORT virtual Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& theObj,
+ const SelectMgr_FilterReaction& theReaction)
+ { return IsOk (theObj); }
+
//! Returns true in an AIS local context, if this filter
//! operates on a type of subshape defined in a filter
//! class inheriting this framework.
--- /dev/null
+// 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 _SelectMgr_FilterReaction_HeaderFile
+#define _SelectMgr_FilterReaction_HeaderFile
+
+//! Enumeration defines picking reaction - which action causes the filter check
+enum SelectMgr_FilterReaction
+{
+ SelectMgr_FilterReaction_Empty = 0x0000, //!< do nothing
+ SelectMgr_FilterReaction_Highlight = 0x0001, //!< the reaction to highlght presentation (MoveTo)
+ SelectMgr_FilterReaction_Select = 0x0002, //!< the reaction to highlght presentation (Select)
+ SelectMgr_FilterReaction_SelectAndHighlight = SelectMgr_FilterReaction_Highlight | SelectMgr_FilterReaction_Select
+};
+
+#endif // _SelectMgr_FilterReaction_HeaderFile