Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2D.cs =================================================================== diff -u -r4540 -r4687 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2D.cs (.../SoilProfile2D.cs) (revision 4540) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2D.cs (.../SoilProfile2D.cs) (revision 4687) @@ -86,6 +86,8 @@ const double diff = 0.001; if (Geometry.Surfaces.Count == 0) { + // TODO: This codeblock in the if-statement does not belong here. It should be handled in FillDamFromXmlInput.TransferSoilProfiles2D() + // I added the code to FillDamFromXmlInput.AddLayers2D(), which is called in above mentioned method, so I think this can be removed foreach (SoilLayer2D soilLayer2D in Surfaces) { var loop = new GeometryLoop(); Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs =================================================================== diff -u -r4669 -r4687 --- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 4669) +++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlInput.cs (.../FillDamFromXmlInput.cs) (revision 4687) @@ -807,6 +807,8 @@ soilProfile2D.Name = inputSoilProfile2D.Name; AddPreconsolidationStresses(inputSoilProfile2D, soilProfile2D); AddLayers2D(inputSoilProfile2D, soilProfile2D, soils); + soilProfile2D.Geometry.Right = soilProfile2D.Geometry.MaxGeometryPointsX; + soilProfile2D.Geometry.Left = soilProfile2D.Geometry.MinGeometryPointsX; dikeSoilProfiles.Add(soilProfile2D); } } @@ -845,27 +847,54 @@ layer.IsAquifer = inputLayer.IsAquifer; layer.WaterpressureInterpolationModel = ConversionHelper.ConvertToWaterpressureInterpolationModel( inputLayer.WaterpressureInterpolationModel); - SoilProfile2DLayer2DSurfaceOuterPoint[] loop = inputLayer.Surface.OuterLoop; - for (var j = 0; j < loop.Length; j++) + + // Add OuterLoop + SoilProfile2DLayer2DSurfaceOuterPoint[] outerLoop = inputLayer.Surface.OuterLoop; + var isStartPoint = true; + var curve = new GeometryCurve(); + for (var j = 0; j < outerLoop.Length; j++) { - var point = new Point2D(loop[j].X, loop[j].Z); + var point = new Point2D(outerLoop[j].X, outerLoop[j].Z); + if (isStartPoint) + { + curve.HeadPoint = point; + } + else + { + curve.EndPoint = point; + soilProfile2D.Geometry.Curves.Add(curve); + layer.GeometrySurface.OuterLoop.CurveList.Add(curve); + curve = new GeometryCurve(); + curve.HeadPoint = point; + } + isStartPoint = false; + soilProfile2D.Geometry.Points.Add(point); layer.GeometrySurface.OuterLoop.CalcPoints.Add(point); } - + soilProfile2D.Geometry.Loops.Add(layer.GeometrySurface.OuterLoop); + + // Add InnerLoop SoilProfile2DLayer2DSurfaceInnerPoint[] innerloop = inputLayer.Surface.Innerloop; if (innerloop != null) { - var newloop = new GeometryLoop(); - for (var j = 0; j < innerloop.Length; j++) + if (innerloop.Length > 0) { - var point = new Point2D(innerloop[j].X, innerloop[j].Z); - newloop.CalcPoints.Add(point); - } + // 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); + layer.GeometrySurface.InnerLoops.Add(newloop); + soilProfile2D.Geometry.Loops.Add(newloop); + } } soilProfile2D.Surfaces.Add(layer); + soilProfile2D.Geometry.Surfaces.Add(layer.GeometrySurface); } } }