Salome HOME
Merge branch 'Dev_0.7.1' of newgeom:newgeom into Dev_0.7.1
[modules/shaper.git] / src / ModuleBase / ModuleBase_FilterLinearEdge.cpp
index 76712c0a7607996bdc75aef0991f166b21be11e1..a5634cba4a8f92609d63426cec0523045ca18486 100644 (file)
@@ -1,50 +1,48 @@
+// 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));
 }