namespace Deltares.Stability.Calculation2 { public class SlidingCurveValidator : ISlidingCurveValidator { private SlipplaneConstraints constraints; public SlidingCurveValidator(SlipplaneConstraints constraints) { this.constraints = constraints; } public bool IsValid(SlidingCurve slidingCurve) { if (constraints != null) { if (constraints.SlipPlaneMinDepth > Constants.CGeoAccu) { if (IfMinimalPlaneDepthIsNotOk(slidingCurve)) { return false; } } if (constraints.SlipPlaneMinLength > Constants.CGeoAccu) { if (IfMinimalPlaneLengthIsNotOk(slidingCurve)) { return false; } } if (!double.IsNaN(constraints.XEntryMax)) { if (slidingCurve.LeftPoint == null) { return false; } if (slidingCurve.LeftPoint.X > constraints.XEntryMax) { return false; } } if (!double.IsNaN(constraints.XEntryMin)) { if (slidingCurve.LeftPoint == null) { return false; } if (slidingCurve.LeftPoint.X < constraints.XEntryMin) { return false; } } } return slidingCurve.LeftPoint != null && slidingCurve.RightPoint != null; } public bool SlicesMustBeFilled() { return false; } private bool IfMinimalPlaneDepthIsNotOk(SlidingCurve slidingCurve) { for (int i = 0; i < slidingCurve.Slices.Count; i++) { if ((slidingCurve.Slices[i].ZCenterTop - slidingCurve.Slices[i].ZCenterBottom) > constraints.SlipPlaneMinDepth) { return false; } } return true; } private bool IfMinimalPlaneLengthIsNotOk(SlidingCurve slidingCurve) { double som = 0; for (int i = 0; i < slidingCurve.Slices.Count; i++) { som = som + slidingCurve.Slices[i].ArcLength; } if (som > constraints.SlipPlaneMinLength) { return false; } return true; } } }