public void Calculate(ViewArgs args)
        {
            points = new Vector2[valuePoints.Count];

            for (int i = 0; i < points.Length; i++)
            {
                points[i] = args.ToView(valuePoints[i]);
            }

            Offset = new Vector2();
        }
        public void Recalculate(ViewArgs args)
        {
            int   pixelPointsLength, pixelPointsIndex = 0;
            float selectValueMin, valuesValueWidth, valuePerRawPixelX,
                  selectValueMax, rawPixelXPerValues, rawPixelWidth, valueWidth;

            if (valuePoints.Count < 2)
            {
                return;
            }

            rawPixelWidth = args.PixelSize.RawPixelWidth;
            valueWidth    = args.ValueDimensions.Width;

            valuesValueWidth  = valuePoints[valuePoints.Count - 1].X - valuePoints[0].X;
            pixelPointsLength = Convert.ToInt32(rawPixelWidth * valuesValueWidth / valueWidth) + 1;
            points            = new Vector2[pixelPointsLength];

            valuePerRawPixelX  = valueWidth / rawPixelWidth;
            rawPixelXPerValues = valuesValueWidth / (valuePoints.Count - 1) / valuePerRawPixelX;

            selectValueMin = (1 - rawPixelXPerValues) / 2F * valuePerRawPixelX;
            selectValueMax = (1 + rawPixelXPerValues) / 2F * valuePerRawPixelX;

            for (int i = 0; i < valuePoints.Count && pixelPointsIndex < pixelPointsLength; i++)
            {
                Vector2 curValue = valuePoints[i];

                float nearAllowedValue = (curValue.X % valuePerRawPixelX + valuePerRawPixelX) % valuePerRawPixelX;

                if (selectValueMin <= nearAllowedValue && nearAllowedValue < selectValueMax)
                {
                    points[pixelPointsIndex] = args.ToView(curValue);

                    pixelPointsIndex++;
                }
            }

            Offset = new Vector2();
        }