+double HYDROData_ProfileUZ::GetDepthFromDistance( const double& theDistance ) const
+{
+ double aResDepth = 0.0;
+
+ HYDROData_IPolyline::PointsList aPoints = GetPoints();
+ int aNbPoints = aPoints.Size();
+ if ( aNbPoints < 2 )
+ return aResDepth;
+
+ double aCompDist = 0.0;
+ HYDROData_IPolyline::Point aPrevPoint = aPoints.First();
+ for ( int i = 2; i <= aNbPoints; ++i )
+ {
+ const Point& aCurPoint = aPoints.Value( i );
+
+ double aPntDist = gp_Pnt2d( aPrevPoint.X(), 0 ).Distance( gp_Pnt2d( aCurPoint.X(), 0 ) );
+
+ aCompDist += aPntDist;
+
+ if ( theDistance < aCompDist )
+ {
+ double aComPntDist = gp_Pnt2d( aPoints.First().X(), 0 ).Distance( gp_Pnt2d( aPrevPoint.X(), 0 ) );
+
+ double aFindDist = theDistance - aComPntDist;
+ double aRatio = aFindDist / ( aPntDist - aFindDist );
+
+ aResDepth = ( aPrevPoint.Y() + aRatio * aCurPoint.Y() ) / ( 1 + aRatio );
+ break;
+ }
+
+ aPrevPoint = aCurPoint;
+ }
+
+ return aResDepth;
+}
+