//----------------------------------------------------------------------- // // Copyright (c) 2011 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 21-11-2011 // Create Geometry2DData object from geometry2D file //----------------------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; using Deltares.Dam.Data.Assemblers; using Deltares.Geometry; using Deltares.Geotechnics; using Deltares.Geotechnics.SurfaceLines; namespace Deltares.Dam.Data { using System; using System.Text; /// /// Exception class for Geometry2DTo1DConverter /// public class Geometry2DDataCreatorException : ApplicationException { public Geometry2DDataCreatorException(string message) : base(message) { } } /// /// Create Geometry2DData object from geometry2D file /// public class Geometry2DDataCreator { /// /// Creates the geometry2 d data from geometry 2d. /// /// The filename. /// public static Geometry2DData CreateGeometry2DDataFromGeometry2D(string filename) { var geometry2DSectionAssembler = new DAMMStabGeometry2DSectionAssembler(); var geometry2DSectionParameters = new Geometry2DSectionParameters(); geometry2DSectionParameters.SoilGeometry2DName = System.IO.Path.GetFullPath(filename); geometry2DSectionParameters.XCoordinateSection = 0.0; // this parameter is not used XDocument doc = geometry2DSectionAssembler.CreateDataTransferObject(geometry2DSectionParameters); String LXMLInput = doc.ToString(); doc.Save("Geometry2DDataInput.xml"); StringBuilder LXMLOutput = null; var stabilityServiceAgent = new StabilityServiceAgent(); stabilityServiceAgent.CreateGeometry2DDataFromGeometry2D(LXMLInput, ref LXMLOutput); XDocument docOut = XDocument.Parse(LXMLOutput.ToString()); docOut.Save("Geometry2DDataOutput.xml"); var geometry2DDataAssembler = new DAMMStabGeometry2DDataAssembler(); Geometry2DData geometry2DData = geometry2DDataAssembler.CreateOutputObject(docOut); return geometry2DData; } /// /// Creates the geometry2 d data. /// /// The location. /// The soil profile probability. /// The surface line. /// The geometry directory. /// public static Geometry2DData CreateGeometry2DData(Location location, SoilGeometryProbability soilProfileProbability, SurfaceLine2 surfaceLine, String geometryDirectory) { string geometryFilename; CreateGeometryFile(location, soilProfileProbability, surfaceLine, geometryDirectory, out geometryFilename); return CreateGeometry2DDataFromGeometry2D(geometryFilename); } /// /// Creates the geometry file. /// /// The location. /// The soil profile probability. /// The surface line. /// The geometry directory. /// The geometry filename. /// Geometry file (sti) is not created. private static void CreateGeometryFile(Location location, SoilGeometryProbability soilProfileProbability, SurfaceLine2 surfaceLine, String geometryDirectory, out String geometryFilename) { const int iterationIndex = -1; geometryFilename = StabilityCalculator.DetermineCalculationFilename(location.Name, "PL", soilProfileProbability.SoilGeometryName, iterationIndex); geometryFilename = geometryFilename + ".sti"; geometryFilename = Path.Combine(geometryDirectory, geometryFilename); string soilgeometry2DFilename = null; if (soilProfileProbability.SoilGeometry2DName != null) { soilgeometry2DFilename = Path.GetFullPath(Path.Combine(DamProject.ProjectMap, Path.Combine(location.MapForSoilGeometries2D, soilProfileProbability.SoilGeometry2DName))); } var soilGeometry = new SoilGeometry(soilProfileProbability.SoilProfile, soilProfileProbability.SoilGeometry2DName); var failureMechanismeParamatersMStab = new FailureMechanismeParamatersMStab(); PLLines plLines = new PLLines(); var plLine = new PLLine(); IList geometryPoints = location.LocalXZSurfaceLine2.Geometry.Points; plLine.Points.Add(new PLLinePoint(geometryPoints.First().X, geometryPoints.First().Z)); plLine.Points.Add(new PLLinePoint(geometryPoints.Last().X, geometryPoints.Last().Z)); plLines.Lines[PLLineType.PL1] = plLine; plLines.Lines[PLLineType.PL2] = plLine; plLines.Lines[PLLineType.PL3] = plLine; plLines.Lines[PLLineType.PL4] = plLine; failureMechanismeParamatersMStab.Location = location; failureMechanismeParamatersMStab.PLLines = plLines; failureMechanismeParamatersMStab.SoilProfile = soilGeometry.SoilProfile; failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.SoilGeometryType = soilGeometry.SoilGeometryType; failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.SoilGeometry2DFilename = soilgeometry2DFilename; failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.MaterialForDike =location.DikeEmbankmentMaterial; failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.MaterialForShoulder = location.ShoulderEmbankmentMaterial; failureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.XOffsetSoilGeometry2DOrigin = -location.XSoilGeometry2DOrigin; failureMechanismeParamatersMStab.MStabParameters.SoilDatabaseName = location.SoildatabaseName; failureMechanismeParamatersMStab.MStabParameters.Model = MStabModelType.Bishop; failureMechanismeParamatersMStab.MStabParameters.ProjectFileName = geometryFilename; failureMechanismeParamatersMStab.SurfaceLine = location.LocalXZSurfaceLine2; DamMStabAssembler assembler = new DamMStabAssembler(); XDocument mstabXML = assembler.CreateDataTransferObject(failureMechanismeParamatersMStab); mstabXML.Save(geometryFilename + ".xml"); StabilityServiceAgent stabilityServiceAgent = new StabilityServiceAgent(); stabilityServiceAgent.CreateProjectFile(mstabXML.ToString()); if (!File.Exists(geometryFilename)) { throw new DamFailureMechanismeCalculatorException("Geometry file (sti) is not created."); } } } }