Index: dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r568 -r571 --- dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 568) +++ dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 571) @@ -56,6 +56,11 @@ input.SoilProfiles1D = new DamEngine.Io.XmlInput.SoilProfile1D[profilesCount]; TransferSoilProfiles1D(dike.SoilProfiles, input.SoilProfiles1D); } + if (damProjectData.WaterBoard.Segments != null) + { + input.Segments = new DamEngine.Io.XmlInput.Segment[damProjectData.WaterBoard.Segments.Count]; + TransferSegments(damProjectData.WaterBoard.Segments, input.Segments); + } return input; } @@ -256,5 +261,52 @@ inputSoilProfile1D.Layers[i] = inputLayer; } } + private static void TransferSegments(IList segments, DamEngine.Io.XmlInput.Segment[] inputSegments) + { + for (int i = 0; i < segments.Count; i++) + { + var segment = segments[i]; + var inputSegment = new DamEngine.Io.XmlInput.Segment + { + Name = segment.Name + }; + AddSoilProfileProbabilities(segment, inputSegment); + inputSegments[i] = inputSegment; + } + } + + private static void AddSoilProfileProbabilities(Segment segment, DamEngine.Io.XmlInput.Segment inputSegment) + { + if (segment.SoilProfileProbabilities != null) + { + var probabilityCount = segment.SoilProfileProbabilities.Count; + inputSegment.SoilGeometryProbability = new SegmentSoilGeometryProbability[probabilityCount]; + for (int i = 0; i < probabilityCount; i++) + { + var soilGeometryProbability = segment.SoilProfileProbabilities[i]; + var inputSoilGeometryProbability = new SegmentSoilGeometryProbability(); + inputSoilGeometryProbability.Probability = soilGeometryProbability.Probability; + if (soilGeometryProbability.SegmentFailureMechanismType.HasValue) + { + inputSoilGeometryProbability.FailureMechanismSystemType = ConversionHelper.ConvertToInputFailureMechanismSystemType(soilGeometryProbability.SegmentFailureMechanismType.Value); + inputSoilGeometryProbability.FailureMechanismSystemTypeSpecified = true; + } + else + { + inputSoilGeometryProbability.FailureMechanismSystemTypeSpecified = false; + } + if (soilGeometryProbability.SoilGeometryType == SoilGeometryType.SoilGeometry1D) + { + inputSoilGeometryProbability.SoilGeometryName = soilGeometryProbability.SoilGeometryName; + } + else + { + inputSoilGeometryProbability.SoilGeometryName = soilGeometryProbability.SoilGeometry2DName; + } + inputSoilGeometryProbability.SoilGeometryType = ConversionHelper.ConvertToInputSoilGeometryType(soilGeometryProbability.SoilGeometryType); + inputSegment.SoilGeometryProbability[i] = inputSoilGeometryProbability; + } + } + } } } Index: dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs =================================================================== diff -u -r569 -r571 --- dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 569) +++ dam clients/DamUI/trunk/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 571) @@ -31,6 +31,7 @@ using KellermanSoftware.CompareNetObjects; using NUnit.Framework; using Location = Deltares.Dam.Data.Location; +using Segment = Deltares.Dam.Data.Segment; using Soil = Deltares.Geotechnics.Soils.Soil; using SoilProfile1D = Deltares.Geotechnics.Soils.SoilProfile1D; @@ -73,6 +74,7 @@ FillSurfaceLines(dike); FillSoils(dike); FillSoilProfiles1D(dike); + FillSegments(damProjectData); AddLocations(dike); return damProjectData; } @@ -222,6 +224,34 @@ dike.SoilProfiles.Add(profile); } } + private static void FillSegments(DamProjectData damProjectData) + { + var segmentCount = 2; + Dike dike = damProjectData.WaterBoard.Dikes[0]; + for (int i = 0; i < segmentCount; i++) + { + var segment = new Segment(); + segment.Name = "Segment " + i.ToString(); + var soilProfileProbability = new SoilGeometryProbability(); + if (i == 0) + { + soilProfileProbability.SegmentFailureMechanismType = FailureMechanismSystemType.StabilityInside; + soilProfileProbability.SoilGeometry2DName = "Profile2D " + (i + 1).ToString(); + //TODO: soilProfileProbability.SoilProfile2D = FillDamUiFromXmlInput.FindSoilProfile2DByName(damProjectData.WaterBoard.Dikes[0]., + // soilProfileProbability.SoilGeometry2DName); + } + else + { + soilProfileProbability.SegmentFailureMechanismType = FailureMechanismSystemType.Piping; + string soilProfile1DName = "Profile1D " + (i + 1).ToString(); + soilProfileProbability.SoilProfile = FillDamUiFromXmlInput.FindSoilProfile1DByName(dike.SoilProfiles, + soilProfile1DName); + } + soilProfileProbability.Probability = 0.003 * (i + 1); + segment.SoilProfileProbabilities.Add(soilProfileProbability); + damProjectData.WaterBoard.Segments.Add(segment); + } + } private void CompareDamProjectData(DamProjectData actual, DamProjectData expected) { var compare = new CompareLogic { Config = { MaxDifferences = 100 } }; Index: dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlInput.cs =================================================================== diff -u -r569 -r571 --- dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 569) +++ dam clients/DamUI/trunk/src/Dam/Data/DamEngineIo/FillDamUiFromXmlInput.cs (.../FillDamUiFromXmlInput.cs) (revision 571) @@ -27,8 +27,10 @@ using Deltares.Geotechnics.GeotechnicalGeometry; using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.SurfaceLines; +using Deltares.Standard.Extensions; using Soil = Deltares.Geotechnics.Soils.Soil; using SoilProfile1D = Deltares.Geotechnics.Soils.SoilProfile1D; +using SoilProfile2D = Deltares.Geotechnics.Soils.SoilProfile2D; using SurfaceLine = Deltares.DamEngine.Io.XmlInput.SurfaceLine; namespace Deltares.Dam.Data.DamEngineIo @@ -58,6 +60,7 @@ TransferSoils(input.Soils, dike.SoilList); TransferLocations(input.Locations, dike.Locations, dike.SurfaceLines2); TransferSoilProfiles1D(input.SoilProfiles1D, dike.SoilProfiles, dike.SoilList); + TransferSegments(input.Segments, dike.SoilProfiles, damProjectData.WaterBoard.Segments); return damProjectData; } @@ -229,5 +232,65 @@ } } } + + private static void TransferSegments(DamEngine.Io.XmlInput.Segment[] inputSegments, IList dikeSoilProfiles, IList segments) + { + for (int i = 0; i < inputSegments.Length; i++) + { + var segment = new Segment(); + var inputSegment = inputSegments[i]; + segment.Name = inputSegment.Name; + AddSoilProfileProbabilities(inputSegment, dikeSoilProfiles, segment); + segments.Add(segment); + } + } + + private static void AddSoilProfileProbabilities(DamEngine.Io.XmlInput.Segment inputSegment, IList dikeSoilProfiles, Segment segment) + { + for (int i = 0; i < inputSegment.SoilGeometryProbability.Length; i++) + { + var soilGeometryProbability = new SoilGeometryProbability(); + var inputSoilGeometryProbability = inputSegment.SoilGeometryProbability[i]; + soilGeometryProbability.Probability = inputSoilGeometryProbability.Probability; + if (inputSoilGeometryProbability.FailureMechanismSystemTypeSpecified) + { + soilGeometryProbability.SegmentFailureMechanismType = ConversionHelper.ConvertToFailureMechanismSystemType(inputSoilGeometryProbability.FailureMechanismSystemType); + } + else + { + soilGeometryProbability.SegmentFailureMechanismType = null; + } + if (inputSoilGeometryProbability.SoilGeometryType == SegmentSoilGeometryProbabilitySoilGeometryType.SoilGeometry1D) + { + soilGeometryProbability.SoilProfile = FindSoilProfile1DByName(dikeSoilProfiles, inputSoilGeometryProbability.SoilGeometryName); + } + else + { + soilGeometryProbability.SoilGeometry2DName = inputSoilGeometryProbability.SoilGeometryName; + } + if (soilGeometryProbability.SoilGeometryType != ConversionHelper.ConvertToSoilGeometryType(inputSoilGeometryProbability.SoilGeometryType)) + { + throw new ConversionException(typeof(SegmentSoilGeometryProbabilitySoilGeometryType), soilGeometryProbability.SoilGeometryType); + } + segment.SoilProfileProbabilities.Add(soilGeometryProbability); + } + } + + /// + /// Finds the SoilProfile1D by name. + /// + /// The soil profiles. + /// The name. + /// + public static SoilProfile1D FindSoilProfile1DByName(IList soilProfiles, string name) + { + foreach (var soilProfile1D in soilProfiles) + { + if (soilProfile1D.Name == name) + return soilProfile1D; + } + return null; + } + } }