]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
bug #237: fatal error on profile
authorasl <asl@opencascade.com>
Mon, 16 Dec 2013 08:08:41 +0000 (08:08 +0000)
committerasl <asl@opencascade.com>
Mon, 16 Dec 2013 08:08:41 +0000 (08:08 +0000)
src/HYDROData/HYDROData_Bathymetry.cxx
src/HYDROData/HYDROData_Polyline3D.cxx

index 43d484c76bf2c5cfeff34cb1d10d991b2a82de75..60e2d9bf300fd069819fa1c8188df4803b4f14ac 100644 (file)
@@ -16,6 +16,8 @@
 #include <QPolygonF>
 #include <QStringList>
 
+#include <math.h>
+
 #define _TIMER
 #ifdef _TIMER
 #include <OSD_Timer.hxx>
@@ -187,7 +189,8 @@ void interpolateAltitudeForPoints( const gp_XY&                               th
 
 double HYDROData_Bathymetry::GetAltitudeForPoint( const gp_XY& thePoint ) const
 {
-  double aResAltitude = GetInvalidAltitude();
+  double anInvalidAltitude = GetInvalidAltitude();
+  double aResAltitude = anInvalidAltitude;
   
   AltitudePoints anAltitudePoints = GetAltitudePoints();
   if ( anAltitudePoints.isEmpty() )
@@ -199,10 +202,10 @@ double HYDROData_Bathymetry::GetAltitudeForPoint( const gp_XY& thePoint ) const
   // [ 0 (top-left) ]          [ 1 (top-right) ]
   //                  thePoint
   // [ 2 (bot-left) ]          [ 3 (bot-right) ] 
-  AltitudePoint aBounds[ 4 ] = { AltitudePoint( -DBL_MAX, -DBL_MAX, GetInvalidAltitude() ),
-                                 AltitudePoint(  DBL_MAX, -DBL_MAX, GetInvalidAltitude() ),
-                                 AltitudePoint( -DBL_MAX,  DBL_MAX, GetInvalidAltitude() ),
-                                 AltitudePoint(  DBL_MAX,  DBL_MAX, GetInvalidAltitude() ) }; 
+  AltitudePoint aBounds[ 4 ] = { AltitudePoint( -DBL_MAX, -DBL_MAX, anInvalidAltitude ),
+                                 AltitudePoint(  DBL_MAX, -DBL_MAX, anInvalidAltitude ),
+                                 AltitudePoint( -DBL_MAX,  DBL_MAX, anInvalidAltitude ),
+                                 AltitudePoint(  DBL_MAX,  DBL_MAX, anInvalidAltitude ) }; 
 
   AltitudePoints::const_iterator aListItBeg = anAltitudePoints.constBegin();
   AltitudePoints::const_iterator aListItEnd = anAltitudePoints.constEnd();
@@ -288,6 +291,14 @@ double HYDROData_Bathymetry::GetAltitudeForPoint( const gp_XY& thePoint ) const
     aBoundingRect << QPointF( aPoint.X(), aPoint.Y() );
   }
 
+  const double LIMIT = 1E300;
+  if( fabs( aBounds[ 0 ].X() ) > LIMIT || fabs( aBounds[ 0 ].Y() ) > LIMIT ||
+      fabs( aBounds[ 1 ].X() ) > LIMIT || fabs( aBounds[ 1 ].Y() ) > LIMIT ||
+      fabs( aBounds[ 2 ].X() ) > LIMIT || fabs( aBounds[ 2 ].Y() ) > LIMIT ||
+      fabs( aBounds[ 3 ].X() ) > LIMIT || fabs( aBounds[ 3 ].Y() ) > LIMIT )
+    return anInvalidAltitude;
+
+
   // Check if requested point is inside of our bounding rectangle
   if ( !aBoundingRect.boundingRect().contains( thePoint.X(), thePoint.Y() ) )
     return aResAltitude;
index 0507b2e8bcba9ce1396bdbbdb563a0561e1da307..2bdd60a5d09f751a3bc74d85c00fe6853abe6e55 100644 (file)
@@ -318,6 +318,8 @@ HYDROData_IPolyline::PointsList generateProfileUZPoints(
 
     double aPointDistance = thePolyline->GetDistance( 0, i - 1 );
     double aPointDepth = theBathymetry->GetAltitudeForPoint( aSectPoint );
+    if( aPointDepth==theBathymetry->GetInvalidAltitude() )
+      aPointDepth = 0.0;
 
     HYDROData_IPolyline::Point anAltitudePoint( aPointDistance, aPointDepth );
     aPointsList.Append( anAltitudePoint );