Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/SoilProfile2DHelper.cs =================================================================== diff -u -r5937 -r5940 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/SoilProfile2DHelper.cs (.../SoilProfile2DHelper.cs) (revision 5937) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Common/SoilProfile2DHelper.cs (.../SoilProfile2DHelper.cs) (revision 5940) @@ -271,19 +271,17 @@ { SoilProfile1D crossSection = soilProfile.GetSoilProfile1D(xCoordinate); int count = layerType == LayerType.InBetweenAquiferCluster ? crossSection.GetInBetweenAquiferClusters.Count : 1; + for (var i = 0; i < count; i++) { - for (var i = 0; i < count; i++) + if (HasAquiferAVerticalPartAtGivenX(layerType, xCoordinate, soilProfile, i)) { - if (HasAquiferAVerticalPartAtGivenX(layerType, xCoordinate, soilProfile, i)) - { - xCoordinatesAll.Add(xCoordinate - deviationX); - xCoordinatesAll.Add(xCoordinate + deviationX); - } - else - { - xCoordinatesAll.Add(xCoordinate); - } + xCoordinatesAll.Add(xCoordinate - deviationX); + xCoordinatesAll.Add(xCoordinate + deviationX); } + else + { + xCoordinatesAll.Add(xCoordinate); + } } } return xCoordinatesAll.ToArray(); @@ -296,6 +294,17 @@ return connectedPolyLinesSameX; } + private static bool CanPolyLinesBeConnected(PolyLineConnectionType connectionType, GeometryPointString currentPolyLine, GeometryPointString nextPolyLine, List polyLines) + { + if (connectionType == PolyLineConnectionType.SamePoint) + { + return currentPolyLine.CalcPoints.Last().LocationEquals(nextPolyLine.CalcPoints.First()); + } + bool isPolyLineUnique = polyLines.FindAll(p => p.CalcPoints.First().X.IsNearEqual(nextPolyLine.CalcPoints.First().X, toleranceAlmostEqual)).Count == 1; + return currentPolyLine.CalcPoints.Last().X.IsNearEqual(nextPolyLine.CalcPoints.First().X, toleranceAlmostEqual) && isPolyLineUnique; + + } + /// /// Connect the poly-lines in the list when possible. Two types of connection are available: /// - SamePoint = the end point of a poly-line coincides with the start point of another poly-line @@ -327,28 +336,14 @@ { if (usedPolyLines.Contains(nextPolyLine)) continue; - - if (connectionType == PolyLineConnectionType.SamePoint) + + if (CanPolyLinesBeConnected(connectionType, currentPolyLine, nextPolyLine, polyLines)) { - if (currentPolyLine.CalcPoints.Last().LocationEquals(nextPolyLine.CalcPoints.First())) - { - currentPolyLine.CalcPoints.AddRange(nextPolyLine.CalcPoints.Skip(1)); - usedPolyLines.Add(nextPolyLine); - isConnectionFound = true; - break; - } + currentPolyLine.CalcPoints.AddRange(connectionType == PolyLineConnectionType.SamePoint ? nextPolyLine.CalcPoints.Skip(1) : nextPolyLine.CalcPoints); + usedPolyLines.Add(nextPolyLine); + isConnectionFound = true; + break; } - else - { - bool isPolyLineUnique = polyLines.FindAll(p => p.CalcPoints.First().X.IsNearEqual(nextPolyLine.CalcPoints.First().X, toleranceAlmostEqual)).Count == 1; - if (currentPolyLine.CalcPoints.Last().X.IsNearEqual(nextPolyLine.CalcPoints.First().X, toleranceAlmostEqual) && isPolyLineUnique) - { - currentPolyLine.CalcPoints.AddRange(nextPolyLine.CalcPoints); - usedPolyLines.Add(nextPolyLine); - isConnectionFound = true; - break; - } - } } } while (isConnectionFound);