#include <Prs3d_ShadingAspect.hxx>
#include <PrsMgr_PresentableObject.hxx>
#include <Quantity_Color.hxx>
+#include <SelectMgr_AndFilter.hxx>
+#include <SelectMgr_DisabledObjectsFilter.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_Filter.hxx>
#include <SelectMgr_OrFilter.hxx>
myMainSel(new StdSelect_ViewerSelector3d()),
myToHilightSelected(Standard_True),
mySelection(new AIS_Selection()),
-myFilters(new SelectMgr_OrFilter()),
+myFilters(new SelectMgr_AndFilter()),
myDefaultDrawer(new Prs3d_Drawer()),
myCurDetected(0),
myCurHighlighted(0),
myAutoHilight(Standard_True),
myIsAutoActivateSelMode(Standard_True)
{
+ myFilters->Add (new SelectMgr_DisabledObjectsFilter());
+
mgrSelector = new SelectMgr_SelectionManager (myMainSel);
myStyles[Prs3d_TypeOfHighlight_None] = myDefaultDrawer;
class SelectMgr_SelectionManager;
class V3d_Viewer;
-class SelectMgr_OrFilter;
+class SelectMgr_AndFilter;
class V3d_View;
class TopLoc_Location;
class TCollection_ExtendedString;
public: //! @name Selection Filters management
+ //! Allows you to set the filter.
+ Standard_EXPORT void SetFilter (const Handle(SelectMgr_Filter)& theFilter);
+
+ //! Returns the filter. Use with global is in false to get the filter, that is set with SetFilter.
+ //! If global filter is true, it returns whole filter used in the context (with an internal default filter)
+ Standard_EXPORT Handle(SelectMgr_Filter) Filter (const Standard_Boolean isGlobalFilter = Standard_False) const;
+
//! Returns the list of filters active in a local context.
- Standard_EXPORT const SelectMgr_ListOfFilter& Filters() const;
+ Standard_EXPORT SelectMgr_ListOfFilter Filters() const;
- //! Allows you to add the filter.
+ //! Allows you to add the filter. Default filter here is Or filter.
Standard_EXPORT void AddFilter (const Handle(SelectMgr_Filter)& theFilter);
- //! Removes a filter from context.
+ //! Removes a filter from context. Default filter here is Or filter
Standard_EXPORT void RemoveFilter (const Handle(SelectMgr_Filter)& theFilter);
//! Remove all filters from context.
Handle(SelectMgr_EntityOwner) myLastPicked;
Standard_Boolean myToHilightSelected;
Handle(AIS_Selection) mySelection;
- Handle(SelectMgr_OrFilter) myFilters;
+ Handle(SelectMgr_AndFilter) myFilters;
Handle(Prs3d_Drawer) myDefaultDrawer;
Handle(Prs3d_Drawer) myStyles[Prs3d_TypeOfHighlight_NB];
TColStd_SequenceOfInteger myDetectedSeq;
#include <Prs3d_Presentation.hxx>
#include <Quantity_Color.hxx>
#include <Select3D_SensitiveEntity.hxx>
+#include <SelectMgr_AndFilter.hxx>
+#include <SelectMgr_DisabledObjectsFilter.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_Filter.hxx>
#include <SelectMgr_OrFilter.hxx>
AIS_StatusOfDetection aStatus = AIS_SOD_Nothing;
Standard_Boolean toUpdateViewer = Standard_False;
- myFilters->SetDisabledObjects (theView->View()->HiddenObjects());
+ Handle(SelectMgr_DisabledObjectsFilter) anObjectsFilter = Handle(SelectMgr_DisabledObjectsFilter)::DownCast (myFilters->StoredFilters().First());
+ anObjectsFilter->SetDisabledObjects (theView->View()->HiddenObjects());
myMainSel->Pick (theXPix, theYPix, theView);
// filling of myAISDetectedSeq sequence storing information about detected AIS objects
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_Filter.hxx>
#include <SelectMgr_OrFilter.hxx>
+#include <SelectMgr_AndFilter.hxx>
#include <SelectMgr_SelectionManager.hxx>
#include <Standard_Transient.hxx>
#include <StdSelect_ViewerSelector3d.hxx>
}
}
+//=======================================================================
+//function : SetFilter
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::SetFilter (const Handle(SelectMgr_Filter)& theFilter)
+{
+ Handle(SelectMgr_Filter) aDefFilter = myFilters->StoredFilters().First();
+ if (myFilters->StoredFilters().Size() < 2)
+ {
+ myFilters->Clear();
+ myFilters->Add (aDefFilter);
+ }
+
+ myFilters->Add (theFilter);
+}
+
+//=======================================================================
+//function : Filter
+//purpose :
+//=======================================================================
+Handle(SelectMgr_Filter) AIS_InteractiveContext::Filter (const Standard_Boolean isGlobalFilter) const
+{
+ if (isGlobalFilter)
+ return myFilters;
+
+ if (myFilters->StoredFilters().Size() < 2)
+ return NULL;
+
+ SelectMgr_ListIteratorOfListOfFilter anIterator (myFilters->StoredFilters());
+ anIterator.Next();
+ return anIterator.Value();
+}
+
//=======================================================================
//function : AddFilter
//purpose :
//=======================================================================
-void AIS_InteractiveContext::AddFilter(const Handle(SelectMgr_Filter)& aFilter)
+void AIS_InteractiveContext::AddFilter(const Handle(SelectMgr_Filter)& theFilter)
{
- myFilters->Add(aFilter);
+ Handle(SelectMgr_Filter) aFilter = Filter();
+ if (aFilter.IsNull())
+ SetFilter (new SelectMgr_OrFilter());
+
+ Handle (SelectMgr_CompositionFilter) aCompositeFilter = Handle(SelectMgr_CompositionFilter)::DownCast (aFilter);
+ if (aCompositeFilter.IsNull())
+ return;
+
+ if (aCompositeFilter->IsIn (theFilter))
+ return;
+
+ aCompositeFilter->Add (theFilter);
}
//=======================================================================
//function : RemoveFilter
//purpose :
//=======================================================================
-void AIS_InteractiveContext::RemoveFilter(const Handle(SelectMgr_Filter)& aFilter)
+void AIS_InteractiveContext::RemoveFilter(const Handle(SelectMgr_Filter)& theFilter)
{
- myFilters->Remove(aFilter);
+ Handle(SelectMgr_Filter) aFilter = Filter();
+ if (aFilter.IsNull())
+ return;
+
+ Handle (SelectMgr_CompositionFilter) aCompositeFilter = Handle(SelectMgr_CompositionFilter)::DownCast (aFilter);
+ if (aCompositeFilter.IsNull())
+ return;
+
+ aCompositeFilter->Remove (theFilter);
}
//=======================================================================
void AIS_InteractiveContext::RemoveFilters()
{
- myFilters->Clear();
+ SetFilter (NULL);
}
//=======================================================================
//function : Filters
//purpose :
//=======================================================================
-const SelectMgr_ListOfFilter& AIS_InteractiveContext::Filters() const
+SelectMgr_ListOfFilter AIS_InteractiveContext::Filters() const
{
- return myFilters->StoredFilters();
+ Handle(SelectMgr_Filter) aFilter = Filter();
+ if (aFilter.IsNull())
+ return SelectMgr_ListOfFilter();
+
+ Handle (SelectMgr_CompositionFilter) aCompositeFilter = Handle(SelectMgr_CompositionFilter)::DownCast (aFilter);
+ if (aCompositeFilter.IsNull())
+ return SelectMgr_ListOfFilter();
+
+ return aCompositeFilter->StoredFilters();
}
//=======================================================================
#include <Quantity_Color.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_Filter.hxx>
-#include <SelectMgr_OrFilter.hxx>
+#include <SelectMgr_AndFilter.hxx>
#include <SelectMgr_SelectionManager.hxx>
#include <Standard_Transient.hxx>
#include <TCollection_AsciiString.hxx>
SelectMgr_CompositionFilter.cxx
SelectMgr_CompositionFilter.hxx
SelectMgr_CompositionFilter.lxx
+SelectMgr_DisabledObjectsFilter.cxx
+SelectMgr_DisabledObjectsFilter.hxx
SelectMgr_EntityOwner.cxx
SelectMgr_EntityOwner.hxx
SelectMgr_Filter.cxx
--- /dev/null
+// 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.
+
+
+#include <SelectMgr_EntityOwner.hxx>
+#include <SelectMgr_Filter.hxx>
+#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
+#include <SelectMgr_DisabledObjectsFilter.hxx>
+#include <SelectMgr_SelectableObject.hxx>
+#include <Standard_Type.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_DisabledObjectsFilter, SelectMgr_Filter)
+
+//=============================================================================
+//function : SelectMgr_DisabledObjectsFilter
+//purpose :
+//=============================================================================
+SelectMgr_DisabledObjectsFilter::SelectMgr_DisabledObjectsFilter()
+{
+}
+
+//=============================================================================
+//function : SetDisabledObjects
+//purpose :
+//=============================================================================
+void SelectMgr_DisabledObjectsFilter::SetDisabledObjects (const Handle(Graphic3d_NMapOfTransient)& theObjects)
+{
+ myDisabledObjects = theObjects;
+}
+
+//=============================================================================
+//function : IsOk
+//purpose :
+//=============================================================================
+Standard_Boolean SelectMgr_DisabledObjectsFilter::IsOk (const Handle(SelectMgr_EntityOwner)& theObj) const
+{
+ const SelectMgr_SelectableObject* aSelectable = theObj->Selectable().operator->();
+ if (!myDisabledObjects.IsNull()
+ && myDisabledObjects->Contains (aSelectable))
+ {
+ return Standard_False;
+ }
+
+ return Standard_True;
+}
--- /dev/null
+//
+// 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_DisabledObjectsFilter_HeaderFile
+#define _SelectMgr_DisabledObjectsFilter_HeaderFile
+
+#include <Standard.hxx>
+#include <Standard_Type.hxx>
+
+#include <Graphic3d_NMapOfTransient.hxx>
+#include <Standard_Boolean.hxx>
+
+class SelectMgr_EntityOwner;
+
+
+class SelectMgr_DisabledObjectsFilter;
+DEFINE_STANDARD_HANDLE(SelectMgr_DisabledObjectsFilter, SelectMgr_Filter)
+
+//! A framework to define an or selection filter.
+//! This selects one or another type of sensitive entity.
+class SelectMgr_DisabledObjectsFilter : public SelectMgr_Filter
+{
+
+public:
+
+ //! Constructs an empty or selection filter.
+ Standard_EXPORT SelectMgr_DisabledObjectsFilter();
+
+ Standard_EXPORT Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& anobj) const Standard_OVERRIDE;
+
+ //! Disable selection of specified objects.
+ Standard_EXPORT void SetDisabledObjects (const Handle(Graphic3d_NMapOfTransient)& theObjects);
+
+
+ DEFINE_STANDARD_RTTIEXT(SelectMgr_DisabledObjectsFilter, SelectMgr_Filter)
+
+private:
+
+ Handle(Graphic3d_NMapOfTransient) myDisabledObjects;
+
+
+};
+
+
+
+
+
+
+
+#endif // _SelectMgr_DisabledObjectsFilter_HeaderFile
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_Filter.hxx>
-#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
#include <SelectMgr_OrFilter.hxx>
-#include <SelectMgr_SelectableObject.hxx>
#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_OrFilter,SelectMgr_CompositionFilter)
{
}
-//=============================================================================
-//function : SetDisabledObjects
-//purpose :
-//=============================================================================
-void SelectMgr_OrFilter::SetDisabledObjects (const Handle(Graphic3d_NMapOfTransient)& theObjects)
-{
- myDisabledObjects = theObjects;
-}
-
//=============================================================================
//function : IsOk
//purpose :
//=============================================================================
Standard_Boolean SelectMgr_OrFilter::IsOk (const Handle(SelectMgr_EntityOwner)& theObj) const
{
- const SelectMgr_SelectableObject* aSelectable = theObj->Selectable().operator->();
- if (!myDisabledObjects.IsNull()
- && myDisabledObjects->Contains (aSelectable))
- {
- return Standard_False;
- }
- else if (myFilters.IsEmpty())
+ if (myFilters.IsEmpty())
{
return Standard_True;
}
#include <Standard.hxx>
#include <Standard_Type.hxx>
-#include <Graphic3d_NMapOfTransient.hxx>
#include <SelectMgr_CompositionFilter.hxx>
#include <Standard_Boolean.hxx>
class SelectMgr_EntityOwner;
Standard_EXPORT SelectMgr_OrFilter();
Standard_EXPORT Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& anobj) const Standard_OVERRIDE;
-
- //! Disable selection of specified objects.
- Standard_EXPORT void SetDisabledObjects (const Handle(Graphic3d_NMapOfTransient)& theObjects);
-
-
-
DEFINE_STANDARD_RTTIEXT(SelectMgr_OrFilter,SelectMgr_CompositionFilter)
protected:
-
-
-
-private:
-
-
- Handle(Graphic3d_NMapOfTransient) myDisabledObjects;
-
-
};