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; }