Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader.Tests/SoilProfile2DDataModelTest.cs =================================================================== diff -u -r5951 -r6112 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader.Tests/SoilProfile2DDataModelTest.cs (.../SoilProfile2DDataModelTest.cs) (revision 5951) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader.Tests/SoilProfile2DDataModelTest.cs (.../SoilProfile2DDataModelTest.cs) (revision 6112) @@ -161,4 +161,53 @@ validationResults = soilProfile2D.Geometry.ValidateGeometry(); Assert.That(validationResults, Has.Length.EqualTo(0)); } + + [Test] + public void WhenDataModelWithInnerLoopsIsCreated_ThenSoilProfile2DIsAsExpected() + { + const double shift = 0; + PersistableDataModel dataModel = PersistableDataModelFactory.CreateSimpleDataModelWithInnerLoops(); + SoilProfile2D soilProfile2D = new SoilProfile2DDataModel().Create(dataModel, 0); + + IList points = soilProfile2D.Geometry.Points; + Assert.That(points, Has.Count.EqualTo(16)); + Assert.Multiple(() => + { + Assert.That(points.ElementAt(0).LocationEquals(new GeometryPoint(10, 0, -5)), Is.True); + Assert.That(points.ElementAt(1).LocationEquals(new GeometryPoint(10, 0, 5)), Is.True); + Assert.That(points.ElementAt(2).LocationEquals(new GeometryPoint(60, 0, 5)), Is.True); + Assert.That(points.ElementAt(3).LocationEquals(new GeometryPoint(60, 0, -5)), Is.True); + Assert.That(points.ElementAt(4).LocationEquals(new GeometryPoint(20, 0, -4)), Is.True); + Assert.That(points.ElementAt(5).LocationEquals(new GeometryPoint(20, 0, 4)), Is.True); + Assert.That(points.ElementAt(6).LocationEquals(new GeometryPoint(30, 0, 4)), Is.True); + Assert.That(points.ElementAt(7).LocationEquals(new GeometryPoint(30, 0, -4)), Is.True); + Assert.That(points.ElementAt(8).LocationEquals(new GeometryPoint(40, 0, 4)), Is.True); + Assert.That(points.ElementAt(9).LocationEquals(new GeometryPoint(40, 0, -4)), Is.True); + Assert.That(points.ElementAt(10).LocationEquals(new GeometryPoint(50, 0, -4)), Is.True); + Assert.That(points.ElementAt(11).LocationEquals(new GeometryPoint(50, 0, 4)), Is.True); + Assert.That(points.ElementAt(12).LocationEquals(new GeometryPoint(21, 0, 3)), Is.True); + Assert.That(points.ElementAt(13).LocationEquals(new GeometryPoint(21, 0, -3)), Is.True); + Assert.That(points.ElementAt(14).LocationEquals(new GeometryPoint(29, 0, -3)), Is.True); + Assert.That(points.ElementAt(15).LocationEquals(new GeometryPoint(29, 0, 3)), Is.True); + }); + + Assert.That(soilProfile2D.Geometry.Surfaces, Has.Count.EqualTo(4)); + Assert.Multiple(() => + { + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(0).OuterLoop.CurveList, Has.Count.EqualTo(4)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(0).InnerLoops, Has.Count.EqualTo(2)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(1).OuterLoop.CurveList, Has.Count.EqualTo(4)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(1).InnerLoops, Has.Count.EqualTo(1)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(2).OuterLoop.CurveList, Has.Count.EqualTo(4)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(2).InnerLoops, Has.Count.EqualTo(0)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(3).OuterLoop.CurveList, Has.Count.EqualTo(4)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(3).InnerLoops, Has.Count.EqualTo(0)); + }); + Assert.Multiple(() => + { + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(0).InnerLoops.ElementAt(0).CurveList, Has.Count.EqualTo(4)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(0).InnerLoops.ElementAt(1).CurveList, Has.Count.EqualTo(4)); + Assert.That(soilProfile2D.Geometry.Surfaces.ElementAt(1).InnerLoops.ElementAt(0).CurveList, Has.Count.EqualTo(4)); + }); + } } \ No newline at end of file Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader.Tests/PersistableDataModelFactory.cs =================================================================== diff -u -r4829 -r6112 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader.Tests/PersistableDataModelFactory.cs (.../PersistableDataModelFactory.cs) (revision 4829) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader.Tests/PersistableDataModelFactory.cs (.../PersistableDataModelFactory.cs) (revision 6112) @@ -252,4 +252,167 @@ } }; } + + /// + /// |-----------------------------------------------------------------| + /// | | + /// | |---------------------| |---------------------| | + /// | | | | | | + /// | | |----------| | | | | + /// | | | | | | | | + /// | | | | | | | | + /// | | |----------| | | | | + /// | | | | | | + /// | |---------------------| |---------------------| | + /// | | + /// |-----------------------------------------------------------------| + /// + /// + /// Factory for creating a simple containing several inner loops, + /// including an inner loop inside an inner loop. + /// + /// + public static PersistableDataModel CreateSimpleDataModelWithInnerLoops() + { + return new PersistableDataModel + { + Scenarios = new List + { + new() + { + Stages = new List + { + new() + { + GeometryId = "15", + SoilLayersId = "20" + } + } + } + }, + Geometry = new List + { + new() + { + Id = "15", + Layers = new List + { + new() + { + Id = "16", + Points = new List + { + new(10, -5), + new(10, 5), + new(60, 5), + new(60, -5) + } + }, + new() + { + Id = "17", + Points = new List + { + new(20, -4), + new(20, 4), + new(30, 4), + new(30, -4) + } + }, + new() + { + Id = "18", + Points = new List + { + new(40, 4), + new(40, -4), + new(50, -4), + new(50, 4) + } + }, + new() + { + Id = "19", + Points = new List + { + new(21, 3), + new(21, -3), + new(29, -3), + new(29, 3) + } + } + } + } + }, + SoilLayers = new List + { + new() + { + Id = "20", + SoilLayers = new List + { + new() + { + LayerId = "16", + SoilId = "12" + }, + new() + { + LayerId = "17", + SoilId = "13" + }, + new() + { + LayerId = "18", + SoilId = "7" + }, + new() + { + LayerId = "19", + SoilId = "12" + } + } + } + }, + Soils = new PersistableSoilCollection + { + Soils = new List + { + new() + { + Id = "7" + }, + new() + { + Id = "12" + }, + new() + { + Id = "13" + } + } + }, + SoilVisualizations = new PersistableSoilVisualizationCollection + { + SoilVisualizations = new List + { + new() + { + SoilId = "7", + Color = ColorTranslator.FromHtml("#80657F22") + }, + new() + { + SoilId = "12", + Color = ColorTranslator.FromHtml("#80FFCC00") + }, + new() + { + SoilId = "13", + Color = ColorTranslator.FromHtml("#80BB8800") + } + } + } + }; + } } \ No newline at end of file Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader/SoilProfile2DDataModel.cs =================================================================== diff -u -r5987 -r6112 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader/SoilProfile2DDataModel.cs (.../SoilProfile2DDataModel.cs) (revision 5987) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.StixFileReader/SoilProfile2DDataModel.cs (.../SoilProfile2DDataModel.cs) (revision 6112) @@ -136,8 +136,7 @@ surface.Name = layer.Label; } - - // ToDo: Add inner loops + geometrySurface.Add(surface); return surface;