Salome HOME
Author: Roman Lygin, roman.lygin@gmail.com
authoreap <eap@opencascade.com>
Mon, 27 Jun 2011 09:12:06 +0000 (09:12 +0000)
committereap <eap@opencascade.com>
Mon, 27 Jun 2011 09:12:06 +0000 (09:12 +0000)
fixS020
- Summary: Invalid computation of edge length on periodic curve leads to wrong tessellation
- Detailed description: SMESH_Algo returns incorrect edge length (1e-08) for an edge lying
         beyond periodic curve range. Afterwards the number of segments is computed as
         ~ 1/lentgh and becomes 1.9M leading to running out of memory or failure to produce
         2D mesh.
- Reproducer: Try to mesh f-percrvedge.brep with 1D Wire Discretization and default
         MaxSize hypothesis.

src/SMESH/SMESH_Algo.cxx

index 3a6a4efd97dad1f5624cdbb07a530c909c59b2b1..a29c0454c42f5620c628a4b0554a5f5032b7fa6f 100644 (file)
@@ -171,7 +171,7 @@ double SMESH_Algo::EdgeLength(const TopoDS_Edge & E)
     return 0;
   TopLoc_Location L;
   Handle(Geom_Curve) C = BRep_Tool::Curve(E, L, UMin, UMax);
-  GeomAdaptor_Curve AdaptCurve(C);
+  GeomAdaptor_Curve AdaptCurve(C, UMin, UMax); //range is important for periodic curves
   double length = GCPnts_AbscissaPoint::Length(AdaptCurve, UMin, UMax);
   return length;
 }