// Copyright (C) Stichting Deltares 2020. All rights reserved. // // This file is part of the Dam Engine. // // The Dam Engine is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System.Collections.Generic; using System.Data; namespace Deltares.LayerOnSlopeTool.Io { /// Class for transferring Io data to Xml data public static class FillXmlDamMStabDocFromIo { /// Fills the XML dam m stab document. /// The io dam m stab dam document. /// public static tnsPrefixDamMStabDoc FillXmlDamMStabDoc(IoMStabDamDoc ioMStabDamDoc) { var xmlDamMStabDoc = new tnsPrefixDamMStabDoc(); xmlDamMStabDoc.tnsPrefixDamMStabInput = new tnsPrefixDamMStabDocTnsPrefixDamMStabInput(); // Transfer attributes xmlDamMStabDoc.tnsPrefixDamMStabInput.MStabFileName = ioMStabDamDoc.MStabInput.MStabFileName; xmlDamMStabDoc.tnsPrefixDamMStabInput.SoilDBName = ioMStabDamDoc.MStabInput.SoilDbName; xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixGeometryCreationOptions = new tnsbPrefixGeometryCreationOptions(); TransferGeometryCreationOptions(ioMStabDamDoc.MStabInput.GeometryCreationOptions, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixGeometryCreationOptions); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixModel = new tnsbPrefixModel(); TransferModel(ioMStabDamDoc.MStabInput.Model, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixModel); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixSurfaceLine = new tnsbPrefixSurfaceLineTnsbPrefixSurfacePoint[ioMStabDamDoc.MStabInput.SurfaceLine.Count]; TransferSurfaceline(ioMStabDamDoc.MStabInput.SurfaceLine, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixSurfaceLine); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixCharacteristicPoints = new tnsbPrefixCharacteristicPointsTnsbPrefixCharacteristicPoint[ioMStabDamDoc.MStabInput.CharacteristicPoints.Count]; TransferCharacteristicPoints(ioMStabDamDoc.MStabInput.CharacteristicPoints, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixCharacteristicPoints); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixExternalPLLines = new tnsbPrefixExternalPLLinesTnsbPrefixPLLine[ioMStabDamDoc.MStabInput.ExternalPlLines.Count]; TransferPlLines(ioMStabDamDoc.MStabInput.ExternalPlLines, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixExternalPLLines); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixCalculationOptions = new tnsbPrefixCalculationOptions(); TransferCalculationOptions(ioMStabDamDoc.MStabInput.CalculationOptions, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixCalculationOptions); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixTrafficLoad = new tnsbPrefixTrafficLoad(); TransferTrafficLoad(ioMStabDamDoc.MStabInput.TrafficLoad, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixTrafficLoad); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixHorizontalBalanceArea = new tnsbPrefixHorizontalBalanceArea(); TransferHorizontalBalanceArea(ioMStabDamDoc.MStabInput.HorizontalBalanceArea, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixHorizontalBalanceArea); xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixSlipCircleDefinition = new tnsbPrefixSlipCircleDefinition(); TransferSlipCircleDefinition(ioMStabDamDoc.MStabInput.SlipCircleDefinition, xmlDamMStabDoc.tnsPrefixDamMStabInput.tnsbPrefixSlipCircleDefinition); return xmlDamMStabDoc; } private static void TransferSlipCircleDefinition(IoSlipCircleDefinition ioSlipCircleDefinition, tnsbPrefixSlipCircleDefinition xmlSlipCircleDefinition) { xmlSlipCircleDefinition.GridSizeDetermination = ioSlipCircleDefinition.GridSizeDetermination; xmlSlipCircleDefinition.BishopTangentLinesDefinition = ioSlipCircleDefinition.BishopTangentLinesDefinition; xmlSlipCircleDefinition.UpliftVanTangentLinesDefinition = ioSlipCircleDefinition.UpliftVanTangentLinesDefinition; } private static void TransferHorizontalBalanceArea(IoHorizontalBalanceArea ioHorizontalBalanceArea, tnsbPrefixHorizontalBalanceArea xmlHorizontalBalanceArea) { xmlHorizontalBalanceArea.XLeft = ioHorizontalBalanceArea.XLeft; xmlHorizontalBalanceArea.XRight = ioHorizontalBalanceArea.XRight; xmlHorizontalBalanceArea.YTop = ioHorizontalBalanceArea.YTop; xmlHorizontalBalanceArea.YBottom = ioHorizontalBalanceArea.YBottom; xmlHorizontalBalanceArea.PlaneCount = ioHorizontalBalanceArea.PlaneCount; } private static void TransferTrafficLoad(IoTrafficLoad ioTrafficLoad, tnsbPrefixTrafficLoad xmlTrafficLoad) { xmlTrafficLoad.XCoordinateAtRiver = ioTrafficLoad.XCoordinateAtRiver; xmlTrafficLoad.XCoordinateAtPolder = ioTrafficLoad.XCoordinateAtPolder; xmlTrafficLoad.DegreeOfConsolidationSpecified1 = ioTrafficLoad.DegreeOfConsolidationSpecified; xmlTrafficLoad.DegreeOfConsolidation = ioTrafficLoad.DegreeOfConsolidation; xmlTrafficLoad.Load = ioTrafficLoad.Load; } private static void TransferCalculationOptions(IoCalculationOptions iocalculationOptions, tnsbPrefixCalculationOptions xmlCalculationOptions) { xmlCalculationOptions.MinimalCircleDepth = iocalculationOptions.MinimalCircleDepth; xmlCalculationOptions.ZonesType = iocalculationOptions.ZonesType; } private static void TransferPlLines(List ioPlLines, tnsbPrefixExternalPLLinesTnsbPrefixPLLine[] xmlPlLines) { for (int plLineIndex = 0; plLineIndex < ioPlLines.Count; plLineIndex++) { xmlPlLines[plLineIndex] = new tnsbPrefixExternalPLLinesTnsbPrefixPLLine(); var ioPlLine = ioPlLines[plLineIndex]; xmlPlLines[plLineIndex].BoundaryLayer = ioPlLine.BoundaryLayer; xmlPlLines[plLineIndex].IsPhreatic = ioPlLine.IsPhreatic; xmlPlLines[plLineIndex].tnsbPrefixPLPoint = new tnsbPrefixExternalPLLinesTnsbPrefixPLLineTnsbPrefixPLPoint[ioPlLine.Points.Count]; for (int pointIndex = 0; pointIndex < ioPlLine.Points.Count; pointIndex++) { xmlPlLines[plLineIndex].tnsbPrefixPLPoint[pointIndex] = new tnsbPrefixExternalPLLinesTnsbPrefixPLLineTnsbPrefixPLPoint() { XCoord = ioPlLine.Points[pointIndex].X, YCoord = ioPlLine.Points[pointIndex].Y }; } } } private static void TransferCharacteristicPoints(List ioCharacteristicPoints, tnsbPrefixCharacteristicPointsTnsbPrefixCharacteristicPoint[] xmlCharacteristicPoints) { for (int i = 0; i < ioCharacteristicPoints.Count; i++) { xmlCharacteristicPoints[i] = new tnsbPrefixCharacteristicPointsTnsbPrefixCharacteristicPoint() { XCoord = ioCharacteristicPoints[i].X, YCoord = ioCharacteristicPoints[i].Y, CharacteristicPointType = ioCharacteristicPoints[i].CharacteristicPointType }; } } private static void TransferSurfaceline(List ioSurfaceLine, tnsbPrefixSurfaceLineTnsbPrefixSurfacePoint[] xmlSurfaceLine) { for (int i = 0; i < ioSurfaceLine.Count; i++) { xmlSurfaceLine[i] = new tnsbPrefixSurfaceLineTnsbPrefixSurfacePoint() { XCoord = ioSurfaceLine[i].X, YCoord = ioSurfaceLine[i].Y }; } } private static void TransferModel(IoModel ioModel, tnsbPrefixModel xmlModel) { xmlModel.CalculationModel = ioModel.CalculationModel; xmlModel.GridPosition = ioModel.GridPosition; xmlModel.Probabilistic = ioModel.Probabilistic; xmlModel.SearchMethod = ioModel.SearchMethod; xmlModel.ShearStrength = ioModel.ShearStrength; } private static void TransferGeometryCreationOptions(IoGeometryCreationOptions ioGeometryCreationOptions, tnsbPrefixGeometryCreationOptions xmlGeometryCreationOptions) { xmlGeometryCreationOptions.MaterialForDike = ioGeometryCreationOptions.MaterialForDike; xmlGeometryCreationOptions.SoilGeometry2DFilename = ioGeometryCreationOptions.SoilGeometry2DFilename; xmlGeometryCreationOptions.SoilGeometryType = ioGeometryCreationOptions.SoilGeometryType; xmlGeometryCreationOptions.XOffsetSoilGeometry2DOrigin = ioGeometryCreationOptions.XOffsetSoilGeometry2DOrigin; xmlGeometryCreationOptions.PenetrationLength = ioGeometryCreationOptions.PenetrationLength; xmlGeometryCreationOptions.PLLineAssignment = ioGeometryCreationOptions.PlLineAssignment; } } }