Ejemplo n.º 1
0
        /// <summary>
        /// Возвращает все допустимые варианты
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private IEnumerable <BrickVariant> GetAllVariants(BrickRequest request)
        {
            if (request.MinimalScaleBehavior == MiniamlScaleBehavior.KeepZero)
            {
                if (request.SourceMinValue > 0)
                {
                    request.SourceMinValue = 0;
                }
            }


            if (request.MaxDelimit <= 0)
            {
                request.MaxDelimit = DecideBestMaxDelimit(request.Size);
            }
            if (request.MinDelimit <= 0)
            {
                request.MinDelimit = DecideBestMinDelimit(request.Size);
            }

            foreach (var i in Bricks)
            {
                var variant = new BrickVariant {
                    BrickSize = i, Request = request, Catalog = this
                };
                if (variant.BrickCount <= request.MaxDelimit && variant.BrickCount >= request.MinDelimit)
                {
                    yield return(variant);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Подбирает лучший вариант "кладки"
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public BrickVariant GetBestVariant(BrickRequest request)
        {
            if (request.SourceMinValue == request.SourceMaxValue)
            {
                if (request.SourceMinValue != 0 && request.MinimalScaleBehavior == MiniamlScaleBehavior.KeepZero)
                {
                    if (request.SourceMinValue > 0)
                    {
                        request.SourceMinValue = 0;
                    }
                    else
                    {
                        request.SourceMaxValue = 0;
                    }
                }
                else
                {
                    return(GetSafeVariant(request));
                }
            }
            var result = GetAllVariants(request).Select(_ => _.Optimize()).OrderBy(_ => _, new BrickVariantComparer()).FirstOrDefault();

            if (null == result)
            {
                return(GetSafeVariant(request));
            }
            if (!WellFormedScale(result))
            {
                result = NormalizeOnlyMaxValue(request);
            }
            return(result);
        }
Ejemplo n.º 3
0
        private static BrickVariant GetSafeVariant(BrickRequest request)
        {
            var variant = new BrickVariant();

            variant.BuildForEqual(request);
            return(variant);
        }
Ejemplo n.º 4
0
        private void CalculateFirstScale()
        {
            if (0 == Preferences.YFixMin && 0 == Preferences.YFixMin && 0 == Preferences.YFixDiv)
            {
                if (FirstScale == null)
                {
                    var realMin = GetMin();
                    var realMax = GetMax();
                    var req     = new BrickRequest {
                        SourceMinValue = realMin,
                        SourceMaxValue = realMax
                    };
                    req.Setup(Preferences.Y, Preferences.YMin, Preferences.YMax, Preferences.YTop.ToString(), Preferences.YSignDelta.ToString());
                    var cat    = new BrickCatalog();
                    var result = cat.GetBestVariant(req);
                    FirstScale = new Scale {
                        Prepared = true, Min = result.ResultMinValue, Max = result.ResultMaxValue, DivLines = result.ResultDivCount
                    };
                }

                FirstScale.ValueInPixel = BrickDataSetHelper.GetValuesInPixel(FirstScale.Min, FirstScale.Max, Preferences.Height);
            }
            else
            {
                FirstScale = new Scale();
            }
        }
Ejemplo n.º 5
0
        private void CalculateSecondScale()
        {
            if (0 == Preferences.SYFixMin && 0 == Preferences.SYFixMin && 0 == Preferences.SYFixDiv)
            {
                var realMin = GetMin(ScaleType.Second);
                var realMax = GetMax(ScaleType.Second);
                var req     = new BrickRequest {
                    SourceMinValue = realMin, SourceMaxValue = realMax
                };
                req.Setup(Preferences.SY, Preferences.SYMin, Preferences.SYMax, Preferences.SYTop.ToString(), Preferences.SYSignDelta.ToString());
                var cat    = new BrickCatalog();
                var result = cat.GetBestVariant(req);
                SecondScale = new Scale {
                    Prepared = true,
                    Min      = result.ResultMinValue,
                    Max      = result.ResultMaxValue,
                    DivLines = result.ResultDivCount,
                };

                SecondScale.ValueInPixel = (SecondScale.Max - SecondScale.Min) / Preferences.Height;
            }
            else
            {
                SecondScale = new Scale();
            }
        }
Ejemplo n.º 6
0
        private BrickVariant NormalizeOnlyMaxValue(BrickRequest request)
        {
            var initialsize = request.Size;

            request.MaxDelimit = 0;
            request.MinDelimit = 0;
            request.Size       = 800;
            var result = GetAllVariants(request).Select(_ => _.Optimize()).OrderBy(_ => _, new BrickVariantComparer()).FirstOrDefault();

            result.BrickSize  = result.BrickMaxValue;
            result.BrickCount = 1;
            request.Size      = initialsize;
            return(result);
        }
Ejemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        public void BuildForEqual(BrickRequest request)
        {
            var r = request.Copy();

            if (request.SourceMinValue == 0)
            {
                r.SourceMaxValue = 100;
            }
            else if (request.SourceMinValue < 0)
            {
                r.SourceMaxValue = 0;
            }
            else
            {
                r.SourceMaxValue = r.SourceMinValue;
                r.SourceMinValue = 0;
            }
            this.Request = r;
        }