From: drazmyslovich Date: Wed, 7 Aug 2019 11:25:15 +0000 (+0200) Subject: 0030873: Make ReShape tool resistant to replacement loops X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2FCR30873;p=occt-copy.git 0030873: Make ReShape tool resistant to replacement loops --- diff --git a/src/BRepTools/BRepTools_ReShape.cxx b/src/BRepTools/BRepTools_ReShape.cxx index fbfa18a8b8..e5128ee363 100644 --- a/src/BRepTools/BRepTools_ReShape.cxx +++ b/src/BRepTools/BRepTools_ReShape.cxx @@ -156,6 +156,13 @@ void BRepTools_ReShape::replace (const TopoDS_Shape& ashape, TopoDS_Shape shape = ashape; TopoDS_Shape newshape = anewshape; if ( shape.IsNull() || shape == newshape ) return; + if (Apply (newshape) == shape) + { +#ifdef OCCT_DEBUG + cout << "Warning: BRepTools_ReShape::Replace: recording the shape will lead to a loop" << endl; +#endif + return; + } if (shape.Orientation() == TopAbs_REVERSED) { @@ -181,7 +188,9 @@ void BRepTools_ReShape::replace (const TopoDS_Shape& ashape, #ifdef OCCT_DEBUG if ( IsRecorded ( shape ) && ((myConsiderLocation && ! Value ( shape ).IsPartner ( newshape )) || (!myConsiderLocation && ! Value ( shape ).IsSame ( newshape )))) + { cout << "Warning: BRepTools_ReShape::Replace: shape already recorded" << endl; + } #endif myShapeToReplacement.Bind(shape, TReplacement(newshape, theKind));