コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }