From: nds Date: Sun, 8 Dec 2019 15:57:34 +0000 (+0300) Subject: 0031221: Visualization - selection filter in context X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=53bbb3d99268d9aa89affe051ff82b51539a9946;p=occt-copy.git 0031221: Visualization - selection filter in context (cherry picked from commit 0ef1e0394c44f7cb1753634f53e6ef0e8cda86ad) # Conflicts: # src/AIS/AIS_InteractiveContext_1.cxx --- diff --git a/src/AIS/AIS_InteractiveContext.cxx b/src/AIS/AIS_InteractiveContext.cxx index 426f605b45..d9a9f372c5 100644 --- a/src/AIS/AIS_InteractiveContext.cxx +++ b/src/AIS/AIS_InteractiveContext.cxx @@ -39,6 +39,8 @@ #include #include #include +#include +#include #include #include #include @@ -128,7 +130,7 @@ myMainVwr(MainViewer), 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), @@ -136,6 +138,8 @@ myPickingStrategy (SelectMgr_PickingStrategy_FirstAcceptable), myAutoHilight(Standard_True), myIsAutoActivateSelMode(Standard_True) { + myFilters->Add (new SelectMgr_DisabledObjectsFilter()); + mgrSelector = new SelectMgr_SelectionManager (myMainSel); myStyles[Prs3d_TypeOfHighlight_None] = myDefaultDrawer; diff --git a/src/AIS/AIS_InteractiveContext.hxx b/src/AIS/AIS_InteractiveContext.hxx index b888c271e3..42cb59921f 100644 --- a/src/AIS/AIS_InteractiveContext.hxx +++ b/src/AIS/AIS_InteractiveContext.hxx @@ -47,7 +47,7 @@ class SelectMgr_SelectionManager; class V3d_Viewer; -class SelectMgr_OrFilter; +class SelectMgr_AndFilter; class V3d_View; class TopLoc_Location; class TCollection_ExtendedString; @@ -767,13 +767,20 @@ public: //! @name management of active Selection Modes 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. @@ -1392,7 +1399,7 @@ protected: //! @name internal fields 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; diff --git a/src/AIS/AIS_InteractiveContext_1.cxx b/src/AIS/AIS_InteractiveContext_1.cxx index 699a871126..4134d1022c 100644 --- a/src/AIS/AIS_InteractiveContext_1.cxx +++ b/src/AIS/AIS_InteractiveContext_1.cxx @@ -31,8 +31,11 @@ #include #include #include +#include +#include #include #include +#include #include #include #include @@ -335,7 +338,8 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th 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 @@ -347,7 +351,7 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th { Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aDetIter); if (anOwner.IsNull() - || !myFilters->IsOk (anOwner)) + || !myFilters->IsOk (anOwner, SelectMgr_FilterReaction_Highlight)) { if (myPickingStrategy == SelectMgr_PickingStrategy_OnlyTopmost) { @@ -821,7 +825,7 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t 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; } @@ -867,7 +871,7 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t 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()); @@ -943,7 +947,7 @@ void AIS_InteractiveContext::AddOrRemoveSelected (const Handle(SelectMgr_EntityO 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); diff --git a/src/AIS/AIS_InteractiveContext_2.cxx b/src/AIS/AIS_InteractiveContext_2.cxx index 9ce6fa886f..e32f7fc5ec 100644 --- a/src/AIS/AIS_InteractiveContext_2.cxx +++ b/src/AIS/AIS_InteractiveContext_2.cxx @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -264,22 +265,74 @@ void AIS_InteractiveContext::SubIntensityOff (const Handle(AIS_InteractiveObject } } +//======================================================================= +//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); } //======================================================================= @@ -289,16 +342,24 @@ void AIS_InteractiveContext::RemoveFilter(const Handle(SelectMgr_Filter)& aFilte 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(); } //======================================================================= diff --git a/src/AIS/AIS_InteractiveContext_3.cxx b/src/AIS/AIS_InteractiveContext_3.cxx index b0a070f632..14678c1c86 100644 --- a/src/AIS/AIS_InteractiveContext_3.cxx +++ b/src/AIS/AIS_InteractiveContext_3.cxx @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/AIS/AIS_Selection.cxx b/src/AIS/AIS_Selection.cxx index 8569e8a2b7..b5eeb8c09f 100644 --- a/src/AIS/AIS_Selection.cxx +++ b/src/AIS/AIS_Selection.cxx @@ -180,7 +180,7 @@ AIS_SelectStatus AIS_Selection::selectOwner (const Handle(SelectMgr_EntityOwner) const int theSelScheme, const Handle(SelectMgr_Filter)& theFilter) { - if (theOwner.IsNull() || !theOwner->HasSelectable() || !theFilter->IsOk (theOwner)) + if (theOwner.IsNull() || !theOwner->HasSelectable() || !theFilter->IsOk (theOwner, SelectMgr_FilterReaction_Select)) return AIS_SS_NotDone; if (theSelScheme & AIS_SelectionScheme_Add) diff --git a/src/SelectMgr/FILES b/src/SelectMgr/FILES index 208700b0e9..0a7e4bf901 100755 --- a/src/SelectMgr/FILES +++ b/src/SelectMgr/FILES @@ -7,10 +7,13 @@ SelectMgr_BaseFrustum.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 SelectMgr_Filter.hxx +SelectMgr_FilterReaction.hxx SelectMgr_Frustum.hxx SelectMgr_Frustum.lxx SelectMgr_FrustumBuilder.cxx diff --git a/src/SelectMgr/SelectMgr_AndFilter.cxx b/src/SelectMgr/SelectMgr_AndFilter.cxx index 15425280b5..03f9530e6b 100644 --- a/src/SelectMgr/SelectMgr_AndFilter.cxx +++ b/src/SelectMgr/SelectMgr_AndFilter.cxx @@ -24,11 +24,12 @@ IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_AndFilter,SelectMgr_CompositionFilter) 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; } diff --git a/src/SelectMgr/SelectMgr_AndFilter.hxx b/src/SelectMgr/SelectMgr_AndFilter.hxx index 9b76728b4b..8b106746c3 100644 --- a/src/SelectMgr/SelectMgr_AndFilter.hxx +++ b/src/SelectMgr/SelectMgr_AndFilter.hxx @@ -40,9 +40,11 @@ public: //! 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)& theObj) const Standard_OVERRIDE + { (void)theObj; return Standard_False; } + Standard_EXPORT virtual Standard_Boolean IsOk (const Handle(SelectMgr_EntityOwner)& theObj, + const SelectMgr_FilterReaction& theReaction) const Standard_OVERRIDE; DEFINE_STANDARD_RTTIEXT(SelectMgr_AndFilter,SelectMgr_CompositionFilter) diff --git a/src/SelectMgr/SelectMgr_DisabledObjectsFilter.cxx b/src/SelectMgr/SelectMgr_DisabledObjectsFilter.cxx new file mode 100644 index 0000000000..71fd54f431 --- /dev/null +++ b/src/SelectMgr/SelectMgr_DisabledObjectsFilter.cxx @@ -0,0 +1,53 @@ +// 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 +#include +#include +#include +#include +#include + +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; +} diff --git a/src/SelectMgr/SelectMgr_DisabledObjectsFilter.hxx b/src/SelectMgr/SelectMgr_DisabledObjectsFilter.hxx new file mode 100644 index 0000000000..cec66048b0 --- /dev/null +++ b/src/SelectMgr/SelectMgr_DisabledObjectsFilter.hxx @@ -0,0 +1,59 @@ +// +// 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 +#include + +#include +#include + +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 diff --git a/src/SelectMgr/SelectMgr_Filter.hxx b/src/SelectMgr/SelectMgr_Filter.hxx index af9cf7e8b3..8fdc714bb3 100644 --- a/src/SelectMgr/SelectMgr_Filter.hxx +++ b/src/SelectMgr/SelectMgr_Filter.hxx @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -60,6 +61,24 @@ public: //! 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) const + { (void)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. diff --git a/src/SelectMgr/SelectMgr_FilterReaction.hxx b/src/SelectMgr/SelectMgr_FilterReaction.hxx new file mode 100644 index 0000000000..939adb1565 --- /dev/null +++ b/src/SelectMgr/SelectMgr_FilterReaction.hxx @@ -0,0 +1,26 @@ +// 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 diff --git a/src/SelectMgr/SelectMgr_OrFilter.cxx b/src/SelectMgr/SelectMgr_OrFilter.cxx index fe84f35b7f..cedfb54a99 100644 --- a/src/SelectMgr/SelectMgr_OrFilter.cxx +++ b/src/SelectMgr/SelectMgr_OrFilter.cxx @@ -15,9 +15,7 @@ #include #include -#include #include -#include #include IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_OrFilter,SelectMgr_CompositionFilter) @@ -30,28 +28,13 @@ SelectMgr_OrFilter::SelectMgr_OrFilter() { } -//============================================================================= -//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; } diff --git a/src/SelectMgr/SelectMgr_OrFilter.hxx b/src/SelectMgr/SelectMgr_OrFilter.hxx index f4625740d3..192b7e0c9c 100644 --- a/src/SelectMgr/SelectMgr_OrFilter.hxx +++ b/src/SelectMgr/SelectMgr_OrFilter.hxx @@ -20,7 +20,6 @@ #include #include -#include #include #include class SelectMgr_EntityOwner; @@ -41,26 +40,11 @@ public: 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; - - };