From d9b43f09413d444925291a882774de7893b0f2c4 Mon Sep 17 00:00:00 2001 From: jfa Date: Fri, 28 Oct 2011 05:50:28 +0000 Subject: [PATCH] Mantis issue 0021414: There is a difference between vectors and other edges in Geometry. --- src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 2 +- .../ShHealOper_ChangeOrientation.cxx | 23 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index 6af52d80a..f74e646e4 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -1828,7 +1828,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ReverseShape(Handle(GEOM_Object) if (aGen) { GEOMImpl_IHealingOperations* anIHealingOperations = aGen->GetIHealingOperations(GetDocID()); - aReversed = anIHealingOperations->ChangeOrientation(theShape); + aReversed = anIHealingOperations->ChangeOrientationCopy(theShape); SetErrorCode(anIHealingOperations->GetErrorCode()); } diff --git a/src/ShHealOper/ShHealOper_ChangeOrientation.cxx b/src/ShHealOper/ShHealOper_ChangeOrientation.cxx index 5c7cc0b8d..b81fccd57 100644 --- a/src/ShHealOper/ShHealOper_ChangeOrientation.cxx +++ b/src/ShHealOper/ShHealOper_ChangeOrientation.cxx @@ -18,15 +18,16 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // File: ShHealOper_ChangeOrientation.cxx // Created: 11.07.06 11:46:45 // Author: Sergey KUUL -// + #include #include +#include + #include //======================================================================= @@ -59,7 +60,7 @@ Standard_Boolean ShHealOper_ChangeOrientation::Perform() BRep_Builder B; if (myInitShape.ShapeType() == TopAbs_SHELL) { myResultShape = myInitShape.EmptyCopied(); - TopoDS_Iterator itr(myInitShape); + TopoDS_Iterator itr (myInitShape); while (itr.More()) { B.Add(myResultShape,itr.Value().Reversed()); itr.Next(); @@ -67,7 +68,7 @@ Standard_Boolean ShHealOper_ChangeOrientation::Perform() } else if (myInitShape.ShapeType() == TopAbs_FACE) { myResultShape = myInitShape.EmptyCopied(); - TopoDS_Iterator itr(myInitShape); + TopoDS_Iterator itr (myInitShape); while (itr.More()) { B.Add(myResultShape,itr.Value()); itr.Next(); @@ -76,7 +77,7 @@ Standard_Boolean ShHealOper_ChangeOrientation::Perform() } else if ( myInitShape.ShapeType() == TopAbs_WIRE || myInitShape.ShapeType() == TopAbs_EDGE) { myResultShape = myInitShape.EmptyCopied(); - TopoDS_Iterator itr(myInitShape); + TopoDS_Iterator itr (myInitShape); while (itr.More()) { B.Add(myResultShape,itr.Value()); itr.Next(); @@ -84,9 +85,17 @@ Standard_Boolean ShHealOper_ChangeOrientation::Perform() myResultShape.Reverse(); } else { - return false; + BRepBuilderAPI_Copy Copy (myInitShape); + if (!Copy.IsDone()) return false; + + myResultShape = Copy.Shape(); + if (myResultShape.IsNull()) return false; + + if (myResultShape.Orientation() == TopAbs_FORWARD) + myResultShape.Orientation(TopAbs_REVERSED); + else + myResultShape.Orientation(TopAbs_FORWARD); } return true; - } -- 2.39.2