Salome HOME
Issue #310: Do not select Groups for operations
[modules/shaper.git] / src / PartSet / PartSet_Filters.cpp
1 // File:        PartSet_Filters.cpp
2 // Created:     08 Nov 2014
3 // Author:      Vitaly SMETANNIKOV
4
5 #include "PartSet_Filters.h"
6
7 #include <ModuleBase_IWorkshop.h>
8
9 #include <ModelAPI_Feature.h>
10 #include <FeaturesPlugin_Group.h>
11
12 #include <AIS_InteractiveObject.hxx>
13 #include <AIS_Shape.hxx>
14
15
16 IMPLEMENT_STANDARD_HANDLE(PartSet_GlobalFilter, ModuleBase_ShapeDocumentFilter);
17 IMPLEMENT_STANDARD_RTTIEXT(PartSet_GlobalFilter, ModuleBase_ShapeDocumentFilter);
18
19 Standard_Boolean PartSet_GlobalFilter::IsOk(const Handle(SelectMgr_EntityOwner)& theOwner) const
20 {
21   if (ModuleBase_ShapeDocumentFilter::IsOk(theOwner)) {
22     if (theOwner->HasSelectable()) {
23       Handle(AIS_InteractiveObject) aAisObj = 
24         Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable());
25       if (!aAisObj.IsNull()) {
26         std::shared_ptr<GeomAPI_AISObject> aAISObj = AISObjectPtr(new GeomAPI_AISObject());
27         aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aAisObj));
28         ObjectPtr aObj = myWorkshop->findPresentedObject(aAISObj);
29         if (aObj) {
30           FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
31           if (aFeature) {
32             return aFeature->getKind() != FeaturesPlugin_Group::ID();
33           } else 
34             return Standard_True;
35         } else
36           // This is not object controlled by the filter
37           return Standard_True;
38       }
39     }
40   }
41   return Standard_False;
42 }