public static VariationModel[] GetVariationsFromFlameModel(FlameModel model) { var length = model.VariationIds.Count; var variations = new VariationModel[length]; var hasParameters = model.Parameters != null; var hasWeights = model.Weights != null; for (var i = 0; i < length; i++) { if (!VariationFactoryModel.StaticVariationFactory.TryGet(model.VariationIds[i], out var v)) { throw new ArgumentOutOfRangeException(nameof(model), @"UNKNOWN VARIATION ID"); } if (hasParameters) { v.SetParameters(model.Parameters[i]); } if (hasWeights) { v.W = model.Weights[i]; } variations[i] = v; } return(variations); }
public static TransformModel[] GetTransformationsFromFlameModel(FlameModel model) { var length = model.Coefficients.Count; var transformations = new TransformModel[length]; var hasGradient = model.GradientPack != null; for (var i = 0; i < length; i++) { var t = new TransformModel(); var colorPosition = .5; if (hasGradient) { colorPosition = model.FunctionColorPositions[i]; } var mif = model.IsFinal; t.SetFromCoefficients(model.Coefficients[i], model.Coefficients[i][6], model.FunctionColors[i], mif.Count != 0 && model.IsFinal[i], colorPosition); transformations[i] = t; } return(transformations); }
private static FlameModel FlameModelFromObjects(IReadOnlyList <TransformModel> transformations, IReadOnlyList <VariationModel> variations, ViewSettingsModel viewSettings, GradientModel gradModel) { var coefficients = new List <double[]>(); var variationIds = new List <int>(); var parameters = new List <double[]>(); var colors = new List <Color>(); var colorPositions = new List <double>(); var weights = new List <double>(); var isFinal = new List <bool>(); for (var i = 0; i < transformations.Count; i++) { //todo isFinal isFinal.Add(transformations[i].IsFinal); coefficients.Add(new[] { transformations[i].A, transformations[i].B, transformations[i].C, transformations[i].D, transformations[i].E, transformations[i].F, transformations[i].Probability }); variationIds.Add(variations[i].Id); parameters.Add(new double[variations[i].HasParameters]); for (var j = 0; j < variations[i].HasParameters; j++) { switch (j) { case 0: parameters[i][j] = variations[i].P1; break; case 1: parameters[i][j] = variations[i].P2; break; case 2: parameters[i][j] = variations[i].P3; break; case 3: parameters[i][j] = variations[i].P4; break; } } colorPositions.Add(transformations[i].ColorPosition); colors.Add(transformations[i].Color); weights.Add(variations[i].W); } var flameModel = new FlameModel { ImageWidth = viewSettings.ImageWidth, ImageHeight = viewSettings.ImageHeight, Rotation = viewSettings.Rotation, ViewShiftX = viewSettings.ShiftX, ViewShiftY = viewSettings.ShiftY, Symmetry = viewSettings.Symmetry, ViewZoom = viewSettings.Zoom, Coefficients = coefficients, Weights = weights, Parameters = parameters, VariationIds = variationIds, FunctionColors = colors, BackColor = viewSettings.BackColor, IsFinal = isFinal }; if (gradModel != null) { flameModel.GradientPack = gradModel.Pack(); flameModel.FunctionColorPositions = colorPositions; } return(flameModel); }