From da72a17c803c39c46003447a99dadcfc421bb34e Mon Sep 17 00:00:00 2001 From: azv Date: Tue, 30 Dec 2014 07:37:51 +0300 Subject: [PATCH] 0025656: Specification of semantic of Closed flag of an edge 1. Using of the "Closed" flag was unified: a) this flag is applicable for TopoDS_Wire and TopoDS_Shell only, because these entities may hedge an area in 2D space or a volume in 3D space correspondingly; b) other types of TopoDS shapes are passing over this flag; c) changing of this flag should be controlled by high-level algorithms (not BRep_Builder). 2. Implemented verification of the closedness of edges. An edge is closed if and only if its first and last vertices are the same. 3. Test cases were changed according to new behavior. --- src/BRep/BRep_Builder.cxx | 49 ++++-------------- src/BRep/BRep_Tool.cdl | 11 ++-- src/BRep/BRep_Tool.cxx | 8 ++- src/BRepAlgo/BRepAlgo_Loop.cxx | 2 +- src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx | 5 -- src/BRepFill/BRepFill.cxx | 5 +- src/BRepFill/BRepFill_Evolved.cxx | 2 +- src/BRepFill/BRepFill_Filling.cxx | 2 +- src/BRepFill/BRepFill_Generator.cxx | 12 ++--- src/BRepFill/BRepFill_NSections.cxx | 2 +- src/BRepFill/BRepFill_OffsetWire.cxx | 4 +- src/BRepFill/BRepFill_Pipe.cxx | 6 +-- src/BRepFill/BRepFill_Section.cxx | 1 - src/BRepFill/BRepFill_ShapeLaw.cxx | 19 ++----- src/BRepLib/BRepLib.cxx | 10 ---- src/BRepLib/BRepLib_MakeWire.cxx | 1 - src/BRepLib/BRepLib_MakeWire_1.cxx | 1 - src/BRepOffset/BRepOffset_Offset.cxx | 51 +++---------------- .../BRepOffsetAPI_ThruSections.cxx | 1 - src/BRepPrim/BRepPrim_Builder.cxx | 3 +- src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx | 1 - src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx | 1 - src/BRepProj/BRepProj_Projection.cxx | 2 +- .../BRepSweep_NumLinearRegularSweep.cxx | 7 ++- src/BRepSweep/BRepSweep_Rotation.cxx | 7 --- src/BRepTools/BRepTools_ReShape.cxx | 9 ++-- src/ChFi3d/ChFi3d_Builder_1.cxx | 4 +- src/IGESToBRep/IGESToBRep_BRepEntity.cxx | 2 +- src/LocOpe/LocOpe_SplitShape.cxx | 4 +- src/ShapeBuild/ShapeBuild_ReShape.cxx | 3 +- src/ShapeFix/ShapeFix_Edge.cxx | 37 +------------- src/ShapeFix/ShapeFix_Solid.cxx | 22 ++++---- .../ShapeProcess_ShapeContext.cxx | 3 +- .../ShapeUpgrade_FaceDivideArea.cxx | 3 +- .../TopOpeBRepBuild_Builder1.cxx | 2 +- .../TopOpeBRepBuild_Builder1_1.cxx | 5 -- .../TopOpeBRepBuild_Builder1_2.cxx | 1 - .../TopOpeBRepBuild_FaceBuilder.cxx | 4 +- .../TopOpeBRepBuild_makeedges.cxx | 5 -- src/TopoDS/TopoDS_TShape.cdl | 2 +- tests/bugs/moddata_3/bug25202_1 | 2 +- tests/bugs/moddata_3/bug25202_3 | 2 +- tests/bugs/moddata_3/bug25202_4 | 2 +- 43 files changed, 87 insertions(+), 238 deletions(-) diff --git a/src/BRep/BRep_Builder.cxx b/src/BRep/BRep_Builder.cxx index c556d6a3bb..b30c72fe47 100644 --- a/src/BRep/BRep_Builder.cxx +++ b/src/BRep/BRep_Builder.cxx @@ -563,7 +563,6 @@ void BRep_Builder::MakeEdge(TopoDS_Edge& E) const { TopoDS_LockedShape::Raise("BRep_Builder::MakeEdge"); } - TE->Closed(Standard_False); MakeShape(E,TE); } @@ -586,7 +585,6 @@ void BRep_Builder::UpdateEdge(const TopoDS_Edge& E, const TopLoc_Location l = L.Predivided(E.Location()); UpdateCurves(TE->ChangeCurves(),C,l); - if (!C.IsNull()) TE->Closed(C->IsClosed()); TE->UpdateTolerance(Tol); TE->Modified(Standard_True); @@ -665,8 +663,6 @@ void BRep_Builder::UpdateEdge(const TopoDS_Edge& E, const TopLoc_Location l = L.Predivided(E.Location()); UpdateCurves(TE->ChangeCurves(),C1,C2,S,l); - if (!C1.IsNull() && !C2.IsNull()) - TE->Closed(C1->IsClosed() && C2->IsClosed()); TE->UpdateTolerance(Tol); TE->Modified(Standard_True); @@ -695,9 +691,7 @@ void BRep_Builder::UpdateEdge(const TopoDS_Edge& E, const TopLoc_Location l = L.Predivided(E.Location()); UpdateCurves(TE->ChangeCurves(),C1,C2,S,l,Pf,Pl); - if (!C1.IsNull() && !C2.IsNull()) - TE->Closed(C1->IsClosed() && C2->IsClosed()); - + TE->UpdateTolerance(Tol); TE->Modified(Standard_True); } @@ -768,14 +762,14 @@ void BRep_Builder::UpdateEdge(const TopoDS_Edge& E, while (itcr.More()) { if (itcr.Value()->IsPolygonOnTriangulation(T,l)) - { + { // cr is used to keep a reference on the curve representation // this avoid deleting it as its content may be referenced by T cr = itcr.Value(); lcr.Remove(itcr); isModified = Standard_True; break; - } + } itcr.Next(); } @@ -1093,23 +1087,8 @@ void BRep_Builder::Range(const TopoDS_Edge& E, while (itcr.More()) { GC = Handle(BRep_GCurve)::DownCast(itcr.Value()); - if (!GC.IsNull()) { - if (!Only3d || GC->IsCurve3D()) - GC->SetRange(First,Last); - if (GC->IsCurve3D()) { - // Set the closedness flag to the correct value. - Handle(Geom_Curve) C = GC->Curve3D(); - - //fixing a bug PRO18577 to avoid infinite values of First and Last - if ( !C.IsNull() && - !Precision::IsNegativeInfinite(First) && - !Precision::IsPositiveInfinite(Last) ) { - Standard_Boolean closed = - C->Value(First).IsEqual(C->Value(Last),BRep_Tool::Tolerance(E)); - TE->Closed(closed); - } - } - } + if (!GC.IsNull() && (!Only3d || GC->IsCurve3D())) + GC->SetRange(First,Last); itcr.Next(); } @@ -1141,20 +1120,10 @@ void BRep_Builder::Range(const TopoDS_Edge& E, while (itcr.More()) { GC = Handle(BRep_GCurve)::DownCast(itcr.Value()); - if (!GC.IsNull()) { - if (GC->IsCurveOnSurface(S,l)) { - GC->SetRange(First,Last); - - // Set the closedness flag to the correct value. - Handle(Geom2d_Curve) PC = GC->PCurve(); - gp_Pnt2d P1 = PC->Value(First); - gp_Pnt2d P2 = PC->Value(Last); - gp_Pnt PP1 = S->Value(P1.X(),P1.Y()); - gp_Pnt PP2 = S->Value(P2.X(),P2.Y()); - Standard_Boolean closed = PP1.IsEqual(PP2,BRep_Tool::Tolerance(E)); - TE->Closed(closed); - break; - } + if (!GC.IsNull() && GC->IsCurveOnSurface(S,l)) + { + GC->SetRange(First,Last); + break; } itcr.Next(); } diff --git a/src/BRep/BRep_Tool.cdl b/src/BRep/BRep_Tool.cdl index 84c6c81704..0db0bb0c3d 100644 --- a/src/BRep/BRep_Tool.cdl +++ b/src/BRep/BRep_Tool.cdl @@ -49,14 +49,15 @@ is ----------------------------------------------------------- ----------------------------------------------------------- - -- Solid -- + -- Shape -- ----------------------------------------------------------- ----------------------------------------------------------- IsClosed (myclass; S : Shape from TopoDS) returns Boolean from Standard; - ---Purpose: If S is Solid or Shell, returns True if it has no free boundaries (edges). - -- If S is Wire, returns True if it has no free ends (vertices). - -- (Internal and External sub-shepes are ignored in this check.) - -- For other shape types returns S.Closed(). + ---Purpose: If S is Shell, returns True if it has no free boundaries (edges). + -- If S is Wire, returns True if it has no free ends (vertices). + -- (Internal and External sub-shepes are ignored in these checks) + -- If S is Edge, returns True if its vertices are the same. + -- For other shape types returns S.Closed(). ----------------------------------------------------------- ----------------------------------------------------------- diff --git a/src/BRep/BRep_Tool.cxx b/src/BRep/BRep_Tool.cxx index 930c7dc417..800f1df403 100644 --- a/src/BRep/BRep_Tool.cxx +++ b/src/BRep/BRep_Tool.cxx @@ -1455,7 +1455,7 @@ gp_Pnt2d BRep_Tool::Parameters(const TopoDS_Vertex& V, //======================================================================= Standard_Boolean BRep_Tool::IsClosed (const TopoDS_Shape& theShape) { - if (theShape.ShapeType() == TopAbs_SHELL || theShape.ShapeType() == TopAbs_SOLID) + if (theShape.ShapeType() == TopAbs_SHELL) { NCollection_Map aMap (101, new NCollection_IncAllocator); TopExp_Explorer exp (theShape.Oriented(TopAbs_FORWARD), TopAbs_EDGE); @@ -1487,6 +1487,12 @@ Standard_Boolean BRep_Tool::IsClosed (const TopoDS_Shape& theShape) } return hasBound && aMap.IsEmpty(); } + else if (theShape.ShapeType() == TopAbs_EDGE) + { + TopoDS_Vertex aVFirst, aVLast; + TopExp::Vertices(TopoDS::Edge(theShape), aVFirst, aVLast); + return !aVFirst.IsNull() && aVFirst.IsSame(aVLast); + } return theShape.Closed(); } diff --git a/src/BRepAlgo/BRepAlgo_Loop.cxx b/src/BRepAlgo/BRepAlgo_Loop.cxx index 64bec4b01b..e8cc8c6421 100644 --- a/src/BRepAlgo/BRepAlgo_Loop.cxx +++ b/src/BRepAlgo/BRepAlgo_Loop.cxx @@ -826,7 +826,7 @@ void BRepAlgo_Loop::CutEdge (const TopoDS_Edge& E, { gp_Pnt2d pf, pl; BRep_Tool::UVPoints( EE, myFace, pf, pl ); - if (pf.Distance(pl) <= Tol && !EE.Closed()) + if (pf.Distance(pl) <= Tol && !BRep_Tool::IsClosed(EE)) NE.Remove(it); else it.Next(); diff --git a/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx b/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx index 7e0b90f837..5ef838e04e 100644 --- a/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx +++ b/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx @@ -92,7 +92,6 @@ void BRepFeat_MakeCylindricalHole::Perform(const Standard_Real Radius) TopoDS_Solid theTool; B.MakeSolid(theTool); B.Add(theTool,theCylinder.Shell()); - theTool.Closed(Standard_True); myTopFace = theCylinder.TopFace(); myBotFace = theCylinder.BottomFace(); @@ -193,7 +192,6 @@ void BRepFeat_MakeCylindricalHole::PerformThruNext(const Standard_Real Radius, TopoDS_Solid theTool; B.MakeSolid(theTool); B.Add(theTool,theCylinder.Shell()); - theTool.Closed(Standard_True); myTopFace = theCylinder.TopFace(); myBotFace = theCylinder.BottomFace(); @@ -344,7 +342,6 @@ void BRepFeat_MakeCylindricalHole::PerformUntilEnd(const Standard_Real Radius, TopoDS_Solid theTool; B.MakeSolid(theTool); B.Add(theTool,theCylinder.Shell()); - theTool.Closed(Standard_True); myTopFace = theCylinder.TopFace(); myBotFace = theCylinder.BottomFace(); @@ -474,7 +471,6 @@ void BRepFeat_MakeCylindricalHole::Perform(const Standard_Real Radius, TopoDS_Solid theTool; B.MakeSolid(theTool); B.Add(theTool,theCylinder.Shell()); - theTool.Closed(Standard_True); myTopFace = theCylinder.TopFace(); myBotFace = theCylinder.BottomFace(); @@ -603,7 +599,6 @@ void BRepFeat_MakeCylindricalHole::PerformBlind(const Standard_Real Radius, TopoDS_Solid theTool; B.MakeSolid(theTool); B.Add(theTool,theCylinder.Shell()); - theTool.Closed(Standard_True); myTopFace = theCylinder.TopFace(); myBotFace.Nullify(); diff --git a/src/BRepFill/BRepFill.cxx b/src/BRepFill/BRepFill.cxx index 1b1361ac89..8eb19fc677 100644 --- a/src/BRepFill/BRepFill.cxx +++ b/src/BRepFill/BRepFill.cxx @@ -304,7 +304,6 @@ TopoDS_Face BRepFill::Face(const TopoDS_Edge& Edge1, TopoDS_Edge Edge3, Edge4; Iso = Surf->UIso(f1); -// Tol = Max(BT.Tolerance(V1f), BT.Tolerance(V2f)); Tol = Max(BRep_Tool::Tolerance(V1f), BRep_Tool::Tolerance(V2f)); if (Iso->Value(f2).Distance(Iso->Value(l2)) > Tol) { B.MakeEdge(Edge3,Iso,Precision::Confusion()); @@ -324,7 +323,6 @@ TopoDS_Face BRepFill::Face(const TopoDS_Edge& Edge1, } else { Iso = Surf->UIso(l1); -// Tol = Max(BT.Tolerance(V1l), BT.Tolerance(V2l)); Tol = Max(BRep_Tool::Tolerance(V1l), BRep_Tool::Tolerance(V2l)); if (Iso->Value(l2).Distance(Iso->Value(f2)) > Tol) { B.MakeEdge(Edge4,Iso,Precision::Confusion()); @@ -436,7 +434,8 @@ TopoDS_Shell BRepFill::Shell(const TopoDS_Wire& Wire1, Edge1 = TopoDS::Edge(ex1.Current()); Edge2 = TopoDS::Edge(ex2.Current()); - Standard_Boolean Periodic = Edge1.Closed() && Edge2.Closed(); + Standard_Boolean Periodic = + BRep_Tool::IsClosed(Edge1) && BRep_Tool::IsClosed(Edge2); ex1.Next(); ex2.Next(); diff --git a/src/BRepFill/BRepFill_Evolved.cxx b/src/BRepFill/BRepFill_Evolved.cxx index d23cd97bd6..642fbca5d4 100644 --- a/src/BRepFill/BRepFill_Evolved.cxx +++ b/src/BRepFill/BRepFill_Evolved.cxx @@ -3218,7 +3218,7 @@ void CutEdge (const TopoDS_Edge& E, CT2d = new Geom2d_TrimmedCurve(C2d,f,l); if (CT2d->BasisCurve()->IsKind(STANDARD_TYPE(Geom2d_Circle)) && - E.Closed()) { + BRep_Tool::IsClosed(E)) { //--------------------------- // Cut closed circle. //--------------------------- diff --git a/src/BRepFill/BRepFill_Filling.cxx b/src/BRepFill/BRepFill_Filling.cxx index 4e0bd81a5a..56e108abc1 100644 --- a/src/BRepFill/BRepFill_Filling.cxx +++ b/src/BRepFill/BRepFill_Filling.cxx @@ -681,7 +681,7 @@ void BRepFill_Filling::Build() Handle(Geom2d_Curve) aCurveOnPlate = CurvesOnPlate->Value(i); TopoDS_Edge NewEdge = TopoDS::Edge(anEdge.EmptyCopied()); - NewEdge.Closed(anEdge.Closed()); + TopoDS_Vertex V1, V2; TopExp::Vertices(anEdge, V1, V2, Standard_True); //with orientation BB.UpdateVertex(V1, dmax); diff --git a/src/BRepFill/BRepFill_Generator.cxx b/src/BRepFill/BRepFill_Generator.cxx index 989cd8be54..3f7a83869f 100644 --- a/src/BRepFill/BRepFill_Generator.cxx +++ b/src/BRepFill/BRepFill_Generator.cxx @@ -620,8 +620,8 @@ void BRepFill_Generator::Perform() Edge2 = TopoDS::Edge(ex2.Current()); } - Standard_Boolean Periodic - = (Edge1.Closed() || degen1) && (Edge2.Closed() || degen2); + Standard_Boolean Periodic = (BRep_Tool::IsClosed(Edge1) || degen1) && + (BRep_Tool::IsClosed(Edge2) || degen2); // ATTENTION : a non-punctual wire should not // contain a punctual edge if (!wPoint1) ex1.Next(); @@ -648,13 +648,7 @@ void BRepFill_Generator::Perform() Vf_toMap = V1f; Vl_toMap = V1l; } - - if(Periodic) { - Standard_Boolean E1IsReallyClosed = BRepTools::Compare(V1f,V1l); - Standard_Boolean E2IsReallyClosed = BRepTools::Compare(V2f,V2l); - Periodic - = (E1IsReallyClosed || degen1) && (E2IsReallyClosed || degen2); - } + // processing of KPart Standard_Integer IType = DetectKPart(Edge1,Edge2); if (IType==0) { diff --git a/src/BRepFill/BRepFill_NSections.cxx b/src/BRepFill/BRepFill_NSections.cxx index cbdeab57bd..81431a2f50 100644 --- a/src/BRepFill/BRepFill_NSections.cxx +++ b/src/BRepFill/BRepFill_NSections.cxx @@ -573,7 +573,7 @@ void BRepFill_NSections::Init(const TColStd_SequenceOfReal & P, Last = aux; C = CBis; } - if ((ii>1) || (!E.Closed()) ) { // Cut C + if ((ii>1) || (!BRep_Tool::IsClosed(E)) ) { // Cut C Handle(Geom_TrimmedCurve) TC = new (Geom_TrimmedCurve) (C,First, Last); C = TC; diff --git a/src/BRepFill/BRepFill_OffsetWire.cxx b/src/BRepFill/BRepFill_OffsetWire.cxx index efd39b4f0d..ee341093f5 100644 --- a/src/BRepFill/BRepFill_OffsetWire.cxx +++ b/src/BRepFill/BRepFill_OffsetWire.cxx @@ -251,9 +251,7 @@ static Standard_Boolean KPartCircle C = Ct->BasisCurve(); } - TopoDS_Vertex V1,V2; - TopExp::Vertices(E,V1,V2); - if ((C->IsKind(STANDARD_TYPE(Geom_Circle)) && V1.IsSame(V2)) || //closed circle + if ((C->IsKind(STANDARD_TYPE(Geom_Circle)) && BRep_Tool::IsClosed(E)) || //closed circle IsOpenResult) { Standard_Real anOffset = myOffset; diff --git a/src/BRepFill/BRepFill_Pipe.cxx b/src/BRepFill/BRepFill_Pipe.cxx index 4c27561a7d..3f17c63711 100644 --- a/src/BRepFill/BRepFill_Pipe.cxx +++ b/src/BRepFill/BRepFill_Pipe.cxx @@ -556,18 +556,18 @@ TopoDS_Shape BRepFill_Pipe::MakeShape(const TopoDS_Shape& S, B.MakeShell(TopoDS::Shell(result)); B.MakeWire(W); B.Add(W, S); - W.Closed(S.Closed()); + W.Closed(BRep_Tool::IsClosed(S)); TheS = W; if (!FirstShape.IsNull()) { B.MakeWire(W); B.Add(W, FirstShape); - W.Closed(FirstShape.Closed()); + W.Closed(BRep_Tool::IsClosed(FirstShape)); TheFirst = W; } if (!LastShape.IsNull()) { B.MakeWire(W); B.Add(W, LastShape); - W.Closed(LastShape.Closed()); + W.Closed(BRep_Tool::IsClosed(LastShape)); TheLast = W; } result.Closed (BRep_Tool::IsClosed (result)); diff --git a/src/BRepFill/BRepFill_Section.cxx b/src/BRepFill/BRepFill_Section.cxx index 6f00f35ca9..070eb2d8e9 100644 --- a/src/BRepFill/BRepFill_Section.cxx +++ b/src/BRepFill/BRepFill_Section.cxx @@ -46,7 +46,6 @@ BRepFill_Section::BRepFill_Section(const TopoDS_Shape& Profile, BB.Add( DegEdge, aVertex.Oriented(TopAbs_FORWARD) ); BB.Add( DegEdge, aVertex.Oriented(TopAbs_REVERSED) ); BB.Degenerated( DegEdge, Standard_True ); - DegEdge.Closed( Standard_True ); BB.MakeWire( wire ); BB.Add( wire, DegEdge ); diff --git a/src/BRepFill/BRepFill_ShapeLaw.cxx b/src/BRepFill/BRepFill_ShapeLaw.cxx index 096688580c..a48f1784bc 100644 --- a/src/BRepFill/BRepFill_ShapeLaw.cxx +++ b/src/BRepFill/BRepFill_ShapeLaw.cxx @@ -149,23 +149,12 @@ void BRepFill_ShapeLaw::Init(const Standard_Boolean Build) C = CBis; } - Standard_Boolean IsReallyClosed = E.Closed(); - //IFV - some checking when closed flag is wrong - if(IsReallyClosed) { - TopoDS_Vertex V1, V2; - TopExp::Vertices(E, V1, V2); - if(V1.IsNull() || V2.IsNull()) { - IsReallyClosed = Standard_False; - } - else { - IsReallyClosed = V1.IsSame(V2); - } - } - if (IsReallyClosed && + Standard_Boolean IsClosed = BRep_Tool::IsClosed(E); + if (IsClosed && Abs(C->FirstParameter() - First) > Precision::PConfusion()) - IsReallyClosed = Standard_False; //trimmed curve differs + IsClosed = Standard_False; //trimmed curve differs - if ((ii>1) || !IsReallyClosed ) { // Trim C + if ((ii>1) || !IsClosed ) { // Trim C Handle(Geom_TrimmedCurve) TC = new Geom_TrimmedCurve(C,First, Last); C = TC; } diff --git a/src/BRepLib/BRepLib.cxx b/src/BRepLib/BRepLib.cxx index 1ff393d404..3b72a6ff6b 100644 --- a/src/BRepLib/BRepLib.cxx +++ b/src/BRepLib/BRepLib.cxx @@ -361,15 +361,9 @@ Standard_Boolean BRepLib::BuildCurve3d(const TopoDS_Edge& AnEdge, Standard_Real First, Last; BRep_Builder B; - Standard_Boolean is_closed ; - is_closed = AnEdge.Closed() ; - B.UpdateEdge(AnEdge,C3d,LocalLoc,0.0e0); BRep_Tool::Range(AnEdge, S, LC, First, Last); B.Range(AnEdge, First, Last); //Do not forget 3D range.(PRO6412) - TopoDS_Edge E = AnEdge ; - E.Closed(is_closed) ; - } else { // @@ -430,14 +424,10 @@ Standard_Boolean BRepLib::BuildCurve3d(const TopoDS_Edge& AnEdge, max_deviation = Max( tolerance, Tolerance ); if (NewCurvePtr.IsNull()) return Standard_False; - Standard_Boolean is_closed ; - is_closed = AnEdge.Closed() ; B.UpdateEdge(TopoDS::Edge(AnEdge), NewCurvePtr, L[0], max_deviation) ; - TopoDS_Edge E = AnEdge ; - E.Closed(is_closed) ; if (jj == 1 ) { // // if there is only one curve on surface attached to the edge diff --git a/src/BRepLib/BRepLib_MakeWire.cxx b/src/BRepLib/BRepLib_MakeWire.cxx index 3e4a82d70c..c0de4f9b7f 100644 --- a/src/BRepLib/BRepLib_MakeWire.cxx +++ b/src/BRepLib/BRepLib_MakeWire.cxx @@ -279,7 +279,6 @@ void BRepLib_MakeWire::Add(const TopoDS_Edge& E) // copy the edge TopoDS_Shape Dummy = EE.EmptyCopied(); myEdge = TopoDS::Edge(Dummy); - myEdge.Closed(EE.Closed()); for (it.Initialize(EE); it.More(); it.Next()) { diff --git a/src/BRepLib/BRepLib_MakeWire_1.cxx b/src/BRepLib/BRepLib_MakeWire_1.cxx index 8bafda8e4e..35a595b73b 100644 --- a/src/BRepLib/BRepLib_MakeWire_1.cxx +++ b/src/BRepLib/BRepLib_MakeWire_1.cxx @@ -97,7 +97,6 @@ void BRepLib_MakeWire::Add(const TopTools_ListOfShape& L) TopoDS_Edge newEd=TopoDS::Edge(aLocalShape); // TopoDS_Edge newEd=TopoDS::Edge(curEd.EmptyCopied()); BB.Transfert(curEd, newEd); - newEd.Closed(curEd.Closed()); TopTools_ListIteratorOfListOfShape itV(nlist); for (; itV.More(); itV.Next()) { BB.Add(newEd, itV.Value()); diff --git a/src/BRepOffset/BRepOffset_Offset.cxx b/src/BRepOffset/BRepOffset_Offset.cxx index e3eda2d5c3..7e734e0555 100644 --- a/src/BRepOffset/BRepOffset_Offset.cxx +++ b/src/BRepOffset/BRepOffset_Offset.cxx @@ -179,43 +179,6 @@ static void UpdateEdge (const TopoDS_Edge& E, B.UpdateEdge(E,NC1,NC2,F,Tol); } -//======================================================================= -//function : Range3d -//purpose : Set the range only on the 3d curve -// waitint that BRep_Builder does it !! -//======================================================================= - -static void Range3d (const TopoDS_Edge& E, - const Standard_Real First, - const Standard_Real Last) -{ - // set the range to all the representations - const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape()); - - BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves(); - BRep_ListIteratorOfListOfCurveRepresentation itcr(lcr); - Handle(BRep_GCurve) GC; - - while (itcr.More()) { - GC = Handle(BRep_GCurve)::DownCast(itcr.Value()); - if (!GC.IsNull()) { - if (GC->IsCurve3D()) { - GC->SetRange(First,Last); - // Set the closedness flag to the correct value. - Handle(Geom_Curve) C = GC->Curve3D(); - if ( !C.IsNull() ) { - Standard_Boolean closed = - C->Value(First).IsEqual(C->Value(Last),BRep_Tool::Tolerance(E)); - TE->Closed(closed); - } - } - } - itcr.Next(); - } - - TE->Modified(Standard_True); -} - //======================================================================= //function : ComputeCurve3d @@ -1165,12 +1128,11 @@ void BRepOffset_Offset::Init(const TopoDS_Edge& Path, // mise a same range de la nouvelle pcurve. if ( !C1is3D && !C1Denerated) - myBuilder.SameRange (Edge1,Standard_False); - if ( !C1is3D && !C1Denerated) - Range3d(Edge1,U1,U2); - myBuilder.Range (Edge1,myFace,U1,U2); - Range3d(Edge1,U1,U2); - myBuilder.Range (Edge1,myFace,U1,U2); + { + myBuilder.SameRange (Edge1,Standard_False); + myBuilder.Range(Edge1,U1,U2, Standard_True); + } + myBuilder.Range(Edge1,myFace,U1,U2); BRepLib::SameRange(Edge1); // mise a sameparameter pour les KPart @@ -1206,7 +1168,8 @@ void BRepOffset_Offset::Init(const TopoDS_Edge& Path, // mise a same range de la nouvelle pcurve. myBuilder.SameRange (Edge2,Standard_False); - if ( !C2is3D && !C2Denerated) Range3d(Edge2,U1,U2); + if ( !C2is3D && !C2Denerated) + myBuilder.Range(Edge2, U1, U2, Standard_True); myBuilder.Range(Edge2,myFace,U1,U2); BRepLib::SameRange(Edge2); diff --git a/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx b/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx index be62e61aba..db5178fca0 100644 --- a/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx +++ b/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx @@ -317,7 +317,6 @@ void BRepOffsetAPI_ThruSections::AddVertex(const TopoDS_Vertex& aVertex) BB.Add( DegEdge, aVertex.Oriented(TopAbs_FORWARD) ); BB.Add( DegEdge, aVertex.Oriented(TopAbs_REVERSED) ); BB.Degenerated( DegEdge, Standard_True ); - DegEdge.Closed( Standard_True ); TopoDS_Wire DegWire; BB.MakeWire( DegWire ); diff --git a/src/BRepPrim/BRepPrim_Builder.cxx b/src/BRepPrim/BRepPrim_Builder.cxx index beab8514db..aa2eb0a8ab 100644 --- a/src/BRepPrim/BRepPrim_Builder.cxx +++ b/src/BRepPrim/BRepPrim_Builder.cxx @@ -210,7 +210,6 @@ void BRepPrim_Builder::AddEdgeVertex (TopoDS_Edge& E, VV.Orientation(TopAbs_REVERSED); myBuilder.Add(E,VV); myBuilder.Range(E,P1,P2); - E.Closed(Standard_True); } //======================================================================= @@ -280,6 +279,7 @@ void BRepPrim_Builder::CompleteEdge(TopoDS_Edge& E)const void BRepPrim_Builder::CompleteWire(TopoDS_Wire& W)const { + W.Closed(BRep_Tool::IsClosed(W)); BRepTools::Update(W); } @@ -302,5 +302,6 @@ void BRepPrim_Builder::CompleteFace(TopoDS_Face& F)const void BRepPrim_Builder::CompleteShell(TopoDS_Shell& S)const { + S.Closed(BRep_Tool::IsClosed(S)); BRepTools::Update(S); } diff --git a/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx b/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx index 3a6e0c1020..6f97b32113 100644 --- a/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx +++ b/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx @@ -52,7 +52,6 @@ void BRepPrimAPI_MakeOneAxis::Build() BRep_Builder B; B.MakeSolid(TopoDS::Solid(myShape)); B.Add(myShape,((BRepPrim_OneAxis*) OneAxis())->Shell()); - myShape.Closed(Standard_True); Done(); } diff --git a/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx b/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx index 34dc6decd9..65422dc73f 100644 --- a/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx +++ b/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx @@ -119,7 +119,6 @@ void BRepPrimAPI_MakeWedge::Build() BRep_Builder B; B.MakeSolid(TopoDS::Solid(myShape)); B.Add(myShape,myWedge.Shell()); - myShape.Closed(Standard_True); Done(); } diff --git a/src/BRepProj/BRepProj_Projection.cxx b/src/BRepProj/BRepProj_Projection.cxx index 0edfa6bffd..c56a0e61f6 100644 --- a/src/BRepProj/BRepProj_Projection.cxx +++ b/src/BRepProj/BRepProj_Projection.cxx @@ -260,7 +260,7 @@ BRepProj_Projection::BRepProj_Projection (const TopoDS_Shape& Wire, BB.Add( DegEdge, aVertex.Oriented(TopAbs_FORWARD) ); BB.Add( DegEdge, aVertex.Oriented(TopAbs_REVERSED) ); BB.Degenerated( DegEdge, Standard_True ); - DegEdge.Closed( Standard_True ); + TopoDS_Wire DegWire; BB.MakeWire( DegWire ); BB.Add( DegWire, DegEdge ); diff --git a/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx b/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx index 21c5c30489..7a9d71a1a9 100644 --- a/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx +++ b/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx @@ -256,6 +256,7 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS, TopoDS_Shape wi; myBuilder.MakeWire(wi); myBuilder.Add(wi,newShape,Or); + wi.Closed(BRep_Tool::IsClosed(wi)); WireSeq.Append(wi); } else{ @@ -328,6 +329,7 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS, } } else{ + newWire.Closed(BRep_Tool::IsClosed(newWire)); myBuilder.Add(myShapes(iGenS,iDirS),newWire); } myBuiltShapes(iGenS,iDirS) = Standard_True; @@ -393,7 +395,10 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS, } myBuiltShapes(iGenS,iDirS) = Standard_True; } - myShapes(iGenS,iDirS).Closed (BRep_Tool::IsClosed (myShapes(iGenS,iDirS))); + // Change the "Closed" flag only for Wires and Shells + if (myShapes(iGenS, iDirS).ShapeType() == TopAbs_WIRE || + myShapes(iGenS, iDirS).ShapeType() == TopAbs_SHELL) + myShapes(iGenS,iDirS).Closed (BRep_Tool::IsClosed (myShapes(iGenS,iDirS))); return myShapes(iGenS,iDirS); } diff --git a/src/BRepSweep/BRepSweep_Rotation.cxx b/src/BRepSweep/BRepSweep_Rotation.cxx index 99dcfffa56..b0d01d3d42 100644 --- a/src/BRepSweep/BRepSweep_Rotation.cxx +++ b/src/BRepSweep/BRepSweep_Rotation.cxx @@ -201,14 +201,7 @@ TopoDS_Shape BRepSweep_Rotation::MakeEmptyDirectingEdge Handle(Geom_Circle) GC = new Geom_Circle(Axis,O.Distance(P)); Standard_Real tol = BRep_Tool::Tolerance(TopoDS::Vertex(aGenV)); myBuilder.Builder().MakeEdge(E, GC, tol); - - gp_Pnt PLast = GC->Value(myAng); - if(PLast.SquareDistance(P) > tol*tol) E.Closed(Standard_False); - } - - - return E; } diff --git a/src/BRepTools/BRepTools_ReShape.cxx b/src/BRepTools/BRepTools_ReShape.cxx index 77fadbad9b..3ca3db4e1c 100644 --- a/src/BRepTools/BRepTools_ReShape.cxx +++ b/src/BRepTools/BRepTools_ReShape.cxx @@ -375,10 +375,7 @@ TopoDS_Shape BRepTools_ReShape::Apply (const TopoDS_Shape& shape, if ( (modif < 0 && buildmode < 2) || (modif == 0 && buildmode < 1) ) return C; else - { - S.Closed (BRep_Tool::IsClosed (S)); return S; - } } if (st == TopAbs_SHELL) { @@ -542,17 +539,17 @@ TopoDS_Shape BRepTools_ReShape::Apply (const TopoDS_Shape& shape, //BRepTools_Edge sbe; CopyRanges ( TopoDS::Edge ( result ), TopoDS::Edge ( shape ),0,1 ); } - - if (st == TopAbs_FACE) { + else if (st == TopAbs_FACE) { TopoDS_Face face = TopoDS::Face ( shape ); if( BRep_Tool::NaturalRestriction( face ) ) { BRep_Builder aB; aB.NaturalRestriction( TopoDS::Face ( result ), Standard_True ); } } + else if (st == TopAbs_WIRE || st == TopAbs_SHELL) + result.Closed (BRep_Tool::IsClosed (result)); result.Orientation(orien); - result.Closed (BRep_Tool::IsClosed (result)); myStatus = locStatus; Replace ( shape, result ); diff --git a/src/ChFi3d/ChFi3d_Builder_1.cxx b/src/ChFi3d/ChFi3d_Builder_1.cxx index 376b1390a0..378d078f66 100644 --- a/src/ChFi3d/ChFi3d_Builder_1.cxx +++ b/src/ChFi3d/ChFi3d_Builder_1.cxx @@ -547,9 +547,7 @@ void ChFi3d_Builder::PerformExtremity (const Handle(ChFiDS_Spine)& Spine) Ec = TopoDS::Edge(It.Value()); Standard_Boolean bonedge = !BRep_Tool::Degenerated(Ec); if(bonedge){ - TopoDS_Vertex v1,v2; - TopExp::Vertices(Ec,v1,v2); - Standard_Boolean eclosed = v1.IsSame(v2); + Standard_Boolean eclosed = BRep_Tool::IsClosed(Ec); Standard_Integer nboc = 0; for(j = 0; j <= i && bonedge; j++){ if(!eclosed) bonedge = !Ec.IsSame(E[j]); diff --git a/src/IGESToBRep/IGESToBRep_BRepEntity.cxx b/src/IGESToBRep/IGESToBRep_BRepEntity.cxx index 5b86bffd2b..1fe2ad4685 100644 --- a/src/IGESToBRep/IGESToBRep_BRepEntity.cxx +++ b/src/IGESToBRep/IGESToBRep_BRepEntity.cxx @@ -268,7 +268,7 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferEdge Standard_Real dist2f = p2.Distance ( pf ); Standard_Real dist1l = p1.Distance ( pl ); Standard_Real dist2l = p2.Distance ( pl ); - if ( E.Closed() || dist1f + dist2l <= dist1l + dist2f ) { + if ( V1.IsSame(V2) || dist1f + dist2l <= dist1l + dist2f + Precision::Confusion() ) { //:77 if (BRepTools::Compare(V1, Vf)) //the part 'else' only if, in fact, edge should be reversed V1.Orientation(TopAbs_FORWARD); B.Add(E,V1); diff --git a/src/LocOpe/LocOpe_SplitShape.cxx b/src/LocOpe/LocOpe_SplitShape.cxx index aac49a456a..721792410a 100644 --- a/src/LocOpe/LocOpe_SplitShape.cxx +++ b/src/LocOpe/LocOpe_SplitShape.cxx @@ -1233,7 +1233,9 @@ Standard_Boolean LocOpe_SplitShape::Rebuild(const TopoDS_Shape& S) B.Add(result,itr.Value().Oriented(orient)); } } - result.Closed (BRep_Tool::IsClosed(result)); + // Assign "Closed" flag for Wires and Shells only + if (result.ShapeType() == TopAbs_WIRE || result.ShapeType() == TopAbs_SHELL) + result.Closed (BRep_Tool::IsClosed(result)); myMap(S).Append(result); } else { diff --git a/src/ShapeBuild/ShapeBuild_ReShape.cxx b/src/ShapeBuild/ShapeBuild_ReShape.cxx index a82f68297f..d874d5bc16 100644 --- a/src/ShapeBuild/ShapeBuild_ReShape.cxx +++ b/src/ShapeBuild/ShapeBuild_ReShape.cxx @@ -124,8 +124,9 @@ TopoDS_Shape ShapeBuild_ReShape::Apply (const TopoDS_Shape& shape, ShapeBuild_Edge sbe; sbe.CopyRanges ( TopoDS::Edge ( result ), TopoDS::Edge ( shape )); } + else if (st == TopAbs_WIRE || st == TopAbs_SHELL) + result.Closed (BRep_Tool::IsClosed (result)); result.Orientation(orient); - result.Closed (BRep_Tool::IsClosed (result)); myStatus = locStatus; Replace ( shape, result ); diff --git a/src/ShapeFix/ShapeFix_Edge.cxx b/src/ShapeFix/ShapeFix_Edge.cxx index 231a2057cb..a6e4b044de 100644 --- a/src/ShapeFix/ShapeFix_Edge.cxx +++ b/src/ShapeFix/ShapeFix_Edge.cxx @@ -314,41 +314,6 @@ static Handle(Geom2d_Curve) TranslatePCurve (const Handle(Geom_Surface)& aSurf, return aC2d; } -//======================================================================= -//static : Range3d -//purpose : contournement du Range de BRep_Builder pour ne pas affecter -// les ranges des pcurves. -//======================================================================= - -static void Range3d (const TopoDS_Edge& E, - const Standard_Real First, const Standard_Real Last, - const Standard_Real myPrecision) -{ - // set the range to all the representations - const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape()); - - BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves(); - BRep_ListIteratorOfListOfCurveRepresentation itcr(lcr); - Handle(BRep_GCurve) GC; - - while (itcr.More()) { - GC = Handle(BRep_GCurve)::DownCast(itcr.Value()); - if (!GC.IsNull()) { - if (GC->IsCurve3D()) { - GC->SetRange(First,Last); - // Set the closedness flag to the correct value. - Handle(Geom_Curve) C = GC->Curve3D(); - if ( !C.IsNull() ) { - Standard_Boolean closed = C->Value(First).IsEqual(C->Value(Last),myPrecision); - TE->Closed(closed); - } - } - } - itcr.Next(); - } - - TE->Modified(Standard_True); -} //======================================================================= //function : SameRange (Temp) //purpose : @@ -585,7 +550,7 @@ Standard_Boolean ShapeFix_Edge::FixAddPCurve (const TopoDS_Edge& edge, Standard_Real G3dCFirst = c3d->FirstParameter(); Standard_Real G3dCLast = c3d->LastParameter(); B.UpdateEdge(edge, c3d, 0.); - Range3d(edge, G3dCFirst, G3dCLast, 0.); + B.Range(edge, G3dCFirst, G3dCLast, Standard_True); } } // end try catch(Standard_Failure) { diff --git a/src/ShapeFix/ShapeFix_Solid.cxx b/src/ShapeFix/ShapeFix_Solid.cxx index bbe3110d35..7d14865161 100644 --- a/src/ShapeFix/ShapeFix_Solid.cxx +++ b/src/ShapeFix/ShapeFix_Solid.cxx @@ -432,18 +432,16 @@ Standard_Boolean ShapeFix_Solid::Perform(const Handle(Message_ProgressIndicator) } if(isClosed || myCreateOpenSolidMode) { - if(BRep_Tool::IsClosed(tmpShape)) { - TopoDS_Iterator itersh(tmpShape); - TopoDS_Shell aShell; - if(itersh.More() && itersh.Value().ShapeType() == TopAbs_SHELL) - aShell = TopoDS::Shell(itersh.Value()); - if(!aShell.IsNull()) { - TopoDS_Solid aSol = SolidFromShell(aShell); - if(ShapeExtend::DecodeStatus(myStatus,ShapeExtend_DONE2)) { - SendWarning (Message_Msg ("FixAdvSolid.FixOrientation.MSG20"));// Orientaion of shell was corrected. - Context()->Replace(tmpShape,aSol); - tmpShape = aSol; - } + TopoDS_Iterator itersh(tmpShape); + TopoDS_Shell aShell; + if(itersh.More() && itersh.Value().ShapeType() == TopAbs_SHELL) + aShell = TopoDS::Shell(itersh.Value()); + if(!aShell.IsNull()) { + TopoDS_Solid aSol = SolidFromShell(aShell); + if(ShapeExtend::DecodeStatus(myStatus,ShapeExtend_DONE2)) { + SendWarning (Message_Msg ("FixAdvSolid.FixOrientation.MSG20"));// Orientaion of shell was corrected. + Context()->Replace(tmpShape,aSol); + tmpShape = aSol; } } mySolid = TopoDS::Solid(tmpShape); diff --git a/src/ShapeProcess/ShapeProcess_ShapeContext.cxx b/src/ShapeProcess/ShapeProcess_ShapeContext.cxx index 0fa6f719c2..51007d2286 100644 --- a/src/ShapeProcess/ShapeProcess_ShapeContext.cxx +++ b/src/ShapeProcess/ShapeProcess_ShapeContext.cxx @@ -212,7 +212,8 @@ static void RecModif (const TopoDS_Shape &S, } if ( modif ) { - result.Closed (BRep_Tool::IsClosed (result)); + if (result.ShapeType() == TopAbs_WIRE || result.ShapeType() == TopAbs_SHELL) + result.Closed (BRep_Tool::IsClosed (result)); res = result; } } diff --git a/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx b/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx index 12ea362a5c..1b9fb6c4be 100644 --- a/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx +++ b/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx @@ -97,7 +97,8 @@ ShapeUpgrade_FaceDivideArea::ShapeUpgrade_FaceDivideArea(const TopoDS_Face& F) } if(isModified) { - aCopyRes.Closed (BRep_Tool::IsClosed (aCopyRes)); + if (aCopyRes.ShapeType() == TopAbs_WIRE || aCopyRes.ShapeType() == TopAbs_SHELL) + aCopyRes.Closed (BRep_Tool::IsClosed (aCopyRes)); Context()->Replace(aResult,aCopyRes); } myStatus |= aStatus; diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx index c2ddae9fdc..9f3698f2ef 100644 --- a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx +++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx @@ -1795,7 +1795,7 @@ Standard_Integer TopOpeBRepBuild_Builder1::IsSame2d (const TopTools_SequenceOfSh if (!(aBAS.IsUPeriodic() || aBAS.IsVPeriodic())) return 1; //we process here only fully closed edges (Vf == Vl) - if(!anEdgeObj.Closed() || !anEdgeTool.Closed()) + if(!BRep_Tool::IsClosed(anEdgeObj) || !BRep_Tool::IsClosed(anEdgeTool)) return 1; Standard_Real f = 0., l = 0., tolpc = 0. , diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx index bf0d357d4e..b4cb1b69d5 100644 --- a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx +++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx @@ -553,8 +553,6 @@ void TopOpeBRepBuild_Builder1::Destroy() Vl = TopoDS::Vertex(myDataStructure->Shape(iref)); Vl.Orientation(TopAbs_REVERSED); } - Standard_Boolean bitclosed = Vf.IsSame(Vl); - aNewEdge.Closed(bitclosed); myBuildTool.AddEdgeVertex (aNewEdge, Vf); myBuildTool.Parameter (aNewEdge, Vf, ParF); @@ -841,9 +839,6 @@ void TopOpeBRepBuild_Builder1::Destroy() // Make new edge from EdgeF TopoDS_Edge aNewEdge; myBuildTool.CopyEdge (EdgeF, aNewEdge); - - Standard_Boolean bitclosed = aV1.IsSame(aV2); - aNewEdge.Closed(bitclosed); myBuildTool.AddEdgeVertex (aNewEdge, aV1); myBuildTool.Parameter (aNewEdge, aV1, aPar1); diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx index 6eb13c1a2e..086b93b6d5 100644 --- a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx +++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx @@ -152,7 +152,6 @@ Standard_Integer TopOpeBRepBuild_Builder1::CorrectResult2d(TopoDS_Shape& aResult aShell.Closed (BRep_Tool::IsClosed(aShell)); BB.Add (aSolid, aShell); } - aSolid.Closed (BRep_Tool::IsClosed(aSolid)); aResult=aSolid; //update section curves diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx index c4d86d3494..64d2070c67 100644 --- a/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx +++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx @@ -145,7 +145,7 @@ Standard_Integer FUN_AnalyzemapVon1E(const TopTools_IndexedDataMapOfShapeShape& } else if (nV == 1) { const TopoDS_Shape& E = mapVon1E.FindFromIndex(1); - Standard_Boolean Eclosed = E.Closed(); + Standard_Boolean Eclosed = BRep_Tool::IsClosed(E); Standard_Boolean dgE = BRep_Tool::Degenerated(TopoDS::Edge(E)); if (dgE) res = ISVERTEX; else if (Eclosed) res = CLOSEDW; @@ -319,7 +319,7 @@ void TopOpeBRepBuild_FaceBuilder::DetectUnclosedWire(TopTools_IndexedDataMapOfSh { const TopoDS_Edge &E = TopoDS::Edge (itE.Value()); Standard_Integer I = myBlockBuilder.Element(E); - if (!E.Closed() && myBlockBuilder.ElementIsValid(I)) + if (!BRep_Tool::IsClosed(E) && myBlockBuilder.ElementIsValid(I)) { TopoDS_Vertex Vf,Vl; TopExp::Vertices (E, Vf, Vl); diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx index 58ad7d8474..2a963cc45e 100644 --- a/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx +++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx @@ -150,11 +150,6 @@ void TopOpeBRepBuild_Builder::GEDBUMakeEdges } // EDBUloop.InitVertex : on vertices of new edge newEdge Standard_Boolean addedge = (nVF == 1 && nVR == 1); - Standard_Boolean bitclosed = Standard_False; - if (nVF == 1 && nVR == 1) { - bitclosed = VF.IsSame(VR); - newEdge.Closed(bitclosed); - } if (addedge) { if (tosplit) { TopTools_ListOfShape loe; Standard_Boolean ok = TopOpeBRepTool_TOOL::SplitE(TopoDS::Edge(newEdge),loe); diff --git a/src/TopoDS/TopoDS_TShape.cdl b/src/TopoDS/TopoDS_TShape.cdl index b177a6b629..391b16197f 100644 --- a/src/TopoDS/TopoDS_TShape.cdl +++ b/src/TopoDS/TopoDS_TShape.cdl @@ -34,7 +34,7 @@ deferred class TShape from TopoDS inherits TShared from MMgt -- - Modified : Has been modified. -- - Checked : Has been checked. -- - Orientable : Can be oriented. - -- - Closed : Is closed. + -- - Closed : Is closed (note that only Wires and Shells may be closed). -- - Infinite : Is infinite. -- - Convex : Is convex. -- diff --git a/tests/bugs/moddata_3/bug25202_1 b/tests/bugs/moddata_3/bug25202_1 index 7acf0ece41..eaf623bc4a 100755 --- a/tests/bugs/moddata_3/bug25202_1 +++ b/tests/bugs/moddata_3/bug25202_1 @@ -24,7 +24,7 @@ explode b f OCC25202 result b 1 ff1 3 ff2 set info [whatis result] -if { [regexp {Closed} ${info}] } { +if { [regexp {Closed} ${info}] != 1 } { puts "OK : value of IsClosed flag is correct" } else { puts "Error : value of IsClosed flag is not correct" diff --git a/tests/bugs/moddata_3/bug25202_3 b/tests/bugs/moddata_3/bug25202_3 index ba1cc564ab..13c6ad3d24 100755 --- a/tests/bugs/moddata_3/bug25202_3 +++ b/tests/bugs/moddata_3/bug25202_3 @@ -12,7 +12,7 @@ mkface ff pp prism result ff 0 0 20 set info [whatis result] -if { [regexp {Closed} ${info}] } { +if { [regexp {Closed} ${info}] != 1 } { puts "OK : value of IsClosed flag is correct" } else { puts "Error : value of IsClosed flag is not correct" diff --git a/tests/bugs/moddata_3/bug25202_4 b/tests/bugs/moddata_3/bug25202_4 index 84ff55105e..25caf8894f 100755 --- a/tests/bugs/moddata_3/bug25202_4 +++ b/tests/bugs/moddata_3/bug25202_4 @@ -13,7 +13,7 @@ mkplane ff ww revol result ff 0 0 0 1 0 0 90 set info [whatis result] -if { [regexp {Closed} ${info}] } { +if { [regexp {Closed} ${info}] != 1 } { puts "OK : value of IsClosed flag is correct" } else { puts "Error : value of IsClosed flag is not correct" -- 2.20.1