Inheritance: ImplicitModuleBase
Example #1
0
        public static ImplicitFractal FractalFromXElement(ImplicitXmlChain chain, XElement xElement)
        {
            var fractalTypeAttribute = xElement.Attribute("fractal");

            if (fractalTypeAttribute == null)
            {
                throw new InvalidOperationException("Missing fractal.");
            }
            var basisTypeAttribute = xElement.Attribute("basis");

            if (basisTypeAttribute == null)
            {
                throw new InvalidOperationException("Missing basis.");
            }
            var interpolationTypeAttribute = xElement.Attribute("interpolation");

            if (interpolationTypeAttribute == null)
            {
                throw new InvalidOperationException("Missing interpolation.");
            }

            FractalType fractalType;

            switch (fractalTypeAttribute.Value.ToLower())
            {
            case "billow":
                fractalType = FractalType.Billow;
                break;

            case "fbm":
                fractalType = FractalType.FractionalBrownianMotion;
                break;

            case "hybrid_multi":
                fractalType = FractalType.HybridMulti;
                break;

            case "multi":
                fractalType = FractalType.Multi;
                break;

            case "ridged_multi":
                fractalType = FractalType.RidgedMulti;
                break;

            default: throw new InvalidOperationException("Invalid fractal.");
            }

            BasisType basisType;

            switch (basisTypeAttribute.Value.ToLower())
            {
            case "gradient":
                basisType = BasisType.Gradient;
                break;

            case "gradient_value":
                basisType = BasisType.GradientValue;
                break;

            case "simplex":
                basisType = BasisType.Simplex;
                break;

            case "value":
                basisType = BasisType.Value;
                break;

            case "white":
                basisType = BasisType.White;
                break;

            default: throw new InvalidOperationException("Invalid basis.");
            }

            InterpolationType interpolationType;

            switch (interpolationTypeAttribute.Value.ToLower())
            {
            case "cubic":
                interpolationType = InterpolationType.Cubic;
                break;

            case "linear":
                interpolationType = InterpolationType.Linear;
                break;

            case "none":
                interpolationType = InterpolationType.None;
                break;

            case "quintic":
                interpolationType = InterpolationType.Quintic;
                break;

            default: throw new InvalidOperationException("Invalid interpolation.");
            }

            var fractal = new ImplicitFractal(fractalType, basisType, interpolationType);

            var octavesAttribute = xElement.Attribute("octaves");

            if (octavesAttribute != null)
            {
                fractal.Octaves = Int32.Parse(octavesAttribute.Value);
            }

            var frequencyAttribute = xElement.Attribute("frequency");

            if (frequencyAttribute != null)
            {
                fractal.Frequency = Double.Parse(frequencyAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);
            }

            var lacunarityAttribute = xElement.Attribute("lacunarity");

            if (lacunarityAttribute != null)
            {
                fractal.Lacunarity = Double.Parse(lacunarityAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);
            }

            var gainAttribute = xElement.Attribute("gain");

            if (gainAttribute != null)
            {
                fractal.Gain = Double.Parse(gainAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);
            }

            var offsetAttribute = xElement.Attribute("offset");

            if (offsetAttribute != null)
            {
                fractal.Offset = Double.Parse(offsetAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);
            }

            var hAttribute = xElement.Attribute("h");

            if (hAttribute != null)
            {
                fractal.H = Double.Parse(hAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);
            }

            return(fractal);
        }
        public static ImplicitFractal FractalFromXElement(ImplicitXmlChain chain, XElement xElement)
        {
            var fractalTypeAttribute = xElement.Attribute("fractal");
            if (fractalTypeAttribute == null)
                throw new InvalidOperationException("Missing fractal.");
            var basisTypeAttribute = xElement.Attribute("basis");
            if (basisTypeAttribute == null)
                throw new InvalidOperationException("Missing basis.");
            var interpolationTypeAttribute = xElement.Attribute("interpolation");
            if (interpolationTypeAttribute == null)
                throw new InvalidOperationException("Missing interpolation.");

            FractalType fractalType;
            switch (fractalTypeAttribute.Value.ToLower())
            {
                case "billow":
                    fractalType = FractalType.Billow;
                    break;
                case "fbm":
                    fractalType = FractalType.FractionalBrownianMotion;
                    break;
                case "hybrid_multi":
                    fractalType = FractalType.HybridMulti;
                    break;
                case "multi":
                    fractalType = FractalType.Multi;
                    break;
                case "ridged_multi":
                    fractalType = FractalType.RidgedMulti;
                    break;
                default: throw new InvalidOperationException("Invalid fractal.");
            }

            BasisType basisType;
            switch (basisTypeAttribute.Value.ToLower())
            {
                case "gradient":
                    basisType = BasisType.Gradient;
                    break;
                case "gradient_value":
                    basisType = BasisType.GradientValue;
                    break;
                case "simplex":
                    basisType = BasisType.Simplex;
                    break;
                case "value":
                    basisType = BasisType.Value;
                    break;
                case "white":
                    basisType = BasisType.White;
                    break;
                default: throw new InvalidOperationException("Invalid basis.");
            }

            InterpolationType interpolationType;
            switch (interpolationTypeAttribute.Value.ToLower())
            {
                case "cubic":
                    interpolationType = InterpolationType.Cubic;
                    break;
                case "linear":
                    interpolationType = InterpolationType.Linear;
                    break;
                case "none":
                    interpolationType = InterpolationType.None;
                    break;
                case "quintic":
                    interpolationType = InterpolationType.Quintic;
                    break;
                default: throw new InvalidOperationException("Invalid interpolation.");
            }

            var fractal = new ImplicitFractal(fractalType, basisType, interpolationType);

            var octavesAttribute = xElement.Attribute("octaves");
            if (octavesAttribute != null)
                fractal.Octaves = Int32.Parse(octavesAttribute.Value);

            var frequencyAttribute = xElement.Attribute("frequency");
            if (frequencyAttribute != null)
                fractal.Frequency = Double.Parse(frequencyAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);

            var lacunarityAttribute = xElement.Attribute("lacunarity");
            if (lacunarityAttribute != null)
                fractal.Lacunarity = Double.Parse(lacunarityAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);

            var gainAttribute = xElement.Attribute("gain");
            if (gainAttribute != null)
                fractal.Gain = Double.Parse(gainAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);

            var offsetAttribute = xElement.Attribute("offset");
            if (offsetAttribute != null)
                fractal.Offset = Double.Parse(offsetAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);

            var hAttribute = xElement.Attribute("h");
            if (hAttribute != null)
                fractal.H = Double.Parse(hAttribute.Value, NumberStyles.Any, CultureInfo.InvariantCulture);

            return fractal;
        }