Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs
===================================================================
diff -u -r5104 -r5111
--- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 5104)
+++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Factories/FactoryForSoilProfiles.cs (.../FactoryForSoilProfiles.cs) (revision 5111)
@@ -1109,11 +1109,17 @@
soilProfile2D.Surfaces.Add(soilLayer5);
soilProfile2D.Surfaces.Add(soilLayer6);
+ soilProfile2D.Geometry.Loops.Add(soilLayer1.GeometrySurface.OuterLoop);
soilProfile2D.Geometry.Surfaces.Add(soilLayer1.GeometrySurface);
+ soilProfile2D.Geometry.Loops.Add(soilLayer2.GeometrySurface.OuterLoop);
soilProfile2D.Geometry.Surfaces.Add(soilLayer2.GeometrySurface);
+ soilProfile2D.Geometry.Loops.Add(soilLayer3.GeometrySurface.OuterLoop);
soilProfile2D.Geometry.Surfaces.Add(soilLayer3.GeometrySurface);
+ soilProfile2D.Geometry.Loops.Add(soilLayer4.GeometrySurface.OuterLoop);
soilProfile2D.Geometry.Surfaces.Add(soilLayer4.GeometrySurface);
+ soilProfile2D.Geometry.Loops.Add(soilLayer5.GeometrySurface.OuterLoop);
soilProfile2D.Geometry.Surfaces.Add(soilLayer5.GeometrySurface);
+ soilProfile2D.Geometry.Loops.Add(soilLayer6.GeometrySurface.OuterLoop);
soilProfile2D.Geometry.Surfaces.Add(soilLayer6.GeometrySurface);
return soilProfile2D;
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometrySurface.cs
===================================================================
diff -u -r5069 -r5111
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometrySurface.cs (.../GeometrySurface.cs) (revision 5069)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometrySurface.cs (.../GeometrySurface.cs) (revision 5111)
@@ -229,11 +229,11 @@
/// The cloned GeometrySurface
public GeometrySurface Clone()
{
- var clonedGeometrySurface = new GeometrySurface()
+ // Only clone the name, the outer loop and the inner loops are not to be cloned here!
+ var clonedGeometrySurface = new GeometrySurface
{
- OuterLoop = OuterLoop.Clone()
+ Name = Name
};
- clonedGeometrySurface.InnerLoops.AddRange(InnerLoops.Select(loop => loop.Clone()).ToList());
return clonedGeometrySurface;
}
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs
===================================================================
diff -u -r5101 -r5111
--- DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs (.../SoilProfile2DSurfaceLineHelperTests.cs) (revision 5101)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data.Tests/Geotechnics/SoilProfile2DSurfaceLineHelperTests.cs (.../SoilProfile2DSurfaceLineHelperTests.cs) (revision 5111)
@@ -34,7 +34,7 @@
{
// For debugging purposes
// For debugging purposes
- //private const string visualizationFolder = @"C:\Dam\DamTools\GeometryVisualizer\"; //#John
+ private const string visualizationFolder = @"C:\Dam\DamTools\GeometryVisualizer\"; //#John
//private const string visualizationFolder = @"D:\src\dam\DamTools\GeometryVisualizer\"; //#Tom
// Use the following code to export the geometry to a file
// GeometryExporter.ExportToFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.txt");
@@ -102,6 +102,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 1,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-50, 10),
ExpectedSurfaceCount = 10,
// 4 extra surfaces created : 2 below the highest corners of the "zigzag" surface line + 2 on the left side (between Z=60 and 70)
@@ -123,6 +124,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine()
{
+ TestNumber = 2,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-50, 13),
ExpectedSurfaceCount = 9,
// 3 extra surfaces created: 1 below the "zigzag" surface line + 2 on the left side (between Z=60 and 70)
@@ -143,6 +145,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 3,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-50, 5),
ExpectedSurfaceCount = 8,
// 2 extra surfaces created on the left side (between Z=60 and 70)
@@ -163,6 +166,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 4,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-50, 0),
ExpectedSurfaceCount = 8,
// 2 extra surfaces created on the left side (between Z=60 and 70)
@@ -183,20 +187,23 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 5,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-50, -15),
ExpectedSurfaceCount = 0
}).SetName("Test 5: Surface line partly below soil profile (and shift = 0)");
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 6,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-50, -20),
ExpectedSurfaceCount = 0
}).SetName("Test 6: Surface line completely below soil profile (and shift = 0)");
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 7,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-40, 10),
ExpectedSurfaceCount = 10,
// Only few surfaces are tested
@@ -217,6 +224,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 8,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(10, 10),
ExpectedSurfaceCount = 7,
// Only few surfaces are tested
@@ -237,6 +245,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 9,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-60, 10),
ExpectedSurfaceCount = 10,
// Only few surfaces are tested
@@ -257,6 +266,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 10,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(-60, 10),
ExpectedSurfaceCount = 9,
// Only few surfaces are tested
@@ -277,6 +287,7 @@
yield return new TestCaseData(
new TestCaseZigZagSurfaceLine
{
+ TestNumber = 11,
GivenZigZagSurfaceLine = FactoryForSurfaceLines.CreateSurfaceLineInZigZag(50, -5),
ExpectedSurfaceCount = 2,
ExpectedFilling1 = null,
@@ -314,11 +325,11 @@
}
[Test, TestCaseSource(nameof(SurfaceLinesTestCases))]
- //[Ignore("Work in progress")]
public void GivenSoilProfile2DWhenCombiningWithSurfaceLineThenCorrectNewSoilProfile2DIsCreated(TestCaseSurfaceLine testCaseSurfaceLine)
{
// Given
SoilProfile2D soilProfile2D = FactoryForSoilProfiles.CreateSoilProfile2DWithThreeLayers();
+ // For debugging purposes
//GeometryExporter.ExportToJsonFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.json");
//GeometryExporter.ExportToFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.txt");
var defaultSoil = new Soil
@@ -340,15 +351,19 @@
{
// Given
SoilProfile2D soilProfile2D = FactoryForSoilProfiles.CreateSoilProfile2DWithSixSurfacesFormingTwoLayers();
- //GeometryExporter.ExportToJsonFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.json");
- //GeometryExporter.ExportToFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.txt");
+ // For debugging purposes
+ // GeometryExporter.ExportToJsonFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.json");
+ // GeometryExporter.ExportToFile(soilProfile2D.Geometry, visualizationFolder + "Geometry.txt");
var defaultSoil = new Soil
{
Name = "Filling material"
};
// When
SoilProfile2D newSoilProfile2D = SoilProfile2DSurfaceLineHelper.CombineSurfaceLineWithSoilProfile2D(
testCaseSurfaceLine.GivenZigZagSurfaceLine.Geometry, soilProfile2D, defaultSoil, 0);
+ // For debugging purposes
+ // GeometryExporter.ExportToFile(newSoilProfile2D.Geometry, visualizationFolder + "Geometry" + testCaseSurfaceLine.TestNumber + ".txt");
+ // GeometryExporter.ExportToJsonFile(newSoilProfile2D.Geometry, visualizationFolder + "Geometry" + testCaseSurfaceLine.TestNumber + ".json");
// Then
if (testCaseSurfaceLine.ExpectedSurfaceCount == 0)
{
@@ -415,6 +430,8 @@
public SoilLayer2D ExpectedExtendedSurface6 { get; init; }
public SoilLayer2D ExpectedFilling1 { get; init; }
public SoilLayer2D ExpectedFilling2 { get; init; }
+
+ public int TestNumber { get; set; }
}
///
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs
===================================================================
diff -u -r5101 -r5111
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 5101)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryData.cs (.../GeometryData.cs) (revision 5111)
@@ -1323,13 +1323,17 @@
{
clonedGeometryData.NewlyEffectedCurves.Add(curve.Clone(clonedGeometryData.NewlyEffectedPoints));
}
- foreach (GeometryLoop loop in this.Loops)
- {
- clonedGeometryData.Loops.Add(loop.Clone());
- }
foreach (GeometrySurface surface in this.Surfaces)
{
- clonedGeometryData.Surfaces.Add(surface.Clone());
+ var clonedLoop = surface.OuterLoop.Clone();
+ clonedGeometryData.Loops.Add(clonedLoop);
+ List innerLoops = new List();
+ innerLoops.AddRange(surface.InnerLoops.Select(loop => loop.Clone()).ToList());
+ clonedGeometryData.Loops.AddRange(innerLoops);
+ var clonedSurface = surface.Clone();
+ clonedSurface.OuterLoop = clonedLoop;
+ clonedSurface.InnerLoops.AddRange(innerLoops);
+ clonedGeometryData.Surfaces.Add(clonedSurface);
}
// For the clone, set use geometry generator to null.
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilLayer2D.cs
===================================================================
diff -u -r5061 -r5111
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilLayer2D.cs (.../SoilLayer2D.cs) (revision 5061)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geotechnics/SoilLayer2D.cs (.../SoilLayer2D.cs) (revision 5111)
@@ -20,6 +20,8 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
+using System.Linq;
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Standard.Language;
@@ -65,6 +67,11 @@
WaterpressureInterpolationModel = WaterpressureInterpolationModel,
GeometrySurface = GeometrySurface.Clone()
};
+ var clonedLoop = GeometrySurface.OuterLoop.Clone();
+ clonedSoilLayer2D.GeometrySurface.OuterLoop = clonedLoop;
+ List innerLoops = new List();
+ innerLoops.AddRange(GeometrySurface.InnerLoops.Select(loop => loop.Clone()).ToList());
+ clonedSoilLayer2D.GeometrySurface.InnerLoops.AddRange(innerLoops);
return clonedSoilLayer2D;
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs
===================================================================
diff -u -r5073 -r5111
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 5073)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/GeometryLoop.cs (.../GeometryLoop.cs) (revision 5111)
@@ -249,7 +249,12 @@
/// The cloned GeometryLoop
public override GeometryLoop Clone()
{
- SyncPoints();
+ // Note: explicit use of CalcPoints to ensure calcPoints are populated
+ var p = CalcPoints;
+ if (p.Count > 0)
+ {
+ SyncPoints();
+ }
GeometryPointString clonedGeometryPointString = base.Clone();
var clonedGeometryLoop = new GeometryLoop();
clonedGeometryLoop.Points.AddRange(clonedGeometryPointString.Points);