From: jgv Date: Mon, 28 May 2018 16:13:01 +0000 (+0300) Subject: 0029813: BRepFill_PipeShell algorithm produces invalid result X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=eea519f64350d2ba8b53a9b3d9be1d0caf92a175;p=occt-copy.git 0029813: BRepFill_PipeShell algorithm produces invalid result Modified method: BRepFill_Sweep::BuildShell case of global closedness of path containing several C0-connected parts is corrected. (cherry picked from commit 02e4bacfb08113dcac54707b40a6499725ea00ee) --- diff --git a/src/BRepFill/BRepFill_Sweep.cxx b/src/BRepFill/BRepFill_Sweep.cxx index 5e014f12ca..c7e9550149 100644 --- a/src/BRepFill/BRepFill_Sweep.cxx +++ b/src/BRepFill/BRepFill_Sweep.cxx @@ -2092,11 +2092,12 @@ BRepFill_Sweep::BRepFill_Sweep(const Handle(BRepFill_SectionLaw)& Section, BRep_Builder B; Standard_Integer NbPath = ILast - IFirst; Standard_Integer NbLaw = mySec->NbLaw(); - Standard_Boolean uclose, vclose, constSection, hasdegen = Standard_False; + Standard_Boolean uclose, vclose, global_vclose, constSection, hasdegen = Standard_False; constSection = mySec->IsConstant(); uclose = mySec->IsUClosed(); vclose = (mySec->IsVClosed() && myLoc->IsClosed()) && (NbPath == myLoc->NbLaw()) && (myLoc->IsG1(0, myTol3d)>= 0); + global_vclose = (myLoc->IsClosed()) && (myLoc->IsG1(0, myTol3d)>= 0); Error = 0.; // (1) Construction of all surfaces @@ -2675,7 +2676,10 @@ BRepFill_Sweep::BRepFill_Sweep(const Handle(BRepFill_SectionLaw)& Section, myTol3d); else { - if (ipath != NbPath || vclose) + if (ipath != NbPath || + vclose || + (global_vclose && ILast == myLoc->NbLaw()+1)) + UpdateEdge(TopoDS::Edge(VEdge(isec, ipath+1)), S, exuv, VLast); else //ipath == NbPath && !vclose => rebuild last edge