Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/GeometryHelperTests.cs =================================================================== diff -u -r4835 -r4837 --- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/GeometryHelperTests.cs (.../GeometryHelperTests.cs) (revision 4835) +++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/GeometryHelperTests.cs (.../GeometryHelperTests.cs) (revision 4837) @@ -43,4 +43,17 @@ // Then Assert.That(soilProfile2D.Geometry.Left, Is.EqualTo(-2).Within(cTolerance)); } + + [Test] + public void GivenTwoLayerGeometryWhenExtendingRigthThenLeftBoundaryIsChanged() + { + // Given + SoilProfile2D soilProfile2D = FactoryForSoilProfiles.CreateSoilProfile2DWithTwoLayers(); + + // When + GeometryHelper.ExtendGeometryLeft(soilProfile2D.Geometry, 12); + + // Then + Assert.That(soilProfile2D.Geometry.Right, Is.EqualTo(12).Within(cTolerance)); + } } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs =================================================================== diff -u -r4835 -r4837 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs (.../GeometryHelper.cs) (revision 4835) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryHelper.cs (.../GeometryHelper.cs) (revision 4837) @@ -30,6 +30,7 @@ /// /// Extends the geometry left to the given value of x. /// + /// The geometry to extend /// The x position to move the boundary to. public static void ExtendGeometryLeft(GeometryData geometry, double toX) { @@ -63,4 +64,40 @@ geometry.Rebox(); geometry.Left = toX; } + /// + /// Extends the geometry right to the given value of x. + /// + /// The geometry to extend + /// The x position to move the boundary to. + private static void ExtendGeometryRight(GeometryData geometry, double toX) + { + var rightPoints = geometry.GetRightPoints().OrderBy(x => x.Z).ToArray(); + var rightCurves = geometry.GetRightCurves(); + Point2D prevPoint = null; + for (int i = 0; i < rightPoints.Length; i++) + { + var newPoint = new Point2D(toX, rightPoints[i].Z); + geometry.Points.Add(newPoint); + var newhorizontalCurve = new GeometryCurve(rightPoints[i], newPoint); + geometry.Curves.Add(newhorizontalCurve); + if (i > 0) + { + var newVerticalCurve = new GeometryCurve(newPoint, prevPoint); + geometry.Curves.Add(newVerticalCurve); + } + prevPoint = newPoint; + } + foreach (var geometryCurve in rightCurves) + { + // check if curve is vertical, only then it is on the "old" boundary and needs to be deleted + if (Math.Abs(geometryCurve.HeadPoint.X - geometryCurve.EndPoint.X) < GeometryConstants.Accuracy) + { + geometry.DeleteCurve(geometryCurve, false); + } + } + geometry.Rebox(); + geometry.Right = toX; + } + + } \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs =================================================================== diff -u -r4835 -r4837 --- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 4835) +++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 4837) @@ -669,7 +669,7 @@ /// /// Gets all points on the Left boundary. /// - /// + /// The points on the Left boundary public List GetLeftPoints() { List geometryPoints = Points.Where(gp => Math.Abs(gp.X - Left) < GeometryConstants.Accuracy).ToList(); @@ -679,8 +679,8 @@ /// /// Gets all points on the Right boundary. /// - /// - private List GetRightPoints() + /// The points on the Right boundary + public List GetRightPoints() { List geometryPoints = Points.Where(point => Math.Abs(point.X - Right) < GeometryConstants.Accuracy).ToList(); return geometryPoints; @@ -704,11 +704,31 @@ leftCurves.Add(geometryCurve); } } - return leftCurves; } /// + /// Gets the right curves, i.e. all curves that are on or connected to the Right boundary. + /// + /// The right curves + public List GetRightCurves() + { + var rightCurves = new List(); + foreach (var curve in Curves) + { + if (curve.HeadPoint.X <= Right && curve.EndPoint.X >= Right) + { + rightCurves.Add(curve); + } + else if (curve.HeadPoint.X >= Right && curve.EndPoint.X <= Right) + { + rightCurves.Add(curve); + } + } + return rightCurves; + } + + /// /// Gets the geometry bounds. /// ///