0027356: BRepTools::Clean() does not clean free edges from Poly_Polygon3D
authoroan <oan@opencascade.com>
Fri, 15 Apr 2016 14:12:28 +0000 (17:12 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 22 Sep 2017 08:51:58 +0000 (11:51 +0300)
Added code to clean 3D polygons on edges in BRepTools::Clean().

src/BRepTools/BRepTools.cxx
tests/bugs/moddata_3/bug27356 [new file with mode: 0644]

index ae2cb9d..7efc932 100644 (file)
@@ -874,6 +874,21 @@ void BRepTools::Clean(const TopoDS_Shape& theShape)
 
     aBuilder.UpdateFace(aFace, aNullTriangulation);
   }
+
+  // Iterate over all edges seeking for 3d polygons
+  Handle (Poly_Polygon3D) aNullPoly3d;
+  TopExp_Explorer aEdgeIt (theShape, TopAbs_EDGE);
+  for (; aEdgeIt.More (); aEdgeIt.Next ())
+  {
+    const TopoDS_Edge& aEdge = TopoDS::Edge (aEdgeIt.Current ());
+
+    TopLoc_Location aLoc;
+    Handle (Poly_Polygon3D) aPoly3d = BRep_Tool::Polygon3D (aEdge, aLoc);
+    if (aPoly3d.IsNull ())
+      continue;
+
+    aBuilder.UpdateEdge (aEdge, aNullPoly3d);  
+  }
 }
 
 //=======================================================================
diff --git a/tests/bugs/moddata_3/bug27356 b/tests/bugs/moddata_3/bug27356
new file mode 100644 (file)
index 0000000..72c3a6a
--- /dev/null
@@ -0,0 +1,18 @@
+puts "# ============================================================="
+puts "# 0027356: BRepTools::Clean() does not clean free edges from Poly_Polygon3D"
+puts "# ============================================================="
+puts ""
+
+puts "Create simple straight edge and tessellate it"
+vertex v1 0 0 0
+vertex v2 1 0 0
+edge e v1 v2
+incmesh e 0.01
+
+puts "Clean triangulation and check that there are no Polygon3Ds remained"
+tclean e
+if { ! [regexp {Dump of ([0-9]+) Polygon3Ds} [dump e] res count] } {
+  puts "Error: Cannot find number of Polygon3Ds in output of trinfo command"
+} elseif { $count != 0 } {
+  puts "Error: $count Polygon3Ds are found (zero expected)!"
+}
\ No newline at end of file