/// <summary> /// Gets <see cref="LayerWithSoil"/> recursively. /// </summary> /// <param name="soilLayers">The soil layers to obtain the <see cref="LayerWithSoil"/> objects from.</param> /// <param name="layerLookup">The lookup to fill with the created layers.</param> /// <returns>An <see cref="IEnumerable{T}"/> of <see cref="LayerWithSoil"/>.</returns> /// <exception cref="InvalidEnumArgumentException">Thrown when <see cref="ShearStrengthModel"/>, /// <see cref="Calculators.Input.WaterPressureInterpolationModel"/> is an invalid value.</exception> /// <exception cref="NotSupportedException">Thrown when <see cref="ShearStrengthModel"/>, /// <see cref="Calculators.Input.WaterPressureInterpolationModel"/> is a valid value, but unsupported.</exception> private static IEnumerable <LayerWithSoil> GetLayersWithSoilRecursively(IEnumerable <SoilLayer> soilLayers, IDictionary <SoilLayer, LayerWithSoil> layerLookup) { var layersWithSoil = new List <LayerWithSoil>(); foreach (SoilLayer layer in soilLayers) { var layerWithSoil = new LayerWithSoil( layer.OuterRing, GetInnerLoopsRecursively(layer), new Soil { Name = layer.MaterialName, ShearStrengthAbovePhreaticLevelModel = ConvertShearStrengthAbovePhreaticLevelModel(layer.ShearStrengthModel), ShearStrengthBelowPhreaticLevelModel = ConvertShearStrengthBelowPhreaticLevelModel(layer.ShearStrengthModel), AbovePhreaticLevel = layer.AbovePhreaticLevel, BelowPhreaticLevel = layer.BelowPhreaticLevel, Cohesion = layer.Cohesion, FrictionAngle = layer.FrictionAngle, RatioCuPc = layer.ShearStrengthRatio, StrengthIncreaseExponent = layer.StrengthIncreaseExponent, Dilatancy = layer.Dilatancy }, layer.IsAquifer, ConvertWaterPressureInterpolationModel(layer.WaterPressureInterpolationModel)); layersWithSoil.Add(layerWithSoil); layerLookup.Add(layer, layerWithSoil); layersWithSoil.AddRange(GetLayersWithSoilRecursively(layer.NestedLayers, layerLookup)); } return(layersWithSoil); }
private static Surface CreateSurface(LayerWithSoil layer, List <CSharpWrapperPoint2D> alreadyCreatedPoints, List <Curve> alreadyCreatedCurves, List <Loop> alreadyCreatedLoops) { return(new Surface { OuterLoop = CreateLoop(layer.OuterRing, alreadyCreatedPoints, alreadyCreatedCurves, alreadyCreatedLoops), InnerLoops = layer.InnerRings.Select(ir => CreateLoop(ir, alreadyCreatedPoints, alreadyCreatedCurves, alreadyCreatedLoops)).ToArray() }); }