Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r6289 -r6292 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 6289) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 6292) @@ -107,7 +107,7 @@ input.SoilProfiles2D = soilProfiles2DToSerialize.ToArray(); // Process soils - List usedSoils = DetermineUsedSoils(dike.SoilList.Soils, usedSoilProfiles1D, soilProfiles2DToSerialize); + List usedSoils = DetermineUsedSoils(dike.SoilList.Soils, usedSoilProfiles1D, soilProfiles2DToSerialize, filteredLocations); input.Soils = new DamEngine.Io.XmlInput.Soil[dike.SoilList.Soils.Count]; TransferSoils(usedSoils, input.Soils); @@ -174,10 +174,46 @@ return usedSoilProfiles1D; } - private static List DetermineUsedSoils(List allSoils, List soilProfile1Ds, List soilProfile2Ds) + private static List DetermineUsedSoils(List allSoils, List soilProfile1Ds, List soilProfile2Ds, List locations) { List usedSoils = DetermineUsedSoilsFromSoilProfiles1D(soilProfile1Ds); + DetermineUsedSoilsFromSoilProfiles2D(allSoils, soilProfile2Ds, usedSoils); + + DetermineUsedSoilsFromLocations(allSoils, locations, usedSoils); + + return usedSoils; + } + + private static void DetermineUsedSoilsFromLocations(List allSoils, List locations, List usedSoils) + { + // Add the soil materials used as dike embankment material in Locations + foreach (Location location in locations) + { + foreach (Scenario scenario in location.Scenarios) + { + if (!usedSoils.Any(usedSoil => string.Equals(usedSoil.Name, scenario.Location.DikeEmbankmentMaterial, StringComparison.OrdinalIgnoreCase))) + { + usedSoils.Add(allSoils.First(soil => string.Equals(soil.Name, scenario.Location.DikeEmbankmentMaterial, StringComparison.OrdinalIgnoreCase))); + } + } + } + + // Add the soil materials used as shoulder embankment material in Locations + foreach (Location location in locations) + { + foreach (Scenario scenario in location.Scenarios) + { + if (!usedSoils.Any(usedSoil => string.Equals(usedSoil.Name, scenario.Location.ShoulderEmbankmentMaterial, StringComparison.OrdinalIgnoreCase))) + { + usedSoils.Add(allSoils.First(soil => string.Equals(soil.Name, scenario.Location.ShoulderEmbankmentMaterial, StringComparison.OrdinalIgnoreCase))); + } + } + } + } + + private static void DetermineUsedSoilsFromSoilProfiles2D(List allSoils, List soilProfile2Ds, List usedSoils) + { if (soilProfile2Ds != null && soilProfile2Ds.Count > 0) { foreach (SoilProfile2D soilProfile2D in soilProfile2Ds) @@ -191,10 +227,8 @@ } } } - - return usedSoils; } - + private static List DetermineUsedSoilsFromSoilProfiles1D(List soilProfile1Ds) { var usedSoils = new List();