+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
// File: ModuleBase_FilterLinearEdge.cpp
// Created: 10 Dec 2014
// Author: Natalia ERMOLAEVA
#include "ModuleBase_FilterLinearEdge.h"
-#include "ModuleBase_IWorkshop.h"
-
-#include <ModelAPI_Session.h>
-#include <ModelAPI_Document.h>
-#include <ModelAPI_ResultConstruction.h>
-#include <AIS_InteractiveObject.hxx>
-#include <AIS_Shape.hxx>
+#include <StdSelect_EdgeFilter.hxx>
+#include <StdSelect_TypeOfEdge.hxx>
-#include <StdSelect_BRepOwner.hxx>
+#include <Events_Error.h>
-#include <BRep_Tool.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <Geom_Curve.hxx>
+#include <QString>
+#include <QMap>
+typedef QMap<QString, StdSelect_TypeOfEdge> EdgeTypes;
+static EdgeTypes MyEdgeTypes;
-IMPLEMENT_STANDARD_HANDLE(ModuleBase_FilterLinearEdge, SelectMgr_Filter);
-IMPLEMENT_STANDARD_RTTIEXT(ModuleBase_FilterLinearEdge, SelectMgr_Filter);
+StdSelect_TypeOfEdge ModuleBase_FilterLinearEdge::edgeType(const std::string& theType)
+{
+ if (MyEdgeTypes.count() == 0) {
+ MyEdgeTypes["line"] = StdSelect_Line;
+ MyEdgeTypes["circle"] = StdSelect_Circle;
+ }
+ QString aType = QString(theType.c_str()).toLower();
+ if (MyEdgeTypes.contains(aType))
+ return MyEdgeTypes[aType];
+ Events_Error::send("Edge type defined in XML is not implemented!");
+ return StdSelect_AnyEdge;
+}
+void ModuleBase_FilterLinearEdge::createFilter()
+{
+ myFilter = new StdSelect_EdgeFilter(StdSelect_AnyEdge);
+}
-Standard_Boolean ModuleBase_FilterLinearEdge::IsOk(const Handle(SelectMgr_EntityOwner)& theOwner) const
+void ModuleBase_FilterLinearEdge::setArguments(const std::list<std::string>& theArguments)
{
- Standard_Boolean isOk = ModuleBase_Filter::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;
+ if (theArguments.size()!= 1)
+ return;
+
+ std::string anArgument = theArguments.front();
+ Handle(StdSelect_EdgeFilter) aFilter = Handle(StdSelect_EdgeFilter)::DownCast(getFilter());
+ if (!aFilter.IsNull())
+ aFilter->SetType(edgeType(anArgument));
}