Index: Ringtoets/Integration/src/Ringtoets.Integration.IO/Helpers/ExportableFailureMechanismSectionHelper.cs =================================================================== diff -u -r16a1f79533ceabeb1b4c6ed00fd7bc1e604dbfa9 -r71d46474dec24e87a9a6d45152b0b29977d1a51e --- Ringtoets/Integration/src/Ringtoets.Integration.IO/Helpers/ExportableFailureMechanismSectionHelper.cs (.../ExportableFailureMechanismSectionHelper.cs) (revision 16a1f79533ceabeb1b4c6ed00fd7bc1e604dbfa9) +++ Ringtoets/Integration/src/Ringtoets.Integration.IO/Helpers/ExportableFailureMechanismSectionHelper.cs (.../ExportableFailureMechanismSectionHelper.cs) (revision 71d46474dec24e87a9a6d45152b0b29977d1a51e) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Core.Common.Base.Geometry; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.FailureMechanism; @@ -74,7 +75,35 @@ throw new ArgumentNullException(nameof(referenceLine)); } - return null; + Point2D[] referenceLinePoints = referenceLine.Points.ToArray(); + Point2D startPoint = referenceLinePoints[0]; + var sectionPoints = new List(); + + if (sectionStart == 0) + { + sectionPoints.Add(startPoint); + } + + int sectionLength = sectionEnd - sectionStart; + double sectionLengthOnReferenceLine = 0; + + for (int i = 1; i < referenceLinePoints.Length; i++) + { + double pointLength = Math2D.Length(new[] + { + referenceLinePoints[i - 1], + referenceLinePoints[i] + }); + + sectionLengthOnReferenceLine = sectionLengthOnReferenceLine + pointLength; + + if (sectionLength >= sectionLengthOnReferenceLine) + { + sectionPoints.Add(referenceLinePoints[i]); + } + } + + return sectionPoints; } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Helpers/ExportableFailureMechanismSectionHelperTest.cs =================================================================== diff -u -r16a1f79533ceabeb1b4c6ed00fd7bc1e604dbfa9 -r71d46474dec24e87a9a6d45152b0b29977d1a51e --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Helpers/ExportableFailureMechanismSectionHelperTest.cs (.../ExportableFailureMechanismSectionHelperTest.cs) (revision 16a1f79533ceabeb1b4c6ed00fd7bc1e604dbfa9) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Helpers/ExportableFailureMechanismSectionHelperTest.cs (.../ExportableFailureMechanismSectionHelperTest.cs) (revision 71d46474dec24e87a9a6d45152b0b29977d1a51e) @@ -23,6 +23,7 @@ using System.Collections.Generic; using Core.Common.Base.Geometry; using NUnit.Framework; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Integration.IO.Assembly; using Ringtoets.Integration.IO.Helpers; @@ -103,5 +104,27 @@ var exception = Assert.Throws(call); Assert.AreEqual("referenceLine", exception.ParamName); } + + [Test] + public void GetFailureMechanismSectionGeometry_SectionStartZeroAndEndExactlyOnConsecutiveReferenceLinePoints_ReturnExpectedPoints() + { + // Setup + const int sectionStart = 0; + const int sectionEnd = 10; + var points = new[] + { + new Point2D(sectionStart, 0), + new Point2D(sectionEnd, 0) + }; + + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(points); + + // Call + IEnumerable sectionPoints = ExportableFailureMechanismSectionHelper.GetFailureMechanismSectionGeometry(referenceLine, sectionStart, sectionEnd); + + // Assert + CollectionAssert.AreEqual(points, sectionPoints); + } } } \ No newline at end of file