Salome HOME
Minor change.
[modules/hydro.git] / src / HYDROData / HYDROData_Bathymetry.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;