From c481b6871aad775ca8575f471a44b87828167e78 Mon Sep 17 00:00:00 2001 From: skv Date: Fri, 18 Apr 2014 11:06:37 +0400 Subject: [PATCH] 0022551: EDF 2857 - 7832 GEOM : problem with projection --- src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx index 8300e3847..3e025ccd0 100644 --- a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx @@ -183,12 +183,26 @@ Standard_Integer GEOMImpl_ProjectionDriver::Execute(TFunction_Logbook& log) cons BRepOffsetAPI_NormalProjection OrtProj (aFaceShape); OrtProj.Add(anOriginal); - //Standard_Real tol = 1.e-4; - //Standard_Real tol2d = Pow(tol, 2./3); - //GeomAbs_Shape Continuity = GeomAbs_C2; - //Standard_Integer MaxDeg = 14; - //Standard_Integer MaxSeg = 16; - //OrtProj.SetParams(tol, tol2d, Continuity, MaxDeg, MaxSeg); + // Compute maximal tolerance of projection. + TopExp_Explorer anExp(anOriginal,TopAbs_VERTEX); + Standard_Real aMaxTol = Precision::Confusion(); + + for(; anExp.More(); anExp.Next()) { + const TopoDS_Vertex aVtx = TopoDS::Vertex(anExp.Current()); + const Standard_Real aCurTol = BRep_Tool::Tolerance(aVtx); + + if (aMaxTol < aCurTol) { + aMaxTol = aCurTol; + } + } + + Standard_Real tol2d = Pow(aMaxTol, 2./3); + GeomAbs_Shape Continuity = GeomAbs_C2; + Standard_Integer MaxDeg = 14; + Standard_Integer MaxSeg = 16; + + OrtProj.SetParams(aMaxTol, tol2d, Continuity, MaxDeg, MaxSeg); + try { OrtProj.Build(); } catch (Standard_Failure) { -- 2.39.2