0029369: ShapeFix_Face algorithm does not heal properly the face lying on a surface...
authorjgv <jgv@opencascade.com>
Mon, 11 Dec 2017 15:28:07 +0000 (18:28 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 22 Mar 2018 17:23:27 +0000 (20:23 +0300)
Add field of class <myCheckMissingEdges> to ShapeFix_Wire to be able not to take into account possibility of missing edges.

src/ShapeFix/ShapeFix_Wire.cxx
src/ShapeFix/ShapeFix_Wire.hxx
src/ShapeFix/ShapeFix_Wire.lxx

index e5b273d..5966d91 100644 (file)
@@ -207,6 +207,7 @@ void ShapeFix_Wire::ClearModes()
   myFixAddCurve3dMode = -1;
   myFixSeamMode = -1;
   myFixShiftedMode = -1;
+  myCheckMissingEdges = Standard_True;
   myFixSameParameterMode = -1;
   myFixVertexToleranceMode = -1;
 
@@ -1460,7 +1461,8 @@ Standard_Boolean ShapeFix_Wire::FixShifted()
 
     // abv 23 Feb 00: UKI60107-6 210: additional check for near-degenerated case
     //smh#15 PRO19800. Check if the surface is surface of revolution.
-    if (surf->Surface()->IsKind (STANDARD_TYPE(Geom_SurfaceOfRevolution))) {
+    if (myCheckMissingEdges &&
+        surf->Surface()->IsKind (STANDARD_TYPE(Geom_SurfaceOfRevolution))) {
       if ( ! isDeg && ! vclosed ) {
        if ( c2d1.IsNull() && ! sae.PCurve ( E1, Face(), c2d1, a1, b1, Standard_True ) ) continue;
        gp_Pnt2d p1 ( SUF, c2d1->Value(b1).Y() );
index a266bc2..19b8bf6 100644 (file)
@@ -230,6 +230,8 @@ public:
   
     Standard_Integer& FixShiftedMode();
   
+    Standard_Boolean& CheckMissingEdgesMode();
+  
     Standard_Integer& FixSameParameterMode();
   
     Standard_Integer& FixVertexToleranceMode();
@@ -478,6 +480,7 @@ protected:
   Standard_Integer myFixAddCurve3dMode;
   Standard_Integer myFixSeamMode;
   Standard_Integer myFixShiftedMode;
+  Standard_Boolean myCheckMissingEdges;
   Standard_Integer myFixSameParameterMode;
   Standard_Integer myFixVertexToleranceMode;
   Standard_Integer myFixNotchedEdgesMode;
index 2ba6455..ae13948 100644 (file)
@@ -306,6 +306,16 @@ inline  Standard_Integer& ShapeFix_Wire::FixShiftedMode()
 }
  
 //=======================================================================
+//function : CheckMissingEdgesMode
+//purpose  : 
+//=======================================================================
+
+inline  Standard_Boolean& ShapeFix_Wire::CheckMissingEdgesMode()
+{
+  return myCheckMissingEdges;
+}
+//=======================================================================
 //function : FixSameParameterMode
 //purpose  : 
 //=======================================================================