Salome HOME
Issue #276 - Names for selected topology
[modules/shaper.git] / src / ModuleBase / ModuleBase_FilterNoDegeneratedEdge.cpp
diff --git a/src/ModuleBase/ModuleBase_FilterNoDegeneratedEdge.cpp b/src/ModuleBase/ModuleBase_FilterNoDegeneratedEdge.cpp
new file mode 100644 (file)
index 0000000..1fb5a57
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
+// File:        ModuleBase_ViewerFilters.cpp
+// Created:     10 Feb 2015
+// Author:      Natalia ERMOLAEVA
+
+
+#include "ModuleBase_FilterNoDegeneratedEdge.h"
+
+#include <StdSelect_BRepOwner.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Shape.hxx>
+#include <BRep_Tool.hxx>
+
+IMPLEMENT_STANDARD_HANDLE(ModuleBase_FilterNoDegeneratedEdge, StdSelect_EdgeFilter);
+IMPLEMENT_STANDARD_RTTIEXT(ModuleBase_FilterNoDegeneratedEdge, StdSelect_EdgeFilter);
+
+ModuleBase_FilterNoDegeneratedEdge::ModuleBase_FilterNoDegeneratedEdge()
+: StdSelect_EdgeFilter(StdSelect_AnyEdge)
+{
+}
+
+Standard_Boolean ModuleBase_FilterNoDegeneratedEdge::IsOk(const Handle(SelectMgr_EntityOwner)& theOwner) const
+{
+  bool isEdge = StdSelect_EdgeFilter::IsOk(theOwner);
+  if (isEdge) {
+    Handle(StdSelect_BRepOwner) anOwner = Handle(StdSelect_BRepOwner)::DownCast(theOwner);
+    if (!anOwner.IsNull() && anOwner->HasShape()) {
+      const TopoDS_Shape& aShape = anOwner->Shape();
+      if (BRep_Tool::Degenerated(TopoDS::Edge(aShape)))
+        return Standard_False;
+    }
+  }
+  return isEdge;
+}
+