From 820d7c8eb9cea44dc36f161a62d8238fa131d559 Mon Sep 17 00:00:00 2001 From: jfa Date: Fri, 21 Nov 2008 07:33:55 +0000 Subject: [PATCH] Heal invalid shape after scaling, because different scaling along axes can produce invalid shapes in some cases. --- src/GEOMImpl/GEOMImpl_ScaleDriver.cxx | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx b/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx index 8dc4967d2..7fa066a53 100644 --- a/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ScaleDriver.cxx @@ -25,10 +25,15 @@ #include #include +#include +#include + #include #include #include #include +#include + #include #include #include @@ -168,8 +173,19 @@ Standard_Integer GEOMImpl_ScaleDriver::Execute(TFunction_Logbook& log) const if (aShape.IsNull()) return 0; - if (!BRepAlgo::IsValid(aShape)) - Standard_ConstructionError::Raise("Scaling aborted : non valid shape result"); + BRepCheck_Analyzer ana (aShape, Standard_False); + if (!ana.IsValid()) { + ShapeFix_ShapeTolerance aSFT; + aSFT.LimitTolerance(aShape,Precision::Confusion(),Precision::Confusion()); + Handle(ShapeFix_Shape) aSfs = new ShapeFix_Shape(aShape); + aSfs->SetPrecision(Precision::Confusion()); + aSfs->Perform(); + aShape = aSfs->Shape(); + + ana.Init(aShape, Standard_False); + if (!ana.IsValid()) + Standard_ConstructionError::Raise("Scaling aborted : algorithm has produced an invalid shape result"); + } aFunction->SetValue(aShape); -- 2.30.2