Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs =================================================================== diff -u -r5101 -r5124 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 5101) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilProfile2DSurfaceLineHelper.cs (.../SoilProfile2DSurfaceLineHelper.cs) (revision 5124) @@ -335,20 +335,25 @@ result.Surfaces.Clear(); foreach (GeometrySurface surface in result.Geometry.Surfaces) { - SoilLayer2D soilLayer2D1 = new SoilLayer2D(); - soilLayer2D1.GeometrySurface = surface; - soilLayer2D1.Soil = defaultSoil; + SoilLayer2D soilLayer2D1 = new SoilLayer2D + { + GeometrySurface = surface, + Soil = defaultSoil + }; SoilLayer2D soilLayer2D2 = soilLayer2D1; SoilLayer2D layerFromOldSurfaces = soilProfile2D.GetOriginalLayerFromOldSurfaces(surface, (IEnumerable) oldSurfaces); if (layerFromOldSurfaces != null && layerFromOldSurfaces.Soil != null) { soilLayer2D2.Soil = layerFromOldSurfaces.Soil; soilLayer2D2.IsAquifer = layerFromOldSurfaces.IsAquifer; soilLayer2D2.WaterpressureInterpolationModel = layerFromOldSurfaces.WaterpressureInterpolationModel; - //soilLayer2D2.Color = layerFromOldSurfaces.Color; - //soilLayer2D2.Description = layerFromOldSurfaces.Description; } + if (layerFromOldSurfaces == null) + { + var oldSoil = GetSoilIfSurfaceIsLeftOrRightOfOldSurfaces(surface, oldSurfaces); + soilLayer2D2.Soil = oldSoil ?? defaultSoil; + } result.Surfaces.Add(soilLayer2D2); } } @@ -361,4 +366,44 @@ result.PreconsolidationStresses.Add(preconsolidationStress); } } + + private static Soil GetSoilIfSurfaceIsLeftOrRightOfOldSurfaces(GeometrySurface surface, List oldSurfaces) + { + double[] xMin = surface.OuterLoop.CalcPoints.Select(p => p.X).OrderBy(x => x).Distinct().ToArray(); + double[] zMin = surface.OuterLoop.CalcPoints.Select(p => p.Z).OrderBy(z => z).Distinct().ToArray(); + var leftPoint = new Point2D + { + X = xMin[0] - 0.1, + Z = zMin[0] + 0.1 + }; + + var soil = FindSoilFromPointInOldSurfaces(oldSurfaces, leftPoint); + if (soil != null) + { + return soil; + } + + var rightPoint = new Point2D + { + X = xMin[^1] - 0.1, + Z = zMin[0] + 0.1 + }; + + soil = FindSoilFromPointInOldSurfaces(oldSurfaces, rightPoint); + return soil; + } + + private static Soil FindSoilFromPointInOldSurfaces(List oldSurfaces, Point2D searchPoint) + { + for (var i = 0; i < oldSurfaces.Count; i++) + { + bool find = oldSurfaces[i].GeometrySurface.OuterLoop.IsPointInLoopArea(searchPoint); + if (find) + { + return oldSurfaces[i].Soil; + } + } + + return null; + } } \ No newline at end of file