Index: DamClients/DamUI/trunk/src/Dam/Tests/WaterBoardImporterTests.cs =================================================================== diff -u -r2168 -r2253 --- DamClients/DamUI/trunk/src/Dam/Tests/WaterBoardImporterTests.cs (.../WaterBoardImporterTests.cs) (revision 2168) +++ DamClients/DamUI/trunk/src/Dam/Tests/WaterBoardImporterTests.cs (.../WaterBoardImporterTests.cs) (revision 2253) @@ -70,7 +70,7 @@ const string soilProfileId = "10Z_275_STBI_p"; const string segmentId = "segment_dijkring10_dwp02_4"; const string surfacelineId = "dijkring10_dwp40_0"; - const string locationId = "dwp02_4"; + const string locationId = "dwp04_1"; const double cTolerance = 0.00001; const double cToleranceCoordinate = 0.00001; SetupForCsvFilesImport(); @@ -106,7 +106,7 @@ Assert.IsTrue(segment.SoilProfileProbabilities[1].SegmentFailureMechanismType.Equals(FailureMechanismSystemType.Piping)); // Check surfacelines - Assert.AreEqual(24, dike.SurfaceLines2.Count); + Assert.AreEqual(13, dike.SurfaceLines2.Count); SurfaceLine2 surfaceline = dike.SurfaceLines2.First(x => x.Name.Equals(surfacelineId)); Assert.IsTrue(surfaceline.Geometry.Points.Any()); Assert.AreEqual(0.0, surfaceline.Geometry.Points[0].X, cToleranceCoordinate); @@ -123,17 +123,17 @@ Assert.AreEqual(-0.36, point.Z, cToleranceCoordinate); // Check locations - Assert.AreEqual(24, dike.Locations.Count); + Assert.AreEqual(13, dike.Locations.Count); Location location = dike.Locations.First(x => x.Name.Equals(locationId)); - Assert.AreEqual(-0.35, location.PolderLevel, cTolerance); + Assert.AreEqual(-0.70, location.PolderLevel, cTolerance); // Assert.AreEqual(0.5, location.LevelReductionInside, cTolerance); // is default from modelparameters // Assert.AreEqual(0.6, location.LevelReductionOutside, cTolerance); // is default from modelparameters // Assert.AreEqual(0.25, location.MinimalCircleDepth, cTolerance); // is default from modelparameters // Assert.AreEqual(0.05, location.LayerHeightDeviation, cTolerance); // is default from modelparameters // Assert.AreEqual(DistributionType.LogNormal, location.LayerHeightDistribution); // is default from modelparameters - Assert.AreEqual("segment_dijkring10_dwp02_4", location.Segment.Name); - Assert.AreEqual("dijkring10_dwp02_4", location.SurfaceLine2.Name); + Assert.AreEqual("segment_dijkring10_dwp04_1", location.Segment.Name); + Assert.AreEqual("dijkring10_dwp04_1", location.SurfaceLine2.Name); dike.Validate(); } @@ -209,7 +209,7 @@ Dike dike = damProject.DamProjectData.WaterBoard.Dikes[0]; //Check locations - Assert.AreEqual(32, dike.Locations.Count); + Assert.AreEqual(17, dike.Locations.Count); } } Index: DamClients/DamUI/trunk/src/Dam/Tests/DataPluginImporterCsvTests.cs =================================================================== diff -u -r2168 -r2253 --- DamClients/DamUI/trunk/src/Dam/Tests/DataPluginImporterCsvTests.cs (.../DataPluginImporterCsvTests.cs) (revision 2168) +++ DamClients/DamUI/trunk/src/Dam/Tests/DataPluginImporterCsvTests.cs (.../DataPluginImporterCsvTests.cs) (revision 2253) @@ -28,7 +28,6 @@ using System; using System.Collections.Generic; using System.Linq; - using System.Text; using Deltares.Dam.Data; using Deltares.Dam.Data.DataPlugins; using NUnit.Framework; @@ -124,8 +123,8 @@ dataPluginImporter.ImportDataForDikeRings(new List() { dikeRingId }, null); IEnumerable surfaceLineIdList = dataPluginImporter.GetSurfaceLineIdList(dikeRingId); - Assert.AreEqual(24, surfaceLineIdList.Count()); - + Assert.AreEqual(13, surfaceLineIdList.Count()); + // Check begin- and endpoint of 1 surfaceline IList surfaceLinePoints = dataPluginImporter.GetSurfaceLinePoints(dikeRingId, surfaceline40_0Id); Assert.IsTrue(surfaceLinePoints.Count() > 0); @@ -139,7 +138,7 @@ // Check specific characteristic points of 1 surfaceline IEnumerable surfaceLineCharacteristicPoints = dataPluginImporter.GetSurfaceLineCharacteristicPoints(dikeRingId, surfaceline40_0Id); - Assert.AreEqual(24, surfaceLineIdList.Count()); + Assert.AreEqual(13, surfaceLineIdList.Count()); Assert.IsTrue(surfaceLineCharacteristicPoints.Count() > 0); DpCharacteristicPoint pointSurfaceLevelOutside = surfaceLineCharacteristicPoints.Where(x => x.Id.Equals("SurfaceLevelInside")).FirstOrDefault(); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml =================================================================== diff -u -r2245 -r2253 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml (.../Translations.xml) (revision 2245) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml (.../Translations.xml) (revision 2253) @@ -274,8 +274,9 @@ - + + Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs =================================================================== diff -u -r2190 -r2253 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 2190) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 2253) @@ -431,6 +431,52 @@ } } + private bool CheckCharacteristicPointsForCoincidingLocations(SurfaceLine2 surfaceLine2, + out CharacteristicPointType type1, out CharacteristicPointType type2) + { + var doubleFound = false; + type1 = CharacteristicPointType.None; + type2 = CharacteristicPointType.None; + var points = surfaceLine2.CharacteristicPoints; + foreach (var characteristicPoint in surfaceLine2.CharacteristicPoints) + { + if (!doubleFound) + { + // Find the coinciding points + var doublePoints = points.Where(x => + Math.Abs(x.X - characteristicPoint.X) < 1e-4 && Math.Abs(x.Y - characteristicPoint.Y) < 1e-4 && + Math.Abs(x.Z - characteristicPoint.Z) < 1e-4); + if (doublePoints.Count() > 1) + { + // if there are coinciding points, see if the types clash. Only valid coinciding points are traffic loads + // which may coincide with any other type of point + var firstType = doublePoints.First().CharacteristicPointType; + var skip = 0; + foreach (var doublePoint in doublePoints) + { + if (skip > 0 && !doubleFound && firstType != CharacteristicPointType.TrafficLoadInside && + firstType != CharacteristicPointType.TrafficLoadOutside) + { + if (doublePoint.CharacteristicPointType != CharacteristicPointType.TrafficLoadInside && + doublePoint.CharacteristicPointType != CharacteristicPointType.TrafficLoadOutside) + { + doubleFound = doublePoint.CharacteristicPointType != firstType; + if (doubleFound) + { + type1 = firstType; + type2 = doublePoint.CharacteristicPointType; + } + } + } + firstType = doublePoint.CharacteristicPointType; + skip++; + } + } + } + } + return !doubleFound; + } + private void TransferSurfaceLines(Dike dike) { if (SurfaceLineRecords == null) @@ -510,9 +556,22 @@ ErrorMessages.Add(logmessage); charCheck = false; } - // Note: validation of the surface itself can not be done here as the coordinates are real RD here and not yet transformed - if ((!charCheck)) + // Check on illegal coinciding characteristic points + if (charCheck) { + CharacteristicPointType firstType; + CharacteristicPointType secondType; + charCheck = CheckCharacteristicPointsForCoincidingLocations(surfaceLine, out firstType, out secondType); + if (!charCheck) + { + var coincidingCharPointsFoundForSurfaceError = LocalizationManager.GetTranslatedText(GetType(), "CoincidingCharPointsFoundForSurfaceError"); + LogMessage logmessage = new LogMessage(LogMessageType.Error, null, String.Format("{0} : {1} : {2} : {3}", + surfaceLine.Name, coincidingCharPointsFoundForSurfaceError, firstType.ToString(), secondType.ToString())); + ErrorMessages.Add(logmessage); + } + } + if (!charCheck) + { surfaceLine.Dispose(); dike.SurfaceLines2.Remove(surfaceLine); } Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs =================================================================== diff -u -r2250 -r2253 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs (.../DamProject.cs) (revision 2250) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamProject.cs (.../DamProject.cs) (revision 2253) @@ -684,6 +684,10 @@ fileName = Path.ChangeExtension(fileName, "damx"); string orgProjectMap = ProjectMap; ProjectFileName = fileName; + if (orgProjectMap == null) + { + orgProjectMap = ProjectMap; + } DataEventPublisher.InvokeWithoutPublishingEvents(() => { EnsureSoilmaterialsFileWithProject(fileName); Index: DamClients/DamUI/trunk/src/Dam/Tests/CsvImporterTestsNew.cs =================================================================== diff -u -r2190 -r2253 --- DamClients/DamUI/trunk/src/Dam/Tests/CsvImporterTestsNew.cs (.../CsvImporterTestsNew.cs) (revision 2190) +++ DamClients/DamUI/trunk/src/Dam/Tests/CsvImporterTestsNew.cs (.../CsvImporterTestsNew.cs) (revision 2253) @@ -1016,7 +1016,7 @@ Assert.AreEqual("HHNK1_kade", damProjectData.WaterBoard.Dikes[0].SoilProfiles[0].Layers[0].Soil.Name); Assert.AreEqual("Layer0", damProjectData.WaterBoard.Dikes[0].SoilProfiles[0].Layers[0].Name); Assert.AreEqual(30.0, damProjectData.WaterBoard.Dikes[0].SoilProfiles[0].Layers[0].TopLevel); - Assert.AreEqual(2968, damProjectData.WaterBoard.Dikes[0].SurfaceLines2.Count); + Assert.AreEqual(3, damProjectData.WaterBoard.Dikes[0].SurfaceLines2.Count); // Test import of scenarios var loc = damProjectData.WaterBoard.Dikes[0].Locations.FirstOrDefault(x => x.Name.Equals("TPL_BALGZANDKANAAL_0110")); @@ -1041,7 +1041,7 @@ p => ((p.SegmentFailureMechanismType == FailureMechanismSystemType.Piping) || (p.SegmentFailureMechanismType == null)))); Assert.AreEqual(3, pipingProbabilities.Count); - Assert.AreEqual(539, LogManager.Messages.Count); + Assert.AreEqual(3530, LogManager.Messages.Count); // Check time needed to read var maxTime = TimeSpan.FromSeconds(80); // This is the time on the buildserver; local time was 25 seconds