Example #1
0
        /// <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);
        }
Example #2
0
 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()
     });
 }