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.
///
///