0029334: Simple offsets complicate geometry
authorabv <abv@opencascade.com>
Mon, 20 Nov 2017 05:51:32 +0000 (08:51 +0300)
committerabv <abv@opencascade.com>
Mon, 2 Sep 2019 05:08:37 +0000 (08:08 +0300)
Method BRepOffset::Surface() is used in simple offset algorithm to create offset surface, instead of direct and unconditional construction of new Geom_OffsetSurface instance.

Added test bugs modalg_7 bug29334

src/BRepOffset/BRepOffset_SimpleOffset.cxx
tests/bugs/modalg_7/bug29334 [new file with mode: 0644]

index ff585e5..e021d5e 100644 (file)
@@ -233,7 +233,8 @@ void BRepOffset_SimpleOffset::FillFaceData(const TopoDS_Face& theFace)
   if (theFace.Orientation() == TopAbs_REVERSED)
     aMult = -1.0;
 
-  aNFD.myOffsetS = new Geom_OffsetSurface(aS, aMult * myOffsetValue, Standard_True);
+  BRepOffset_Status aStatus; // set by BRepOffset::Surface(), could be used to check result...
+  aNFD.myOffsetS = BRepOffset::Surface (aS, aMult * myOffsetValue, aStatus, Standard_True);
   aNFD.myL = TopLoc_Location(); // Null transformation.
 
   // Save offset surface in map.
diff --git a/tests/bugs/modalg_7/bug29334 b/tests/bugs/modalg_7/bug29334
new file mode 100644 (file)
index 0000000..b9b4f7a
--- /dev/null
@@ -0,0 +1,28 @@
+puts "# ======================================================================"
+puts "# 0029334: Simple offsets complicate geometry"
+puts "# ======================================================================"
+
+puts "Make box, fillet one of its edges, and extract two planar faces connected by fillet"
+box b 10 10 10
+explode b e
+blend r b 1 b_5
+explode r f
+compound r_1 r_3 r_6 shape
+
+puts "Offset these faces using simple offset algo"
+offsetshapesimple result shape 1
+
+puts "Verify that all faces of the result are either planes or cylinders"
+set i 1
+foreach f [explode result f] {
+  mksurface surf_$i $f
+  set surf_dump [dump surf_$i] 
+  if { [regexp {Offset} $surf_dump] } {
+    puts "Error: surface $i is offset, should be plane or cylinder"
+  }
+  if { ! [regexp {Plane|CylindricalSurface} $surf_dump] } {
+    puts "Error: surface $i is not plane or cylinder"
+  }
+  incr i
+}
+