/// <summary> /// Reads the <see cref="StochasticSoilModelEntity"/> and use the information to construct /// a <see cref="PipingStochasticSoilModel"/>. /// </summary> /// <param name="entity">The <see cref="StochasticSoilModelEntity"/> to create <see cref="PipingStochasticSoilModel"/> for.</param> /// <param name="collector">The object keeping track of read operations.</param> /// <returns>A new <see cref="PipingStochasticSoilModel"/>.</returns> /// <exception cref="ArgumentNullException">Thrown when any input parameter is <c>null</c>.</exception> /// <exception cref="ArgumentException">Thrown when <see cref="StochasticSoilModelEntity.StochasticSoilModelSegmentPointXml"/> /// of <paramref name="entity"/> is empty.</exception> public static PipingStochasticSoilModel ReadAsPipingStochasticSoilModel(this StochasticSoilModelEntity entity, ReadConversionCollector collector) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (collector == null) { throw new ArgumentNullException(nameof(collector)); } if (collector.ContainsPipingStochasticSoilModel(entity)) { return(collector.GetPipingStochasticSoilModel(entity)); } Point2D[] geometry = ReadSegmentPoints(entity.StochasticSoilModelSegmentPointXml).ToArray(); PipingStochasticSoilProfile[] stochasticSoilProfiles = ReadPipingStochasticSoilProfiles(entity, collector).ToArray(); var model = new PipingStochasticSoilModel(entity.Name, geometry, stochasticSoilProfiles); collector.Read(entity, model); return(model); }