From 9c06009aa5099d9472a2c26577c3f47ae6f83d1d Mon Sep 17 00:00:00 2001 From: pkv Date: Thu, 26 Dec 2013 15:47:44 +0400 Subject: [PATCH] 0024463: BRepAlgo_Section::Build hangs Added test case bugs/modalg_5/bug24463 --- src/BRepTools/BRepTools.cxx | 25 ++++++++++++++++++++----- tests/bugs/modalg_5/bug24463 | 11 +++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 tests/bugs/modalg_5/bug24463 diff --git a/src/BRepTools/BRepTools.cxx b/src/BRepTools/BRepTools.cxx index 2d6094436b..09b239af44 100644 --- a/src/BRepTools/BRepTools.cxx +++ b/src/BRepTools/BRepTools.cxx @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -176,9 +177,23 @@ void BRepTools::AddUVBounds(const TopoDS_Face& F, gp_Pnt2d Pa,Pb,Pc; - Standard_Real i, nbp = 20; + Standard_Integer i, j, k, nbp = 20; if (PC.GetType() == GeomAbs_Line) nbp = 2; - Standard_Real step = (pl - pf) / nbp; + Standard_Integer NbIntC1 = PC.NbIntervals(GeomAbs_C1); + if (NbIntC1 > 1) + nbp = 10; + TColStd_Array1OfReal SharpPoints(1, NbIntC1+1); + PC.Intervals(SharpPoints, GeomAbs_C1); + TColStd_Array1OfReal Parameters(1, nbp*NbIntC1+1); + k = 1; + for (i = 1; i <= NbIntC1; i++) + { + Standard_Real delta = (SharpPoints(i+1) - SharpPoints(i))/nbp; + for (j = 0; j < nbp; j++) + Parameters(k++) = SharpPoints(i) + j*delta; + } + Parameters(nbp*NbIntC1+1) = SharpPoints(NbIntC1+1); + gp_Pnt2d P; PC.D0(pf,P); Baux.Add(P); @@ -187,11 +202,11 @@ void BRepTools::AddUVBounds(const TopoDS_Face& F, Standard_Real dv=0.0; Pc=P; - for (i = 1; i < nbp; i++) { - pf += step; + for (i = 2; i < Parameters.Upper(); i++) { + pf = Parameters(i); PC.D0(pf,P); Baux.Add(P); - if(i==1) { Pb=Pc; Pc=P; } + if(i==2) { Pb=Pc; Pc=P; } else { //-- Calcul de la fleche Pa=Pb; Pb=Pc; Pc=P; diff --git a/tests/bugs/modalg_5/bug24463 b/tests/bugs/modalg_5/bug24463 new file mode 100644 index 0000000000..aa85623e98 --- /dev/null +++ b/tests/bugs/modalg_5/bug24463 @@ -0,0 +1,11 @@ +puts "============" +puts "OCC24463" +puts "============" +puts "" +#################################### +# BRepAlgo_Section::Build hangs +#################################### + +restore [locate_data_file bug24463_TK0000000000480_109.brep] a +plane p 0 7000 0 0 -1 0 0 0 -1 +psection r a p