Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/SoilProfileValidatorTests.cs =================================================================== diff -u -r5835 -r5846 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/SoilProfileValidatorTests.cs (.../SoilProfileValidatorTests.cs) (revision 5835) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/PlLinesCreator/SoilProfileValidatorTests.cs (.../SoilProfileValidatorTests.cs) (revision 5846) @@ -550,6 +550,7 @@ List relevantSurfaces = soilProfile.Geometry.Surfaces.Where(s => s.InnerLoops.Count == 1).ToList(); Assert.That(relevantSurfaces, Has.Count.EqualTo(1)); Assert.That(relevantSurfaces[0].OuterLoop.CurveList, Has.Count.EqualTo(14)); + Assert.That(relevantSurfaces[0].InnerLoops[0].Points, Has.Count.EqualTo(3)); Assert.That(relevantSurfaces[0].InnerLoops[0].CurveList, Has.Count.EqualTo(3)); Assert.That(soilProfile.Surfaces.Where(s => s.IsAquifer).ToList(), Has.Count.EqualTo(2)); }); Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs =================================================================== diff -u -r5813 -r5846 --- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 5813) +++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 5846) @@ -877,46 +877,51 @@ // Add OuterLoop AddOuterLoopToSoilProfile2DFromLayer2D(soilProfile2D.Geometry, inputLayer.Surface.OuterLoop, layer.GeometrySurface.OuterLoop); - // Add InnerLoop - AddInnerLoopToSoilProfile2DFromLayer2D(soilProfile2D, inputLayer, layer); - + // Add InnerLoop when available + if (inputLayer.Surface.Innerloop != null && inputLayer.Surface.Innerloop.Length > 0) + { + layer.GeometrySurface.InnerLoops.Add(new GeometryLoop()); + AddInnerLoopToSoilProfile2DFromLayer2D(soilProfile2D.Geometry, inputLayer.Surface.Innerloop, layer.GeometrySurface.InnerLoops[0]); + } + soilProfile2D.Surfaces.Add(layer); soilProfile2D.Geometry.Surfaces.Add(layer.GeometrySurface); } } } - - private static void AddInnerLoopToSoilProfile2DFromLayer2D(SoilProfile2D soilProfile2D, SoilProfile2DLayer2D inputLayer, SoilLayer2D layer) + + private static void AddOuterLoopToSoilProfile2DFromLayer2D(GeometryData geometry, SoilProfile2DLayer2DSurfaceOuterPoint[] inputOuterLoop , + GeometryLoop outputOuterLoop) { - SoilProfile2DLayer2DSurfaceInnerPoint[] innerloop = inputLayer.Surface.Innerloop; - if (innerloop != null) + List inputPoints = new List(); + foreach (SoilProfile2DLayer2DSurfaceOuterPoint innerPoint in inputOuterLoop) { - if (innerloop.Length > 0) - { - // TODO: Add curves of innerloop to geometry - var newloop = new GeometryLoop(); - for (var j = 0; j < innerloop.Length; j++) - { - var point = new Point2D(innerloop[j].X, innerloop[j].Z); - soilProfile2D.Geometry.Points.Add(point); - newloop.CalcPoints.Add(point); - } - - layer.GeometrySurface.InnerLoops.Add(newloop); - soilProfile2D.Geometry.Loops.Add(newloop); - } + inputPoints.Add(new Point2D(innerPoint.X, innerPoint.Z)); } + AddLoopToSoilProfile2DFromLayer2D(geometry, outputOuterLoop, inputPoints); } + + private static void AddInnerLoopToSoilProfile2DFromLayer2D(GeometryData geometry, + SoilProfile2DLayer2DSurfaceInnerPoint[] inputInnerLoop, + GeometryLoop outputInnerLoop) + { + List inputPoints = new List(); + foreach (SoilProfile2DLayer2DSurfaceInnerPoint innerPoint in inputInnerLoop) + { + inputPoints.Add(new Point2D(innerPoint.X, innerPoint.Z)); + } + AddLoopToSoilProfile2DFromLayer2D(geometry, outputInnerLoop, inputPoints); + } - private static void AddOuterLoopToSoilProfile2DFromLayer2D(GeometryData geometry, SoilProfile2DLayer2DSurfaceOuterPoint[] inputOuterLoop , - GeometryLoop outputOuterLoop) + private static void AddLoopToSoilProfile2DFromLayer2D(GeometryData geometry, GeometryLoop outputInnerLoop, List inputPoints) { var isStartPoint = true; var curve = new GeometryCurve(); var firstPoint = new Point2D(); - for (var j = 0; j < inputOuterLoop.Length; j++) + for (var j = 0; j < inputPoints.Count; j++) { - var point = new Point2D(inputOuterLoop[j].X, inputOuterLoop[j].Z); + var point = inputPoints[j]; + point = AddPointToSoilProfile2D(geometry, outputInnerLoop, point); if (isStartPoint) { curve.HeadPoint = point; @@ -925,48 +930,51 @@ else { curve.EndPoint = point; - AddCurveToSoilProfile2D(geometry, outputOuterLoop, curve); + AddCurveToSoilProfile2D(geometry, outputInnerLoop, curve); curve = new GeometryCurve(); curve.HeadPoint = point; } - if (j == inputOuterLoop.Length - 1) + if (j == inputPoints.Count - 1) { curve.EndPoint = firstPoint; - AddCurveToSoilProfile2D(geometry, outputOuterLoop, curve); + AddCurveToSoilProfile2D(geometry, outputInnerLoop, curve); } isStartPoint = false; - AddPointToSoilProfile2D(geometry, outputOuterLoop, point); + } - geometry.Loops.Add(outputOuterLoop); + outputInnerLoop.SyncPoints(); + geometry.Loops.Add(outputInnerLoop); } - private static void AddPointToSoilProfile2D(GeometryData geometry, GeometryLoop outputOuterLoop, Point2D point) + private static Point2D AddPointToSoilProfile2D(GeometryData geometry, GeometryLoop outputLoop, Point2D point) { var existingPoint = geometry.GetPointAtLocation(point); if (existingPoint == null) { geometry.Points.Add(point); - outputOuterLoop.CalcPoints.Add(point); + outputLoop.CalcPoints.Add(point); + return point; } else { - outputOuterLoop.CalcPoints.Add(existingPoint); + outputLoop.CalcPoints.Add(existingPoint); + return existingPoint; } } - private static void AddCurveToSoilProfile2D(GeometryData geometry, GeometryLoop outputOuterLoop, GeometryCurve curve) + private static void AddCurveToSoilProfile2D(GeometryData geometry, GeometryLoop outputLoop, GeometryCurve curve) { var existingCurve = GeometryHelper.DoesCurveExist(geometry, curve); if (existingCurve == null) { geometry.Curves.Add(curve); - outputOuterLoop.CurveList.Add(curve); + outputLoop.CurveList.Add(curve); } else { - outputOuterLoop.CurveList.Add(existingCurve); + outputLoop.CurveList.Add(existingCurve); } }