Index: DamTools/LayerOnSlopeTool/trunk/src/Deltares.LayerOnSlopeTool.StiFileCreator/StiFileCreator.cs =================================================================== diff -u -r3164 -r3170 --- DamTools/LayerOnSlopeTool/trunk/src/Deltares.LayerOnSlopeTool.StiFileCreator/StiFileCreator.cs (.../StiFileCreator.cs) (revision 3164) +++ DamTools/LayerOnSlopeTool/trunk/src/Deltares.LayerOnSlopeTool.StiFileCreator/StiFileCreator.cs (.../StiFileCreator.cs) (revision 3170) @@ -23,6 +23,8 @@ using System; using System.IO; using System.Text; +using Deltares.LayerOnSlopeTool.Data; +using CharacteristicPointType = Deltares.LayerOnSlopeTool.Io.CharacteristicPointType; namespace Deltares.LayerOnSlopeTool.StiFileCreator { @@ -36,43 +38,87 @@ ValidateInput(stiFileCreatorInput); // TODO process file - var mStabDAMInterface = new DGSMStabDAMInterface(); + var mStabDamInterface = new DGSMStabDAMInterface(); IoMStabDamDoc ioMStabDamDoc = CreateMStabDamDocFromInput(stiFileCreatorInput); tnsPrefixDamMStabDoc xmlDamMStabDoc = FillXmlDamMStabDocFromIo.FillXmlDamMStabDoc(ioMStabDamDoc); string xmlString = MStabDamXmlSerializer.SaveDamMStabDocAsXmlString(xmlDamMStabDoc); - var length = xmlString.Length; File.WriteAllText(stiFileCreatorInput.OutputFilename + ".xml", xmlString, Encoding.ASCII); - int result = mStabDAMInterface.CreateProjectFile(xmlString); + int result = mStabDamInterface.CreateProjectFile(xmlString); if (result != 0) { - string errorMessage = mStabDAMInterface.ErrorMessage(); + string errorMessage = mStabDamInterface.ErrorMessage(); throw new Exception(String.Format("Error {0} in DGSMStabDamDll.CreateProjectFile(): '{1}'", result, errorMessage)); } } private static IoMStabDamDoc CreateMStabDamDocFromInput(StiFileCreatorInput stiFileCreatorInput) { var ioMStabDamDoc = new IoMStabDamDoc(); + + // The following options are not set, so a .sti file can be generated. + // These are mandatory in the the DGSMStabDam interface, but are not important for the .sti file generation + DefineDefaultSettings(ioMStabDamDoc.MStabInput); + + // The following options are the essential for a correct creation of the .sti file ioMStabDamDoc.MStabInput.MStabFileName = stiFileCreatorInput.OutputFilename; - ioMStabDamDoc.MStabInput.Model.CalculationModel = ModelType.Bishop; - ioMStabDamDoc.MStabInput.Model.GridPosition = GridPositionType.Right; - ioMStabDamDoc.MStabInput.Model.Probabilistic = false; - ioMStabDamDoc.MStabInput.Model.SearchMethod = SearchMethodType.Grid; - ioMStabDamDoc.MStabInput.Model.ShearStrength = ShearStrengthType.CPhi; ioMStabDamDoc.MStabInput.GeometryCreationOptions.SoilGeometryType = SoilGeometryType.SoilGeometry2D; ioMStabDamDoc.MStabInput.GeometryCreationOptions.MaterialForDike = stiFileCreatorInput.DikeMaterialName; ioMStabDamDoc.MStabInput.GeometryCreationOptions.XOffsetSoilGeometry2DOrigin = stiFileCreatorInput.XOffset; ioMStabDamDoc.MStabInput.GeometryCreationOptions.SoilGeometry2DFilename = stiFileCreatorInput.InputFilename; ioMStabDamDoc.MStabInput.GeometryCreationOptions.PlLineAssignment = PlLineAssignment.NoPlLines; - ioMStabDamDoc.MStabInput.CalculationOptions.ZonesType = ZonesType.NoZones; - ioMStabDamDoc.MStabInput.TrafficLoad.DegreeOfConsolidationSpecified = false; - ioMStabDamDoc.MStabInput.SlipCircleDefinition.BishopTangentLinesDefinition = - TangentLinesDefinitionType.OnBoundaryLines; - ioMStabDamDoc.MStabInput.SlipCircleDefinition.BishopTangentLinesDefinition = - TangentLinesDefinitionType.OnBoundaryLines; - ioMStabDamDoc.MStabInput.SlipCircleDefinition.GridSizeDetermination = GridSizeDeterminationType.Automatic; + + // the Pl-Lines that are created are not important, but should be present double leftSide = stiFileCreatorInput.SurfaceLine.SurfaceLinePoints[0].XCoordinate; double rightSide = stiFileCreatorInput.SurfaceLine.SurfaceLinePoints[stiFileCreatorInput.SurfaceLine.SurfaceLinePoints.Count - 1].XCoordinate; + DefineDefaultPlLines(leftSide, rightSide, ioMStabDamDoc); + + TransferSurfaceLine(stiFileCreatorInput.SurfaceLine, ioMStabDamDoc); + + return ioMStabDamDoc; + } + + private static void DefineDefaultSettings(IoDamMStabInput mStabInput) + { + mStabInput.Model.CalculationModel = ModelType.Bishop; + mStabInput.Model.GridPosition = GridPositionType.Right; + mStabInput.Model.Probabilistic = false; + mStabInput.Model.SearchMethod = SearchMethodType.Grid; + mStabInput.Model.ShearStrength = ShearStrengthType.CPhi; + mStabInput.CalculationOptions.ZonesType = ZonesType.NoZones; + mStabInput.TrafficLoad.DegreeOfConsolidationSpecified = false; + mStabInput.SlipCircleDefinition.BishopTangentLinesDefinition = + TangentLinesDefinitionType.OnBoundaryLines; + mStabInput.SlipCircleDefinition.BishopTangentLinesDefinition = + TangentLinesDefinitionType.OnBoundaryLines; + mStabInput.SlipCircleDefinition.GridSizeDetermination = GridSizeDeterminationType.Automatic; + } + + private static void TransferSurfaceLine(SurfaceLine surfaceLine, IoMStabDamDoc ioMStabDamDoc) + { + for (int i = 0; i < surfaceLine.SurfaceLinePoints.Count; i++) + { + var surfaceLinePoint = surfaceLine.SurfaceLinePoints[i]; + ioMStabDamDoc.MStabInput.SurfaceLine.Add(new IoGeometryPoint() + { + X = surfaceLinePoint.XCoordinate, + Y = surfaceLinePoint.ZCoordinate + }); + CharacteristicPointType ioCharacteristicPointType = + ConversionHelper.ConvertDomainToIo(surfaceLinePoint.PointType); + if (ioCharacteristicPointType != CharacteristicPointType.Unknown) + { + ioMStabDamDoc.MStabInput.CharacteristicPoints.Add(new IoCharacteristicPoint() + { + X = surfaceLinePoint.XCoordinate, + Y = surfaceLinePoint.ZCoordinate, + CharacteristicPointType = ioCharacteristicPointType + }); + } + } + } + + private static void DefineDefaultPlLines(double leftSide, double rightSide, IoMStabDamDoc ioMStabDamDoc) + { double yLevel = -10; var pl1 = new IoPlLine(); pl1.Points.Add(new IoGeometryPoint() @@ -110,27 +156,6 @@ Y = yLevel }); ioMStabDamDoc.MStabInput.ExternalPlLines.Add(pl3); - for (int i = 0; i < stiFileCreatorInput.SurfaceLine.SurfaceLinePoints.Count; i++) - { - var surfaceLinePoint = stiFileCreatorInput.SurfaceLine.SurfaceLinePoints[i]; - ioMStabDamDoc.MStabInput.SurfaceLine.Add(new IoGeometryPoint() - { - X = surfaceLinePoint.XCoordinate, - Y = surfaceLinePoint.ZCoordinate - }); - CharacteristicPointType ioCharacteristicPointType = ConversionHelper.ConvertDomainToIo(surfaceLinePoint.PointType); - if (ioCharacteristicPointType != CharacteristicPointType.Unknown) - { - ioMStabDamDoc.MStabInput.CharacteristicPoints.Add(new IoCharacteristicPoint() - { - X = surfaceLinePoint.XCoordinate, - Y = surfaceLinePoint.ZCoordinate, - CharacteristicPointType = ioCharacteristicPointType - }); - } - } - - return ioMStabDamDoc; } private static void ValidateInput(StiFileCreatorInput stiFileCreatorInput)