Index: Core/Components/src/Core.Components.Gis.IO/Readers/PolylineShapeFileReader.cs
===================================================================
diff -u -rcff3301f201c4e1d4691334cd3af48698f1b0d41 -r55e8451bb0b97020c9dd33741f4120d3f2162713
--- Core/Components/src/Core.Components.Gis.IO/Readers/PolylineShapeFileReader.cs (.../PolylineShapeFileReader.cs) (revision cff3301f201c4e1d4691334cd3af48698f1b0d41)
+++ Core/Components/src/Core.Components.Gis.IO/Readers/PolylineShapeFileReader.cs (.../PolylineShapeFileReader.cs) (revision 55e8451bb0b97020c9dd33741f4120d3f2162713)
@@ -89,7 +89,9 @@
try
{
IFeature lineFeature = GetFeature(readIndex);
- return ConvertSingleLineFeatureToMapLineData(lineFeature, !string.IsNullOrWhiteSpace(name) ? name : GisIOResources.PolylineShapeFileReader_ReadLine_Line);
+ return ConvertSingleLineFeatureToMapLineData(lineFeature, !string.IsNullOrWhiteSpace(name)
+ ? name
+ : GisIOResources.PolylineShapeFileReader_ReadLine_Line);
}
finally
{
Index: Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismBase.cs
===================================================================
diff -u -r11f0867b39150ae5fac83dc178a89fee46d27611 -r55e8451bb0b97020c9dd33741f4120d3f2162713
--- Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismBase.cs (.../FailureMechanismBase.cs) (revision 11f0867b39150ae5fac83dc178a89fee46d27611)
+++ Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismBase.cs (.../FailureMechanismBase.cs) (revision 55e8451bb0b97020c9dd33741f4120d3f2162713)
@@ -130,20 +130,15 @@
///
/// Inserts the section to while maintaining connectivity
- /// order (neighboring have same start and
- /// end points).
+ /// order (neighboring have same end points).
///
/// The new section.
/// When cannot
/// be connected to elements already defined in .
private void InsertSectionWhileMaintainingConnectivityOrder(FailureMechanismSection sectionToInsert)
{
- if (sections[0].GetStart().Equals(sectionToInsert.GetLast()))
+ if (sections[sections.Count - 1].GetLast().Equals(sectionToInsert.GetStart()))
{
- sections.Insert(0, sectionToInsert);
- }
- else if (sections[sections.Count - 1].GetLast().Equals(sectionToInsert.GetStart()))
- {
sections.Add(sectionToInsert);
}
else
Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismBaseTest.cs
===================================================================
diff -u -r11f0867b39150ae5fac83dc178a89fee46d27611 -r55e8451bb0b97020c9dd33741f4120d3f2162713
--- Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismBaseTest.cs (.../FailureMechanismBaseTest.cs) (revision 11f0867b39150ae5fac83dc178a89fee46d27611)
+++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismBaseTest.cs (.../FailureMechanismBaseTest.cs) (revision 55e8451bb0b97020c9dd33741f4120d3f2162713)
@@ -166,7 +166,7 @@
}
[Test]
- public void AddSection_SecondSectionEndConnectingToStartOfFirst_Section2InsertedBeforeSection1()
+ public void AddSection_SecondSectionStartConnectingToEndOfFirst_Section2AddedAfterSection1()
{
// Setup
var failureMechanism = new SimpleFailureMechanismBase();
@@ -176,13 +176,13 @@
var section1 = new FailureMechanismSection("A", new[]
{
- new Point2D(matchingX, matchingY),
- new Point2D(3, 4)
+ new Point2D(3, 4),
+ new Point2D(matchingX, matchingY)
});
var section2 = new FailureMechanismSection("B", new[]
{
- new Point2D(-2, -1),
- new Point2D(matchingX, matchingY)
+ new Point2D(matchingX, matchingY),
+ new Point2D(-2, -1)
});
// Call
@@ -192,13 +192,13 @@
// Assert
CollectionAssert.AreEqual(new[]
{
- section2,
- section1
+ section1,
+ section2
}, failureMechanism.Sections);
}
[Test]
- public void AddSection_SecondSectionStartConnectingToEndOfFirst_Section2AddedAfterSection1()
+ public void AddSection_SecondSectionEndConnectingToStartOfFirst_ThrowArgumentException()
{
// Setup
var failureMechanism = new SimpleFailureMechanismBase();
@@ -208,25 +208,23 @@
var section1 = new FailureMechanismSection("A", new[]
{
- new Point2D(3, 4),
- new Point2D(matchingX, matchingY)
+ new Point2D(matchingX, matchingY),
+ new Point2D(3, 4)
});
var section2 = new FailureMechanismSection("B", new[]
{
- new Point2D(matchingX, matchingY),
- new Point2D(-2, -1)
+ new Point2D(-2, -1),
+ new Point2D(matchingX, matchingY)
});
- // Call
failureMechanism.AddSection(section1);
- failureMechanism.AddSection(section2);
+ // Call
+ TestDelegate call = () => failureMechanism.AddSection(section2);
+
// Assert
- CollectionAssert.AreEqual(new[]
- {
- section1,
- section2
- }, failureMechanism.Sections);
+ const string expectedMessage = "Vak 'B' sluit niet aan op de al gedefinieerde vakken van het toetsspoor.";
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage);
}
[Test]
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.dbf
===================================================================
diff -u
Binary files differ
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.prj
===================================================================
diff -u
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.prj (revision 0)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.prj (revision 55e8451bb0b97020c9dd33741f4120d3f2162713)
@@ -0,0 +1 @@
+PROJCS["Amersfoort_RD_New",GEOGCS["GCS_Amersfoort",DATUM["D_Amersfoort",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Double_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",155000],PARAMETER["false_northing",463000],UNIT["Meter",1]]
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.qpj
===================================================================
diff -u
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.qpj (revision 0)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.qpj (revision 55e8451bb0b97020c9dd33741f4120d3f2162713)
@@ -0,0 +1 @@
+PROJCS["Amersfoort / RD New",GEOGCS["Amersfoort",DATUM["Amersfoort",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[565.4171,50.3319,465.5524,-0.398957,0.343988,-1.87740,4.0725],AUTHORITY["EPSG","6289"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4289"]],PROJECTION["Oblique_Stereographic"],PARAMETER["latitude_of_origin",52.15616055555555],PARAMETER["central_meridian",5.38763888888889],PARAMETER["scale_factor",0.9999079],PARAMETER["false_easting",155000],PARAMETER["false_northing",463000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","28992"]]
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.shp
===================================================================
diff -u
Binary files differ
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/FailureMechanismSections/traject_19-1_vakken.shx
===================================================================
diff -u
Binary files differ
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLine/traject_19-1.dbf
===================================================================
diff -u
Binary files differ
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLine/traject_19-1.shp
===================================================================
diff -u
Binary files differ
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/ReferenceLine/traject_19-1.shx
===================================================================
diff -u
Binary files differ
Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/FailureMechanismSectionsImporter.cs
===================================================================
diff -u -rb9851915fb250e14a7608ae243fe94b6ab8d8abf -r55e8451bb0b97020c9dd33741f4120d3f2162713
--- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/FailureMechanismSectionsImporter.cs (.../FailureMechanismSectionsImporter.cs) (revision b9851915fb250e14a7608ae243fe94b6ab8d8abf)
+++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/FailureMechanismSectionsImporter.cs (.../FailureMechanismSectionsImporter.cs) (revision 55e8451bb0b97020c9dd33741f4120d3f2162713)
@@ -243,7 +243,7 @@
private static IEnumerable SnapReadSectionsToReferenceLine(IEnumerable readSections, ReferenceLine referenceLine)
{
- IList orderedReadSections = OrderSections(readSections);
+ IList orderedReadSections = OrderSections(readSections, referenceLine);
double[] orderedSectionLengths = GetReferenceLineCutoffLengths(referenceLine, orderedReadSections);
@@ -252,21 +252,42 @@
return CreateFailureMechanismSectionsSnappedOnReferenceLine(orderedReadSections, splitResults);
}
- private static IList OrderSections(IEnumerable unorderedSections)
+ private static IList OrderSections(IEnumerable unorderedSections, ReferenceLine referenceLine)
{
List sourceList = unorderedSections.ToList();
+ var startSection = GetStart(sourceList, referenceLine);
+
var resultList = new List(sourceList.Count)
{
- sourceList[0]
+ startSection
};
+ sourceList.Remove(startSection);
GrowTowardsEnd(resultList, sourceList);
- GrowTowardsStart(resultList, sourceList);
return resultList;
}
+ private static FailureMechanismSection GetStart(List sourceList, ReferenceLine referenceLine)
+ {
+ var shortestDistance = double.MaxValue;
+ FailureMechanismSection closestSectionToReferenceLineStart = null;
+ Dictionary sectionReferenceLineDistances = sourceList.ToDictionary(s => referenceLine.Points.First().GetEuclideanDistanceTo(s.GetStart()), s => s);
+
+ foreach (var sectionReferenceLineDistance in sectionReferenceLineDistances)
+ {
+ double distance = sectionReferenceLineDistance.Key;
+ if (distance < shortestDistance && distance <= snappingTolerance)
+ {
+ shortestDistance = sectionReferenceLineDistance.Key;
+ closestSectionToReferenceLineStart = sectionReferenceLineDistance.Value;
+ }
+ }
+
+ return closestSectionToReferenceLineStart;
+ }
+
private static void GrowTowardsEnd(List resultList, List sourceList)
{
bool doneGrowingToEnd = false;
@@ -298,37 +319,6 @@
}
}
- private static void GrowTowardsStart(List resultList, List sourceList)
- {
- bool doneGrowingToStart = false;
- while (!doneGrowingToStart)
- {
- Point2D startPointToConnect = resultList[0].GetStart();
-
- var shortestDistance = double.MaxValue;
- FailureMechanismSection closestSectionToConnectWith = null;
- Dictionary sectionConnectionDistances = sourceList.ToDictionary(s => startPointToConnect.GetEuclideanDistanceTo(s.GetLast()), s => s);
- foreach (var sectionConnectionDistance in sectionConnectionDistances)
- {
- double distance = sectionConnectionDistance.Key;
- if (distance < shortestDistance && distance <= snappingTolerance)
- {
- shortestDistance = sectionConnectionDistance.Key;
- closestSectionToConnectWith = sectionConnectionDistance.Value;
- }
- }
- if (closestSectionToConnectWith == null)
- {
- doneGrowingToStart = true;
- }
- else
- {
- resultList.Insert(0, closestSectionToConnectWith);
- sourceList.Remove(closestSectionToConnectWith);
- }
- }
- }
-
private static double[] GetReferenceLineCutoffLengths(ReferenceLine referenceLine, IList orderedReadSections)
{
double[] orderedSectionLengths = orderedReadSections.Select(GetSectionLength).ToArray();
Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/FailureMechanismSectionsImporterTest.cs
===================================================================
diff -u -r355010200cb0321da0786bc1170c396c64e2845e -r55e8451bb0b97020c9dd33741f4120d3f2162713
--- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/FailureMechanismSectionsImporterTest.cs (.../FailureMechanismSectionsImporterTest.cs) (revision 355010200cb0321da0786bc1170c396c64e2845e)
+++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/FailureMechanismSectionsImporterTest.cs (.../FailureMechanismSectionsImporterTest.cs) (revision 55e8451bb0b97020c9dd33741f4120d3f2162713)
@@ -90,13 +90,15 @@
}
[Test]
- public void Import_ValidFileCorrespondingToReferenceLineAndNoSectionImportedYet_ImportSections()
+ [TestCase("traject_1-1.shp", "traject_1-1_vakken.shp", 62)]
+ [TestCase("traject_19-1.shp", "traject_19-1_vakken.shp", 17)]
+ public void Import_ValidFileCorrespondingToReferenceLineAndNoSectionImportedYet_ImportSections(string referenceLineFileName, string sectionsFileName, int sectionCount)
{
// Setup
var referenceLineFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO,
- Path.Combine("ReferenceLine", "traject_1-1.shp"));
+ Path.Combine("ReferenceLine", referenceLineFileName));
var sectionsFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO,
- Path.Combine("FailureMechanismSections", "traject_1-1_vakken.shp"));
+ Path.Combine("FailureMechanismSections", sectionsFileName));
var mocks = new MockRepository();
var assessmentSection = mocks.Stub();
@@ -116,7 +118,7 @@
Assert.IsTrue(importSuccessful);
FailureMechanismSection[] sections = failureMechanism.Sections.ToArray();
- Assert.AreEqual(62, sections.Length);
+ Assert.AreEqual(sectionCount, sections.Length);
AssertSectionsAreValidForReferenceLine(sections, assessmentSection.ReferenceLine);
mocks.VerifyAll();
}