Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsOutputChartControl.cs =================================================================== diff -u -r96764c996a0c059b15ccfd968ba165a0ede1b1e3 -r187efa574b622ec8fd7d3f82f367974e17dbf138 --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsOutputChartControl.cs (.../MacroStabilityInwardsOutputChartControl.cs) (revision 96764c996a0c059b15ccfd968ba165a0ede1b1e3) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.Forms/Views/MacroStabilityInwardsOutputChartControl.cs (.../MacroStabilityInwardsOutputChartControl.cs) (revision 187efa574b622ec8fd7d3f82f367974e17dbf138) @@ -19,6 +19,7 @@ // 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 System.Windows.Forms; @@ -42,6 +43,8 @@ { private readonly ChartDataCollection chartDataCollection; private readonly ChartDataCollection soilProfileChartData; + private readonly ChartDataCollection waternetZonesExtremeChartData; + private readonly ChartDataCollection waternetZonesDailyChartData; private readonly ChartLineData surfaceLineChartData; private readonly ChartPointData surfaceLevelInsideChartData; private readonly ChartPointData ditchPolderSideChartData; @@ -61,6 +64,14 @@ private IMacroStabilityInwardsSoilProfile currentSoilProfile; private MacroStabilityInwardsSurfaceLine currentSurfaceLine; + private MacroStabilityInwardsWaternet currentWaternetExtreme; + private MacroStabilityInwardsWaternet currentWaternetDaily; + + private readonly IDictionary phreaticLineExtremeLookup; + private readonly IDictionary phreaticLineDailyLookup; + private readonly IDictionary waternetLineExtremeLookup; + private readonly IDictionary waternetLineDailyLookup; + /// /// Creates a new instance of . /// @@ -83,6 +94,8 @@ dikeToeAtRiverChartData = RingtoetsChartDataFactory.CreateDikeToeAtRiverChartData(); dikeTopAtRiverChartData = MacroStabilityInwardsChartDataFactory.CreateDikeTopAtRiverChartData(); surfaceLevelOutsideChartData = MacroStabilityInwardsChartDataFactory.CreateSurfaceLevelOutsideChartData(); + waternetZonesExtremeChartData = MacroStabilityInwardsChartDataFactory.CreateWaternetZonesExtremeChartDataCollection(); + waternetZonesDailyChartData = MacroStabilityInwardsChartDataFactory.CreateWaternetZonesDailyChartDataCollection(); chartDataCollection.Add(soilProfileChartData); chartDataCollection.Add(surfaceLineChartData); @@ -98,8 +111,15 @@ chartDataCollection.Add(dikeToeAtRiverChartData); chartDataCollection.Add(dikeTopAtRiverChartData); chartDataCollection.Add(surfaceLevelOutsideChartData); + chartDataCollection.Add(waternetZonesExtremeChartData); + chartDataCollection.Add(waternetZonesDailyChartData); soilLayerChartDataLookup = new List(); + + phreaticLineExtremeLookup = new Dictionary(); + phreaticLineDailyLookup = new Dictionary(); + waternetLineExtremeLookup = new Dictionary(); + waternetLineDailyLookup = new Dictionary(); } public IChartControl Chart @@ -136,9 +156,9 @@ return; } - MacroStabilityInwardsInput macroStabilityInwardsInput = data.InputParameters; - MacroStabilityInwardsSurfaceLine surfaceLine = macroStabilityInwardsInput.SurfaceLine; - IMacroStabilityInwardsSoilProfile soilProfile = macroStabilityInwardsInput.StochasticSoilProfile?.SoilProfile; + MacroStabilityInwardsInput input = data.InputParameters; + MacroStabilityInwardsSurfaceLine surfaceLine = input.SurfaceLine; + IMacroStabilityInwardsSoilProfile soilProfile = input.StochasticSoilProfile?.SoilProfile; if (!ReferenceEquals(currentSoilProfile, soilProfile) || !ReferenceEquals(currentSurfaceLine, surfaceLine)) { @@ -148,19 +168,26 @@ SetSoilProfileChartData(); } + SetWaternetExtremeChartData(input.WaternetExtreme); + SetWaternetDailyChartData(input.WaternetDaily); + if (data.Output != null) { SetSurfaceLineChartData(surfaceLine); SetSoilLayerAreas(); + SetWaternetDatas(surfaceLine); } else { SetSurfaceLineChartData(null); SetEmptySoilLayerAreas(); + SetEmptyWaternets(); } chartDataCollection.Collection.ForEachElementDo(cd => cd.NotifyObservers()); soilProfileChartData.Collection.ForEachElementDo(sp => sp.NotifyObservers()); + waternetZonesDailyChartData.Collection.ForEachElementDo(cd => cd.NotifyObservers()); + waternetZonesExtremeChartData.Collection.ForEachElementDo(cd => cd.NotifyObservers()); } private void SetSoilProfileChartData() @@ -226,5 +253,88 @@ ? MacroStabilityInwardsSoilProfile2DLayersHelper.GetLayersRecursively(layers) : new List(); } + + private void SetWaternetDatas(MacroStabilityInwardsSurfaceLine surfaceLine) + { + foreach (KeyValuePair dailyPhreaticLineData in phreaticLineDailyLookup) + { + dailyPhreaticLineData.Value.Points = MacroStabilityInwardsChartDataPointsFactory.CreatePhreaticLinePoints(dailyPhreaticLineData.Key); + } + foreach (KeyValuePair extremePhreaticLineData in phreaticLineExtremeLookup) + { + extremePhreaticLineData.Value.Points = MacroStabilityInwardsChartDataPointsFactory.CreatePhreaticLinePoints(extremePhreaticLineData.Key); + } + foreach (KeyValuePair dailyWaternetLineData in waternetLineDailyLookup) + { + dailyWaternetLineData.Value.Areas = MacroStabilityInwardsChartDataPointsFactory.CreateWaternetZonePoints(dailyWaternetLineData.Key, surfaceLine); + } + foreach (KeyValuePair extremeWaternetLineData in waternetLineExtremeLookup) + { + extremeWaternetLineData.Value.Areas = MacroStabilityInwardsChartDataPointsFactory.CreateWaternetZonePoints(extremeWaternetLineData.Key, surfaceLine); + } + } + + private void SetEmptyWaternets() + { + foreach (KeyValuePair dailyPhreaticLineData in phreaticLineDailyLookup) + { + dailyPhreaticLineData.Value.Points = new Point2D[0]; + } + foreach (KeyValuePair extremePhreaticLineData in phreaticLineExtremeLookup) + { + extremePhreaticLineData.Value.Points = new Point2D[0]; + } + foreach (KeyValuePair dailyWaternetLineData in waternetLineDailyLookup) + { + dailyWaternetLineData.Value.Areas = Enumerable.Empty(); + } + foreach (KeyValuePair extremeWaternetLineData in waternetLineExtremeLookup) + { + extremeWaternetLineData.Value.Areas = Enumerable.Empty(); + } + } + + private void SetWaternetExtremeChartData(MacroStabilityInwardsWaternet waternet) + { + if (!waternet.Equals(currentWaternetExtreme)) + { + currentWaternetExtreme = waternet; + SetWaternetZonesChartData(waternet, waternetZonesExtremeChartData, + phreaticLineExtremeLookup, waternetLineExtremeLookup); + } + } + + private void SetWaternetDailyChartData(MacroStabilityInwardsWaternet waternet) + { + if (!waternet.Equals(currentWaternetDaily)) + { + currentWaternetDaily = waternet; + SetWaternetZonesChartData(waternet, waternetZonesDailyChartData, + phreaticLineDailyLookup, waternetLineDailyLookup); + } + } + + private static void SetWaternetZonesChartData(MacroStabilityInwardsWaternet waternet, ChartDataCollection chartData, + IDictionary phreaticLineLookup, + IDictionary waternetLineLookup) + { + chartData.Clear(); + phreaticLineLookup.Clear(); + waternetLineLookup.Clear(); + + foreach (MacroStabilityInwardsPhreaticLine phreaticLine in waternet.PhreaticLines) + { + ChartLineData phreaticLineChartData = MacroStabilityInwardsChartDataFactory.CreatePhreaticLineChartData(phreaticLine.Name); + chartData.Add(phreaticLineChartData); + phreaticLineLookup.Add(phreaticLine, phreaticLineChartData); + } + + foreach (MacroStabilityInwardsWaternetLine waternetLine in waternet.WaternetLines) + { + ChartMultipleAreaData waternetLineChartData = MacroStabilityInwardsChartDataFactory.CreateWaternetZoneChartData(waternetLine.Name); + chartData.Add(waternetLineChartData); + waternetLineLookup.Add(waternetLine, waternetLineChartData); + } + } } } \ No newline at end of file