Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/SurfaceLineHeightAdapter.cs
===================================================================
diff -u -r3893 -r4000
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/SurfaceLineHeightAdapter.cs (.../SurfaceLineHeightAdapter.cs) (revision 3893)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesDesign/SurfaceLineHeightAdapter.cs (.../SurfaceLineHeightAdapter.cs) (revision 4000)
@@ -36,9 +36,7 @@
///
///
///
- public SurfaceLineHeightAdapter(SurfaceLine2 surfaceLine, Location location, double scenarioPolderLevel) : base(surfaceLine, location, scenarioPolderLevel)
- {
- }
+ public SurfaceLineHeightAdapter(SurfaceLine2 surfaceLine, Location location, double scenarioPolderLevel) : base(surfaceLine, location, scenarioPolderLevel) {}
///
/// Constructs a new surface line with a new height
@@ -55,7 +53,6 @@
///
public SurfaceLine2 ConstructNewSurfaceLine(double newDikeHeight)
{
-
//Input data
GeometryPoint pointAtTopRiver = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver);
GeometryPoint pointAtTopPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
@@ -68,23 +65,26 @@
if (Location.UseNewDikeSlopeOutside)
{
var newOutsideSlopePoint = new GeometryPoint
- {
- X = pointAtTopRiver.X + 100,
- Z = pointAtTopRiver.Z + 100*Location.NewDikeSlopeOutside
- };
+ {
+ X = pointAtTopRiver.X + 100,
+ Z = pointAtTopRiver.Z + 100 * Location.NewDikeSlopeOutside
+ };
newPointAtTopRiver = LineHelper.GetIntersectionPointWithExtrapolation(pointAtTopRiver, newOutsideSlopePoint,
- new GeometryPoint(pointAtTopRiver.X, newDikeHeight),
- new GeometryPoint(pointAtTopPolder.X, newDikeHeight));
- oldPointAtTopRiver = new GeometryPoint {X = pointAtTopRiver.X, Z = pointAtTopRiver.Z};
+ new GeometryPoint(pointAtTopRiver.X, newDikeHeight),
+ new GeometryPoint(pointAtTopPolder.X, newDikeHeight));
+ oldPointAtTopRiver = new GeometryPoint
+ {
+ X = pointAtTopRiver.X,
+ Z = pointAtTopRiver.Z
+ };
}
else
{
- newPointAtTopRiver = LineHelper.GetIntersectionPointWithExtrapolation(startingPoint,pointAtTopRiver,
- new GeometryPoint(pointAtTopRiver.X, newDikeHeight),
- new GeometryPoint(pointAtTopPolder.X, newDikeHeight));
+ newPointAtTopRiver = LineHelper.GetIntersectionPointWithExtrapolation(startingPoint, pointAtTopRiver,
+ new GeometryPoint(pointAtTopRiver.X, newDikeHeight),
+ new GeometryPoint(pointAtTopPolder.X, newDikeHeight));
}
// Determine the new point at DIKE TOP RIVER
-
double dikeTopWidth = pointAtTopPolder.X - pointAtTopRiver.X;
if (Location.UseNewDikeTopWidth)
@@ -93,15 +93,16 @@
}
// Determine the new point at DIKE TOP POLDER
- GeometryPoint newPointAtTopPolder = new GeometryPoint(newPointAtTopRiver.X + dikeTopWidth, newDikeHeight);
-
- var slopeTangentInside = (pointAtTopPolder.Z - pointDikeToeInward.Z) / (pointDikeToeInward.X - pointAtTopPolder.X);
+ var newPointAtTopPolder = new GeometryPoint(newPointAtTopRiver.X + dikeTopWidth, newDikeHeight);
+
+ double slopeTangentInside = (pointAtTopPolder.Z - pointDikeToeInward.Z) / (pointDikeToeInward.X - pointAtTopPolder.X);
if (Location.UseNewDikeSlopeInside)
{
slopeTangentInside = Location.NewDikeSlopeInside;
}
+
// check case where the new top falls completely above the old top
- var intersectionPointDikeTop = IntersectionpointWithOldDikeTop(newPointAtTopPolder, slopeTangentInside);
+ GeometryPoint intersectionPointDikeTop = IntersectionpointWithOldDikeTop(newPointAtTopPolder, slopeTangentInside);
if (intersectionPointDikeTop != null)
{
// Remove all points between old dike top river and old dike top polder
@@ -112,37 +113,40 @@
// check if intersection point equals old dike top polder, if so the ready else add intersection point as normal point
if (!pointAtTopPolder.LocationEquals(intersectionPointDikeTop))
{
- surfaceLine.EnsurePoint(intersectionPointDikeTop.X, intersectionPointDikeTop.Z);
+ surfaceLine.EnsurePoint(intersectionPointDikeTop.X, intersectionPointDikeTop.Z);
}
+
surfaceLine.SortPoints();
return surfaceLine;
}
// Remove points on inside slope
surfaceLine.RemoveSegmentBetween(pointAtTopPolder.X, pointDikeToeInward.X);
// Store the ditch (if any)
- var ditchDefinition = GetDitchDefinition();
+ DitchDefinition? ditchDefinition = GetDitchDefinition();
// Delete the ditch from the surfaceline (if any)
RemoveExistingDitch(ditchDefinition);
// Adjust for the new slope
- var slopePoint = ReplaceBaseInsideForNewSlope(newPointAtTopPolder, slopeTangentInside);
+ GeometryPoint slopePoint = ReplaceBaseInsideForNewSlope(newPointAtTopPolder, slopeTangentInside);
// Reset pointDikeToeInward for new position
pointDikeToeInward = surfaceLine.GetDikeToeInward();
// Remove all points between "old" dike top river side and new toe inward
- surfaceLine.RemoveSegmentBetween(pointAtTopRiver.X, pointDikeToeInward.X);
+ surfaceLine.RemoveSegmentBetween(pointAtTopRiver.X, pointDikeToeInward.X);
if (slopePoint != null)
{
// if the slope point exists (new end point of slope coincides with shouldertopinside), it has to be
// re-added as "normal" point because it was deleted in the former RemoveSegmentBetween.
surfaceLine.AddCharacteristicPoint(slopePoint, CharacteristicPointType.None);
}
+
// Adjust position of "old" dike top river
surfaceLine.EnsurePointOfType(newPointAtTopRiver.X, newPointAtTopRiver.Z, CharacteristicPointType.DikeTopAtRiver);
if (Location.UseNewDikeSlopeOutside)
{
// Re-add the old dike top river as "normal" point
surfaceLine.AddCharacteristicPoint(oldPointAtTopRiver, CharacteristicPointType.None);
}
+
// Add the new dike top at polder side
surfaceLine.EnsurePointOfType(newPointAtTopPolder.X, newPointAtTopPolder.Z, CharacteristicPointType.DikeTopAtPolder);
// Restore Ditch (if any)
@@ -165,18 +169,19 @@
{
GeometryPoint res = null;
var newPoint = new GeometryPoint
- {
- X = newPointAtTopPolder.X + 100,
- Z = newPointAtTopPolder.Z - 100*slopeTangent
- };
+ {
+ X = newPointAtTopPolder.X + 100,
+ Z = newPointAtTopPolder.Z - 100 * slopeTangent
+ };
GeometryPoint dikeTopAtPolder = surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtPolder);
- var ip = LineHelper.GetIntersectionPointWithExtrapolation(newPointAtTopPolder, newPoint,
- surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver),
- dikeTopAtPolder);
+ GeometryPoint ip = LineHelper.GetIntersectionPointWithExtrapolation(newPointAtTopPolder, newPoint,
+ surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeTopAtRiver),
+ dikeTopAtPolder);
if (ip != null && ip.X <= dikeTopAtPolder.X)
{
res = ip;
}
+
return res;
}
}