+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
// File: ModuleBase_ViewerFilters.cpp
// Created: 07 Okt 2014
// Author: Vitaly SMETANNIKOV
#include <ModelAPI_Session.h>
#include <ModelAPI_Document.h>
+#include <ModelAPI_ResultConstruction.h>
#include <AIS_InteractiveObject.hxx>
#include <AIS_Shape.hxx>
Handle(AIS_InteractiveObject) aAisObj =
Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable());
if (!aAisObj.IsNull()) {
- boost::shared_ptr<GeomAPI_AISObject> aAISObj = AISObjectPtr(new GeomAPI_AISObject());
+ std::shared_ptr<GeomAPI_AISObject> aAISObj = AISObjectPtr(new GeomAPI_AISObject());
aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aAisObj));
ObjectPtr aObj = myWorkshop->findPresentedObject(aAISObj);
if (aObj) {
DocumentPtr aDoc = aObj->document();
SessionPtr aMgr = ModelAPI_Session::get();
- return (aDoc == aMgr->activeDocument()) || (aDoc == aMgr->moduleDocument());
+ return (aDoc == aMgr->activeDocument() || aDoc == aMgr->moduleDocument());
+ }
+ else {
+ // This is not object controlled by the filter
+ return Standard_True;
}
}
}
bool aD3 = myPlane.Distance(aLastPnt) < Precision::Confusion();
return aD1 && aD2 && aD3;
}
+ default:
+ // This is not object controlled by the filter
+ return Standard_True;
+ break;
}
} else {
// This is not object controlled by the filter
}
return Standard_False;
}
+
+
+IMPLEMENT_STANDARD_HANDLE(ModuleBase_ObjectTypesFilter, SelectMgr_Filter);
+IMPLEMENT_STANDARD_RTTIEXT(ModuleBase_ObjectTypesFilter, SelectMgr_Filter);
+
+
+//TODO (VSV): Check bug in OCCT: Filter result is ignored (bug25340)
+Standard_Boolean ModuleBase_ObjectTypesFilter::IsOk(const Handle(SelectMgr_EntityOwner)& theOwner) const
+{
+ Standard_Boolean isOk = ModuleBase_ShapeDocumentFilter::IsOk(theOwner);
+ if (isOk && theOwner->HasSelectable()) {
+ Handle(AIS_InteractiveObject) aAisObj =
+ Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable());
+ if (!aAisObj.IsNull()) {
+ std::shared_ptr<GeomAPI_AISObject> aAISObj = AISObjectPtr(new GeomAPI_AISObject());
+ aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aAisObj));
+ ObjectPtr aObj = myWorkshop->findPresentedObject(aAISObj);
+
+ foreach (QString aType, myTypes) {
+ if (aType.toLower() == "construction") {
+ ResultConstructionPtr aConstr =
+ std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aObj);
+ return (aConstr != NULL);
+ } // ToDo: Process other types of objects
+ }
+ }
+ }
+ return Standard_False;
+}