Index: Ringtoets.sln
===================================================================
diff -u -rdcfb3bff66ae6101fef3d8f46ffde3e67b11cef5 -r4f569d13df154ec7983b6a59ced2553faf1f7bea
--- Ringtoets.sln (.../Ringtoets.sln) (revision dcfb3bff66ae6101fef3d8f46ffde3e67b11cef5)
+++ Ringtoets.sln (.../Ringtoets.sln) (revision 4f569d13df154ec7983b6a59ced2553faf1f7bea)
@@ -2012,7 +2012,7 @@
{C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC}
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Riskeer.Integration.Util", "Ringtoets\Integration\src\Ringtoets.Integration.Util\Riskeer.Integration.Util.csproj", "{D4D21027-B2CD-47E2-A299-70885CC93AB4}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Riskeer.Integration.Util", "Ringtoets\Integration\src\Riskeer.Integration.Util\Riskeer.Integration.Util.csproj", "{D4D21027-B2CD-47E2-A299-70885CC93AB4}"
ProjectSection(ProjectDependencies) = postProject
{C90B77DA-E421-43CC-B82E-529651BC21AC} = {C90B77DA-E421-43CC-B82E-529651BC21AC}
EndProjectSection
Fisheye: Tag 4f569d13df154ec7983b6a59ced2553faf1f7bea refers to a dead (removed) revision in file `Ringtoets/Integration/src/Ringtoets.Integration.Util/FailureMechanismSectionHelper.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag 4f569d13df154ec7983b6a59ced2553faf1f7bea refers to a dead (removed) revision in file `Ringtoets/Integration/src/Ringtoets.Integration.Util/Properties/AssemblyInfo.cs'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag 4f569d13df154ec7983b6a59ced2553faf1f7bea refers to a dead (removed) revision in file `Ringtoets/Integration/src/Ringtoets.Integration.Util/Riskeer.Integration.Util.csproj'.
Fisheye: No comparison available. Pass `N' to diff?
Index: Ringtoets/Integration/src/Riskeer.Integration.Util/FailureMechanismSectionHelper.cs
===================================================================
diff -u
--- Ringtoets/Integration/src/Riskeer.Integration.Util/FailureMechanismSectionHelper.cs (revision 0)
+++ Ringtoets/Integration/src/Riskeer.Integration.Util/FailureMechanismSectionHelper.cs (revision 4f569d13df154ec7983b6a59ced2553faf1f7bea)
@@ -0,0 +1,129 @@
+// Copyright (C) Stichting Deltares 2018. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Core.Common.Base.Geometry;
+using Ringtoets.Common.Data.AssessmentSection;
+using Ringtoets.Common.Data.FailureMechanism;
+
+namespace Riskeer.Integration.Util
+{
+ ///
+ /// Class containing helper methods for .
+ ///
+ public static class FailureMechanismSectionHelper
+ {
+ ///
+ /// Gets the geometry of a failure mechanism section based on the geometry
+ /// of the , and .
+ ///
+ /// The reference line to get the geometry from.
+ /// The start of the section relative to the start of the reference line in meters.
+ /// The end of the section relative to the start of the reference line in meters.
+ /// The failure mechanism section geometry.
+ /// Thrown when is null.
+ public static IEnumerable GetFailureMechanismSectionGeometry(ReferenceLine referenceLine, double sectionStart, double sectionEnd)
+ {
+ if (referenceLine == null)
+ {
+ throw new ArgumentNullException(nameof(referenceLine));
+ }
+
+ int startIndex;
+ int endIndex;
+
+ Point2D[] referenceLinePoints = referenceLine.Points.ToArray();
+ Point2D startPoint = GetPointByOffset(referenceLinePoints, sectionStart, out startIndex);
+ Point2D endPoint = GetPointByOffset(referenceLinePoints, sectionEnd, out endIndex);
+
+ var sectionPoints = new List
+ {
+ startPoint
+ };
+
+ sectionPoints.AddRange(referenceLinePoints.Skip(startIndex + 1).Take(endIndex - startIndex));
+
+ if (!sectionPoints.Contains(endPoint))
+ {
+ sectionPoints.Add(endPoint);
+ }
+
+ return sectionPoints;
+ }
+
+ private static Point2D GetPointByOffset(Point2D[] referenceLinePoints, double offset, out int index)
+ {
+ index = 0;
+ Point2D point = null;
+
+ if (Math.Abs(offset) < 1e-8)
+ {
+ return referenceLinePoints[0];
+ }
+
+ double totalLength = 0;
+
+ for (var i = 1; i < referenceLinePoints.Length; i++)
+ {
+ index = i;
+ double pointsLength = Math2D.Length(new[]
+ {
+ referenceLinePoints[i - 1],
+ referenceLinePoints[i]
+ });
+
+ totalLength += pointsLength;
+
+ if (Math.Abs(totalLength - offset) < 1e-8)
+ {
+ point = referenceLinePoints[i];
+ break;
+ }
+
+ if (totalLength > offset)
+ {
+ double distance = offset - (totalLength - pointsLength);
+ point = InterpolatePoint(referenceLinePoints[i - 1], referenceLinePoints[i], distance);
+ index = i - 1;
+ break;
+ }
+ }
+
+ return point;
+ }
+
+ private static Point2D InterpolatePoint(Point2D startPoint, Point2D endPoint, double distance)
+ {
+ double magnitude = Math2D.Length(new[]
+ {
+ startPoint,
+ endPoint
+ });
+
+ double factor = distance / magnitude;
+
+ return new Point2D(startPoint.X + (factor * (endPoint.X - startPoint.X)),
+ startPoint.Y + (factor * (endPoint.Y - startPoint.Y)));
+ }
+ }
+}
\ No newline at end of file
Index: Ringtoets/Integration/src/Riskeer.Integration.Util/Properties/AssemblyInfo.cs
===================================================================
diff -u
--- Ringtoets/Integration/src/Riskeer.Integration.Util/Properties/AssemblyInfo.cs (revision 0)
+++ Ringtoets/Integration/src/Riskeer.Integration.Util/Properties/AssemblyInfo.cs (revision 4f569d13df154ec7983b6a59ced2553faf1f7bea)
@@ -0,0 +1,25 @@
+// Copyright (C) Stichting Deltares 2018. All rights reserved.
+//
+// This file is part of Ringtoets.
+//
+// Ringtoets is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System.Reflection;
+
+[assembly: AssemblyTitle("Riskeer.Integration.Util")]
+[assembly: AssemblyProduct("Riskeer.Integration.Util")]
\ No newline at end of file
Index: Ringtoets/Integration/src/Riskeer.Integration.Util/Riskeer.Integration.Util.csproj
===================================================================
diff -u
--- Ringtoets/Integration/src/Riskeer.Integration.Util/Riskeer.Integration.Util.csproj (revision 0)
+++ Ringtoets/Integration/src/Riskeer.Integration.Util/Riskeer.Integration.Util.csproj (revision 4f569d13df154ec7983b6a59ced2553faf1f7bea)
@@ -0,0 +1,34 @@
+
+
+
+ {D4D21027-B2CD-47E2-A299-70885CC93AB4}
+ Riskeer.Integration.Util
+ Riskeer.Integration.Util
+
+
+
+
+
+
+
+
+
+
+
+
+ Copying.licenseheader
+
+
+
+
+ {3bbfd65b-b277-4e50-ae6d-bd24c3434609}
+ Core.Common.Base
+ False
+
+
+ {d4200f43-3f72-4f42-af0a-8ced416a38ec}
+ Ringtoets.Common.Data
+ False
+
+
+
\ No newline at end of file