Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Factories/MacroStabilityInwardsChartDataFactory.cs =================================================================== diff -u -r6168b610057e59ea1ae81d7474ec799a494297bd -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Factories/MacroStabilityInwardsChartDataFactory.cs (.../MacroStabilityInwardsChartDataFactory.cs) (revision 6168b610057e59ea1ae81d7474ec799a494297bd) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Factories/MacroStabilityInwardsChartDataFactory.cs (.../MacroStabilityInwardsChartDataFactory.cs) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -260,6 +260,22 @@ } /// + /// Create a for the slices in a slip plane. + /// + /// The created . + public static ChartMultipleAreaData CreateSlicesChartData() + { + return new ChartMultipleAreaData(Resources.Slices_DisplayName, + new ChartAreaStyle + { + FillColor = Color.Empty, + StrokeColor = Color.DarkGreen, + StrokeThickness = 2, + IsEditable = true + }); + } + + /// /// Updates the name of based on . /// /// The to update the name for. Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Factories/MacroStabilityInwardsChartDataPointsFactory.cs =================================================================== diff -u -r6168b610057e59ea1ae81d7474ec799a494297bd -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Factories/MacroStabilityInwardsChartDataPointsFactory.cs (.../MacroStabilityInwardsChartDataPointsFactory.cs) (revision 6168b610057e59ea1ae81d7474ec799a494297bd) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Factories/MacroStabilityInwardsChartDataPointsFactory.cs (.../MacroStabilityInwardsChartDataPointsFactory.cs) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -398,6 +398,28 @@ }; } + /// + /// Create areas of the slices based on the provided . + /// + /// The slices to create the areas for. + /// A collection of arrays of points in 2D space or an empty collection when + /// is null. + public static IEnumerable CreateSliceAreas(IEnumerable slices) + { + if (slices == null) + { + return Enumerable.Empty(); + } + + return slices.Select(slice => new[] + { + slice.TopLeftPoint, + slice.TopRightPoint, + slice.BottomRightPoint, + slice.BottomLeftPoint + }); + } + #region SoilLayers and Surface Line Helpers private static Point2D[] GetLocalPointsFromGeometry(MacroStabilityInwardsSurfaceLine surfaceLine, Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -r365f33fe0130eac94cacb979165488d9ae124f3c -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 365f33fe0130eac94cacb979165488d9ae124f3c) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -1454,6 +1454,15 @@ } /// + /// Looks up a localized string similar to Lamellen. + /// + public static string Slices_DisplayName { + get { + return ResourceManager.GetString("Slices_DisplayName", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Glijvlak. /// public static string SlipPlane_DisplayName { Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Properties/Resources.resx =================================================================== diff -u -r365f33fe0130eac94cacb979165488d9ae124f3c -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Properties/Resources.resx (.../Resources.resx) (revision 365f33fe0130eac94cacb979165488d9ae124f3c) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Properties/Resources.resx (.../Resources.resx) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -733,4 +733,7 @@ Lamel {0} + + Lamellen + \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsOutputChartControl.cs =================================================================== diff -u -r6168b610057e59ea1ae81d7474ec799a494297bd -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsOutputChartControl.cs (.../MacroStabilityInwardsOutputChartControl.cs) (revision 6168b610057e59ea1ae81d7474ec799a494297bd) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsOutputChartControl.cs (.../MacroStabilityInwardsOutputChartControl.cs) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -44,6 +44,7 @@ private readonly ChartDataCollection soilProfileChartData; private readonly ChartDataCollection waternetZonesExtremeChartData; private readonly ChartDataCollection waternetZonesDailyChartData; + private readonly ChartMultipleAreaData slicesChartData; private readonly ChartLineData surfaceLineChartData; private readonly ChartPointData surfaceLevelInsideChartData; private readonly ChartPointData ditchPolderSideChartData; @@ -105,6 +106,7 @@ slipPlaneChartData = MacroStabilityInwardsChartDataFactory.CreateSlipPlaneChartData(); leftCircleRadiusChartData = MacroStabilityInwardsChartDataFactory.CreateActiveCircleRadiusChartData(); rightCircleRadiusChartData = MacroStabilityInwardsChartDataFactory.CreatePassiveCircleRadiusChartData(); + slicesChartData = MacroStabilityInwardsChartDataFactory.CreateSlicesChartData(); chartDataCollection.Add(soilProfileChartData); chartDataCollection.Add(surfaceLineChartData); @@ -124,6 +126,7 @@ chartDataCollection.Add(waternetZonesDailyChartData); chartDataCollection.Add(leftGridChartData); chartDataCollection.Add(rightGridChartData); + chartDataCollection.Add(slicesChartData); chartDataCollection.Add(slipPlaneChartData); chartDataCollection.Add(leftCircleRadiusChartData); chartDataCollection.Add(rightCircleRadiusChartData); @@ -185,6 +188,7 @@ slipPlaneChartData.Points = MacroStabilityInwardsChartDataPointsFactory.CreateSlipPlanePoints(output?.SlidingCurve); leftCircleRadiusChartData.Points = MacroStabilityInwardsChartDataPointsFactory.CreateLeftCircleRadiusPoints(output?.SlidingCurve); rightCircleRadiusChartData.Points = MacroStabilityInwardsChartDataPointsFactory.CreateRightCircleRadiusPoints(output?.SlidingCurve); + slicesChartData.Areas = MacroStabilityInwardsChartDataPointsFactory.CreateSliceAreas(output?.SlidingCurve.Slices); } private void UpdateInputChartData() Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Factories/MacroStabilityInwardsChartDataFactoryTest.cs =================================================================== diff -u -r5d98c3072517f99bfc6f05a363ea5cf4d6025bd8 -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Factories/MacroStabilityInwardsChartDataFactoryTest.cs (.../MacroStabilityInwardsChartDataFactoryTest.cs) (revision 5d98c3072517f99bfc6f05a363ea5cf4d6025bd8) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Factories/MacroStabilityInwardsChartDataFactoryTest.cs (.../MacroStabilityInwardsChartDataFactoryTest.cs) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -289,6 +289,18 @@ } [Test] + public void CreateSlicesChartData_ReturnsChartMultipleAreaData() + { + // Call + ChartMultipleAreaData data = MacroStabilityInwardsChartDataFactory.CreateSlicesChartData(); + + // Assert + CollectionAssert.IsEmpty(data.Areas); + Assert.AreEqual("Lamellen", data.Name); + AssertEqualStyle(data.Style, Color.Empty, Color.DarkGreen, 2, true); + } + + [Test] public void UpdateSurfaceLineChartDataName_SurfaceLineNull_NameSetToDefaultSurfaceLineName() { // Setup Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Factories/MacroStabilityInwardsChartDataPointsFactoryTest.cs =================================================================== diff -u -r6168b610057e59ea1ae81d7474ec799a494297bd -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Factories/MacroStabilityInwardsChartDataPointsFactoryTest.cs (.../MacroStabilityInwardsChartDataPointsFactoryTest.cs) (revision 6168b610057e59ea1ae81d7474ec799a494297bd) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.Test/Factories/MacroStabilityInwardsChartDataPointsFactoryTest.cs (.../MacroStabilityInwardsChartDataPointsFactoryTest.cs) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -1400,6 +1400,60 @@ CollectionAssert.AreEqual(points, line); } + [Test] + public void CreateSliceAreas_SlicesNull_ReturnsEmptyCollection() + { + // Call + IEnumerable areas = MacroStabilityInwardsChartDataPointsFactory.CreateSliceAreas(null); + + // Assert + CollectionAssert.IsEmpty(areas); + } + + [Test] + public void CreateSliceAreas_WithSlices_ReturnsAreas() + { + // Setup + var expectedAreas = new[] + { + new[] + { + new Point2D(0, 1), + new Point2D(1, 1), + new Point2D(1, 0), + new Point2D(0, 0) + }, + new[] + { + new Point2D(3, 4), + new Point2D(4, 4), + new Point2D(4, 3), + new Point2D(3, 3) + } + }; + + var slices = + new[] + { + new MacroStabilityInwardsSlice(new Point2D(0, 1), + new Point2D(1, 1), + new Point2D(0, 0), + new Point2D(1, 0), + new MacroStabilityInwardsSlice.ConstructionProperties()), + new MacroStabilityInwardsSlice(new Point2D(3, 4), + new Point2D(4, 4), + new Point2D(3, 3), + new Point2D(4, 3), + new MacroStabilityInwardsSlice.ConstructionProperties()) + }; + + // Call + IEnumerable areas = MacroStabilityInwardsChartDataPointsFactory.CreateSliceAreas(slices); + + // Assert + CollectionAssert.AreEqual(expectedAreas, areas); + } + private static MacroStabilityInwardsWaternetLine CreateWaternetLine(IEnumerable waternetLineGeometry, IEnumerable phreaticLineGeometry) { Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.TestUtil/MacroStabilityInwardsOutputViewChartDataAssert.cs =================================================================== diff -u -r6168b610057e59ea1ae81d7474ec799a494297bd -rcac3045aae8af73cbc3602a1c38b071385aa3581 --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.TestUtil/MacroStabilityInwardsOutputViewChartDataAssert.cs (.../MacroStabilityInwardsOutputViewChartDataAssert.cs) (revision 6168b610057e59ea1ae81d7474ec799a494297bd) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.Forms.TestUtil/MacroStabilityInwardsOutputViewChartDataAssert.cs (.../MacroStabilityInwardsOutputViewChartDataAssert.cs) (revision cac3045aae8af73cbc3602a1c38b071385aa3581) @@ -52,10 +52,11 @@ private const int waternetZonesDailyIndex = 15; private const int leftGridIndex = 16; private const int rightGridIndex = 17; - private const int slipPlaneIndex = 18; - private const int activeCircleRadiusIndex = 19; - private const int passiveCircleRadiusIndex = 20; - private const int nrOfChartData = 21; + private const int slicesIndex = 18; + private const int slipPlaneIndex = 19; + private const int activeCircleRadiusIndex = 20; + private const int passiveCircleRadiusIndex = 21; + private const int nrOfChartData = 22; /// /// Asserts whether corresponds to the input of . @@ -94,6 +95,10 @@ (ChartPointData) actual.Collection.ElementAt(leftGridIndex)); MacroStabilityInwardsViewChartDataAssert.AssertGridChartData(calculationScenario.Output.SlipPlane.RightGrid, (ChartPointData) actual.Collection.ElementAt(rightGridIndex)); + + AssertSlicesChartData(calculationScenario.Output.SlidingCurve.Slices, + (ChartMultipleAreaData) actual.Collection.ElementAt(slicesIndex)); + AssertSlipPlaneChartData(calculationScenario.Output.SlidingCurve, (ChartLineData) actual.Collection.ElementAt(slipPlaneIndex)); @@ -118,18 +123,21 @@ Assert.AreEqual(nrOfChartData, chartDataArray.Length); var leftGridData = (ChartPointData) chartDataArray[leftGridIndex]; var rightGridData = (ChartPointData) chartDataArray[rightGridIndex]; + var slicesData = (ChartMultipleAreaData) chartDataArray[slicesIndex]; var slipPlaneData = (ChartLineData) chartDataArray[slipPlaneIndex]; var activeCircleRadiusData = (ChartLineData) chartDataArray[activeCircleRadiusIndex]; var passiveCircleRadiusData = (ChartLineData) chartDataArray[passiveCircleRadiusIndex]; CollectionAssert.IsEmpty(leftGridData.Points); CollectionAssert.IsEmpty(rightGridData.Points); + CollectionAssert.IsEmpty(slicesData.Areas); CollectionAssert.IsEmpty(slipPlaneData.Points); CollectionAssert.IsEmpty(activeCircleRadiusData.Points); CollectionAssert.IsEmpty(passiveCircleRadiusData.Points); Assert.AreEqual("Linker grid", leftGridData.Name); Assert.AreEqual("Rechter grid", rightGridData.Name); + Assert.AreEqual("Lamellen", slicesData.Name); Assert.AreEqual("Glijvlak", slipPlaneData.Name); Assert.AreEqual("Radius actieve cirkel", activeCircleRadiusData.Name); Assert.AreEqual("Radius passieve cirkel", passiveCircleRadiusData.Name); @@ -192,6 +200,31 @@ } /// + /// Asserts whether corresponds to . + /// + /// The original slices. + /// The actual . + /// Thrown when + /// does not correspond to . + private static void AssertSlicesChartData(IEnumerable slices, ChartMultipleAreaData actual) + { + MacroStabilityInwardsSlice[] macroStabilityInwardsSlices = slices.ToArray(); + CollectionAssert.IsNotEmpty(macroStabilityInwardsSlices); + for (var i = 0; i < macroStabilityInwardsSlices.Length; i++) + { + MacroStabilityInwardsSlice slice = macroStabilityInwardsSlices[i]; + var expectedPoints = new[] + { + slice.TopLeftPoint, + slice.TopRightPoint, + slice.BottomRightPoint, + slice.BottomLeftPoint + }; + CollectionAssert.AreEqual(expectedPoints, actual.Areas.ElementAt(i)); + } + } + + /// /// Asserts whether corresponds to /// and . ///