Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Primitives/MacroStabilityInwardsSurfaceLine.cs
===================================================================
diff -u -rcd90ebf744fb74f0d4b0dd6ee06f9c39b5faf213 -r620846e4cf00b13e9310c931d29bac47799a81d8
--- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Primitives/MacroStabilityInwardsSurfaceLine.cs (.../MacroStabilityInwardsSurfaceLine.cs) (revision cd90ebf744fb74f0d4b0dd6ee06f9c39b5faf213)
+++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Primitives/MacroStabilityInwardsSurfaceLine.cs (.../MacroStabilityInwardsSurfaceLine.cs) (revision 620846e4cf00b13e9310c931d29bac47799a81d8)
@@ -20,58 +20,18 @@
// All rights reserved.
using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Globalization;
-using System.Linq;
-using Core.Common.Base;
-using Core.Common.Base.Data;
using Core.Common.Base.Geometry;
using Ringtoets.Common.Data;
-using Ringtoets.MacroStabilityInwards.Primitives.Exceptions;
-using Ringtoets.MacroStabilityInwards.Primitives.Properties;
using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources;
namespace Ringtoets.MacroStabilityInwards.Primitives
{
///
/// Definition of a surface line for macro stability inwards.
///
- public class MacroStabilityInwardsSurfaceLine : Observable, IMechanismSurfaceLine
+ public class MacroStabilityInwardsSurfaceLine : MechanismSurfaceLineBase
{
- private const int numberOfDecimalPlaces = 2;
-
///
- /// Initializes a new instance of the class.
- ///
- public MacroStabilityInwardsSurfaceLine()
- {
- Name = string.Empty;
- Points = new Point3D[0];
- LocalGeometry = new RoundedPoint2DCollection(2, new Point2D[0]);
- }
-
- ///
- /// Gets or sets the name of the surface line.
- ///
- public string Name { get; set; }
-
- ///
- /// Gets the 3D points describing the geometry of the surface line.
- ///
- public Point3D[] Points { get; private set; }
-
- ///
- /// Gets the first 3D geometry point defining the surface line in world coordinates.
- ///
- public Point3D StartingWorldPoint { get; private set; }
-
- ///
- /// Gets the last 3D geometry point defining the surface line in world coordinates.
- ///
- public Point3D EndingWorldPoint { get; private set; }
-
- ///
/// Gets the location which generalizes the height of the surface
/// on the outside of the polder.
///
@@ -151,43 +111,6 @@
public Point3D SurfaceLevelInside { get; private set; }
///
- /// Gets or sets the reference line intersection point in world coordinates.
- ///
- public Point2D ReferenceLineIntersectionWorldPoint { get; set; }
-
- ///
- /// Gets the 2D points describing the local geometry of the surface line.
- ///
- public RoundedPoint2DCollection LocalGeometry { get; private set; }
-
- ///
- /// Sets the geometry of the surface line.
- ///
- /// The collection of points defining the surface line geometry.
- /// Thrown when is null.
- /// Thrown when any element of is null.
- public void SetGeometry(IEnumerable points)
- {
- if (points == null)
- {
- throw new ArgumentNullException(nameof(points), Resources.MacroStabilityInwardsSurfaceLine_Collection_of_points_for_geometry_is_null);
- }
- if (points.Any(p => p == null))
- {
- throw new ArgumentException(Resources.MacroStabilityInwardsSurfaceLine_A_point_in_the_collection_was_null);
- }
- Points = points.Select(p => new Point3D(p)).ToArray();
-
- if (Points.Length > 0)
- {
- StartingWorldPoint = Points[0];
- EndingWorldPoint = Points[Points.Length - 1];
- }
-
- LocalGeometry = new RoundedPoint2DCollection(numberOfDecimalPlaces, Points.ProjectToLZ().ToArray());
- }
-
- ///
/// Sets the at the given point.
///
/// The location as a which to set as the .
@@ -409,85 +332,6 @@
}
///
- /// Gets the height of the projected at a L=.
- ///
- /// The L coordinate from where to take the height of the .
- /// The height of the at L=.
- /// Thrown when the
- /// intersection point at have a significant difference in their y coordinate.
- /// Thrown when is not in range of the LZ-projected .
- /// Thrown when is empty.
- public double GetZAtL(RoundedDouble l)
- {
- ValidateHasPoints();
-
- if (!ValidateInRange(l))
- {
- var localRangeL = new Range(LocalGeometry.First().X, LocalGeometry.Last().X);
- string outOfRangeMessage = string.Format(Resources.MacroStabilityInwardsSurfaceLine_0_L_needs_to_be_in_Range_1_,
- Resources.MacroStabilityInwardsSurfaceLine_GetZAtL_Cannot_determine_height,
- localRangeL.ToString(FormattableConstants.ShowAtLeastOneDecimal, CultureInfo.CurrentCulture));
- throw new ArgumentOutOfRangeException(null, outOfRangeMessage);
- }
-
- var segments = new Collection();
- for (var i = 1; i < LocalGeometry.Count(); i++)
- {
- segments.Add(new Segment2D(LocalGeometry.ElementAt(i - 1), LocalGeometry.ElementAt(i)));
- }
-
- IEnumerable intersectionPoints = Math2D.SegmentsIntersectionWithVerticalLine(segments, l).OrderBy(p => p.Y).ToArray();
-
- const double intersectionTolerance = 1e-2;
- bool equalIntersections = Math.Abs(intersectionPoints.First().Y - intersectionPoints.Last().Y) < intersectionTolerance;
-
- if (equalIntersections)
- {
- return intersectionPoints.First().Y;
- }
-
- string message = string.Format(Resources.MacroStabilityInwardsSurfaceLine_Cannot_determine_reliable_z_when_surface_line_is_vertical_in_l, l);
- throw new MacroStabilityInwardsSurfaceLineException(message);
- }
-
- ///
- /// Checks whether is in range of the geometry projected in local coordinate system
- /// where the points are ordered on the L-coordinate being monotonically non-decreasing.
- ///
- /// The local L-coordinate value to check for.
- /// true when local L-coordinate is in range of the local geometry. false otherwise.
- public bool ValidateInRange(double localCoordinateL)
- {
- Point2D firstLocalPoint = LocalGeometry.First();
- Point2D lastLocalPoint = LocalGeometry.Last();
- var roundedLocalCoordinateL = new RoundedDouble(numberOfDecimalPlaces, localCoordinateL);
- return !(firstLocalPoint.X > roundedLocalCoordinateL) && !(lastLocalPoint.X < roundedLocalCoordinateL);
- }
-
- ///
- /// Gets the local coordinate with rounded values based on the geometry of the surface line and the given world coordinate.
- ///
- /// The world coordinate to get the local coordinate for.
- /// The local coordinate.
- public Point2D GetLocalPointFromGeometry(Point3D worldCoordinate)
- {
- int count = Points.Length;
- if (count <= 1)
- {
- return new Point2D(double.NaN, double.NaN);
- }
-
- Point3D first = Points.First();
- Point3D last = Points.Last();
- var firstPoint = new Point2D(first.X, first.Y);
- var lastPoint = new Point2D(last.X, last.Y);
-
- Point2D localCoordinate = worldCoordinate.ProjectIntoLocalCoordinates(firstPoint, lastPoint);
- return new Point2D(new RoundedDouble(numberOfDecimalPlaces, localCoordinate.X),
- new RoundedDouble(numberOfDecimalPlaces, localCoordinate.Y));
- }
-
- ///
/// Copies the property values of the to
/// the .
///
@@ -552,11 +396,6 @@
}
}
- public override string ToString()
- {
- return Name;
- }
-
private void SetCharacteristicPoints(MacroStabilityInwardsSurfaceLine fromSurfaceLine)
{
SurfaceLevelOutside = PointFromGeometryOrNull(fromSurfaceLine.SurfaceLevelOutside);
@@ -579,29 +418,6 @@
return point3D != null ? GetPointFromGeometry(point3D) : null;
}
- ///
- /// Finds a point from which is at the same position as .
- ///
- /// The location of a point from .
- /// The from at the same location as .
- /// Thrown when is null.
- private Point3D GetPointFromGeometry(Point3D point)
- {
- if (point == null)
- {
- throw new ArgumentNullException(nameof(point), @"Cannot find a point in geometry using a null point.");
- }
- return Points.FirstOrDefault(p => p.Equals(point));
- }
-
- private static ArgumentException CreatePointNotInGeometryException(Point3D point, string characteristicPointDescription)
- {
- string message = string.Format(Resources.MacroStabilityInwardsSurfaceLine_SetCharacteristicPointAt_Geometry_does_not_contain_point_at_0_to_assign_as_characteristic_point_1_,
- point,
- characteristicPointDescription);
- return new ArgumentException(message);
- }
-
private bool Equals(MacroStabilityInwardsSurfaceLine other)
{
return string.Equals(Name, other.Name)
@@ -644,17 +460,5 @@
}
return true;
}
-
- ///
- /// Checks whether the current collection is not empty.
- ///
- /// Thrown when is empty.
- private void ValidateHasPoints()
- {
- if (!Points.Any())
- {
- throw new InvalidOperationException(Resources.MacroStabilityInwardsSurfaceLine_SurfaceLine_has_no_Geometry);
- }
- }
}
}
\ No newline at end of file