1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

Compare commits

...

2 Commits

Author SHA1 Message Date
gka
13786aab83 0030250: Obtained shape is invalid due to presence of the loop containing two separate edges lying on the seam of the closed surface
Holes with null area is excluded from result in the ShapeFix_Face::FixMissingSeam in order to avoid cut by seam of the surface
2018-10-18 19:50:35 +03:00
gka
6916477205 0030250: Obtained shape is invalid due to presence of the loop containing two separate edges lying on the seam of the closed surface.
In the class ShapeFix_Face::Perform FixSmallAreaWire() method call was inserted before method FixMissingSeam to remove hole having null area.
2018-10-17 16:36:17 +03:00

View File

@@ -499,17 +499,18 @@ Standard_Boolean ShapeFix_Face::Perform()
}
}
myResult = myFace;
TopoDS_Shape savShape = myFace; //gka BUG 6555
// Specific case for conic surfaces
if ( NeedFix(myFixPeriodicDegenerated) )
this->FixPeriodicDegenerated();
// fix missing seam
if ( NeedFix ( myFixMissingSeamMode ) ) {
myResult = myFace;
TopoDS_Shape savShape = myFace; //gka BUG 6555
// fix missing seam
if ( NeedFix ( myFixMissingSeamMode )) {
if ( FixMissingSeam() ) {
myStatus |= ShapeExtend::EncodeStatus ( ShapeExtend_DONE3 );
myStatus |= ShapeExtend::EncodeStatus( ShapeExtend_DONE3 );
}
}
@@ -1707,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);