]> OCCT Git - occt-copy.git/commitdiff
0030250: Obtained shape is invalid due to presence of the loop containing two separat... CR30250
authorgka <gka@opencascade.com>
Thu, 18 Oct 2018 16:50:35 +0000 (19:50 +0300)
committergka <gka@opencascade.com>
Thu, 18 Oct 2018 16:50:35 +0000 (19:50 +0300)
Holes with null area is excluded from result in the ShapeFix_Face::FixMissingSeam in order to avoid cut by seam of the surface

src/ShapeFix/ShapeFix_Face.cxx

index e5843ab6fe46578958e1648320c5791e2a7e121c..e793f08e1ce84999ea455f3d88decc95ac23dbe5 100644 (file)
@@ -505,13 +505,6 @@ Standard_Boolean ShapeFix_Face::Perform()
   if ( NeedFix(myFixPeriodicDegenerated) )
     this->FixPeriodicDegenerated();
 
-
-  if ( NeedFix ( myFixSmallAreaWireMode ) )
-  {
-    if (FixSmallAreaWire(Standard_False))
-      myStatus |= ShapeExtend::EncodeStatus(ShapeExtend_DONE4);
-  }
-
   myResult = myFace;
   TopoDS_Shape savShape = myFace; //gka BUG 6555
  // fix missing seam
@@ -1715,6 +1708,11 @@ Standard_Boolean ShapeFix_Face::FixMissingSeam()
     else if ( wire.IsSame ( w2 ) ) wire = w21;
     else
     {
+      Handle(ShapeAnalysis_Wire) anAnalyzer = new ShapeAnalysis_Wire(wire, myFace, Precision());
+      //To avoid addition of holes with null area (OCCT issue 0030250)
+      if (anAnalyzer->CheckSmallArea(wire))
+        continue;
+     
       // other wires (not boundary) are considered as holes; make sure to have them oriented accordingly
       TopoDS_Shape curface = tmpF.EmptyCopied();
       B.Add(curface,wire);