X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Bathymetry.cxx;h=60e2d9bf300fd069819fa1c8188df4803b4f14ac;hb=b669cf46c196c135f8f624ff26f490b3d67f7ec1;hp=43d484c76bf2c5cfeff34cb1d10d991b2a82de75;hpb=7677192227ae6d384a9b870fa76e60f5ec700c25;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Bathymetry.cxx b/src/HYDROData/HYDROData_Bathymetry.cxx index 43d484c7..60e2d9bf 100644 --- a/src/HYDROData/HYDROData_Bathymetry.cxx +++ b/src/HYDROData/HYDROData_Bathymetry.cxx @@ -16,6 +16,8 @@ #include #include +#include + #define _TIMER #ifdef _TIMER #include @@ -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;