//----------------------------------------------------------------------- // // Copyright (c) 2011 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 21-11-2011 // xml file reader (Geometry2DData) for DGSMStabDam.dll //----------------------------------------------------------------------- using Deltares.Geotechnics; using Deltares.Geotechnics.Soils; using Deltares.Standard.IO.DtoAssembler; namespace Deltares.Dam.Data.Assemblers { using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using Deltares.Standard; /// /// /// public class DAMMStabGeometry2DDataAssembler : DtoDocumentAssembler { #region Constant declarations #endregion /// /// Holds the xml element name /// public const string XmlElementNameGeometry2DData = "Geometry2DData"; /// /// Holds the Geometry2DData xml element and attribute names /// public const string XmlElementGeometry2DData = "Geometry2DData"; public const string XmlElementBoundary = "Boundary"; public const string XmlAttributeBoundaryIndex = "BoundaryIndex"; public const string XmlAttributeSoilname = "Soilname"; public const string XmlElementSurfacePoint = "SurfacePoint"; public const string XmlAttributeXCoord = "XCoord"; public const string XmlAttributeYCoord = "YCoord"; /// /// /// public DAMMStabGeometry2DDataAssembler() : base(DamMStabAssembler.XmlElementName, DamMStabAssembler.XmlElementNamespace, DamMStabAssembler.XsdEmbeddedResourcePath) { } public override XDocument CreateDataTransferObject(Geometry2DData geometry2DData) { var doc = base.CreateDataTransferObject(geometry2DData); XNamespace tns = ElementNamespace; XNamespace tnsb = XmlElementNameGeometry2DData; // Geometry2DData XElement geometry2DDataElement = GetGeometry2DDataElement(geometry2DData, tns); doc.Root.Add(geometry2DDataElement); return doc; } /// /// Assembles the GeometryCreationOptions element /// /// /// /// private static XElement GetGeometry2DDataElement(Geometry2DData geometry2DData, XNamespace tnsb) { return null; } // Assembles the layer elements for the profile private static void GetProfileLayersElement(SoilProfile1D profile, XNamespace tnsa, XElement layersElement) { foreach (var layer in profile.Layers) { if (layer.Id == null) layer.Id = profile.GetNewUniqueLayerId(); var layerElement = new XElement(tnsa + DamMStabAssembler.XmlElementLayer); layersElement.Add(layerElement); layerElement.Add(new XAttribute(DamMStabAssembler.XmlAttributeID, String.Format("{0}", layer.Id))); layerElement.Add(new XAttribute(DamMStabAssembler.XmlAttributeSoilID, layer.Soil.Name)); layerElement.Add(new XAttribute(DamMStabAssembler.XmlAttributeTopLevel, layer.TopLevel)); } } public override Geometry2DData CreateOutputObject(XDocument dtoDocument) { var geometry2DData = new Geometry2DData(); // Get the dto XElement dto = (from x in dtoDocument.Descendants() where x.Name.LocalName == DAMMStabGeometry2DDataAssembler.XmlElementGeometry2DData select x).FirstOrDefault(); IEnumerable layerCollection = (from x in dtoDocument.Descendants() where x.Name.LocalName == DAMMStabGeometry2DDataAssembler.XmlElementBoundary select x); foreach (XElement layerElement in layerCollection) { var geometry2DLayer = new Geometry2DLayer(); if (layerElement.Attribute(DAMMStabGeometry2DDataAssembler.XmlAttributeSoilname) != null) { geometry2DLayer.soilName = layerElement.AttributeAs(DAMMStabGeometry2DDataAssembler.XmlAttributeSoilname); } else { geometry2DLayer.soilName = ""; } IEnumerable surfacePointCollection = (from x in layerElement.Descendants() where x.Name.LocalName == DAMMStabGeometry2DDataAssembler.XmlElementSurfacePoint select x); var boundaryLine = new Geometry2DBoundaryLine(); foreach (XElement surfacePointElement in surfacePointCollection) { var point = new Geometry2DPoint(); point.X = surfacePointElement.AttributeAs(DAMMStabGeometry2DDataAssembler.XmlAttributeXCoord); point.Z = surfacePointElement.AttributeAs(DAMMStabGeometry2DDataAssembler.XmlAttributeYCoord); boundaryLine.Points.Add(point); } geometry2DLayer.boundaryLine = boundaryLine; geometry2DData.AddLayer(geometry2DLayer); } return geometry2DData; } } }