예제 #1
0
        internal void DrawHourMinuteLabels(Graphics g, GraphPane pane, MinorTic tic, MinorGrid grid, bool drawGrid,
                                           float topPix, float rightPix, float shift, float scaleFactor)
        {
            XDate    xStartInterval  = new XDate(_minLinTemp);
            DateTime dtStartInterval = xStartInterval.DateTime;
            DateTime dtEndInterval;
            string   labelText          = "24:00";
            SizeF    labelBox           = _fontSpec.BoundingBox(g, labelText, scaleFactor);
            float    labelWidth         = labelBox.Width + 4;
            float    labelWidthHalf     = labelWidth / 2;
            float    scaledTic          = tic.ScaledTic(scaleFactor);
            float    textVerticalCenter = GetTextVerticalCenter(g, pane, scaledTic, labelBox.Height, shift, scaleFactor);

            double dStartInterval, dEndInterval;
            float  pStartInterval, pEndInterval, pIntervalWidth;

            int year   = dtStartInterval.Year;
            int month  = dtStartInterval.Month;
            int day    = dtStartInterval.Day;
            int hour   = dtStartInterval.Hour;
            int minute = dtStartInterval.Minute;
            int second = dtStartInterval.Second;

            dtStartInterval = new DateTime(year, month, day, 0, 0, 0);
            dStartInterval  = dtStartInterval.ToOADate();
            pStartInterval  = LocalTransform(dStartInterval);

            dtEndInterval  = dtStartInterval.AddMinutes(1);
            dEndInterval   = dtEndInterval.ToOADate();
            pEndInterval   = LocalTransform(dEndInterval);
            pIntervalWidth = pEndInterval - pStartInterval;

            int minutesPerLabel = RoundNumber((int)Math.Ceiling(labelWidth / pIntervalWidth), roundMinutes);

            dtEndInterval = dtStartInterval.AddMinutes(minutesPerLabel);
            dEndInterval  = dtEndInterval.ToOADate();

            while (dStartInterval < _maxLinTemp)
            {
                int minutesHours = hour * 60 + minute;
                dtEndInterval = dtStartInterval.AddMinutes(minutesPerLabel);
                dEndInterval  = dtEndInterval.ToOADate();

                TruncateIntervalDrawTicGrid(g, pane, topPix, tic, grid, drawGrid, shift, scaleFactor, scaledTic,
                                            ref dStartInterval, ref dEndInterval, out pStartInterval, out pEndInterval, out pIntervalWidth);

                //if label will not extend beyond left or right edge of this axis, draw it
                if (!drawGrid && this.IsVisible && (pStartInterval - labelWidthHalf > 0) &&
                    (pStartInterval + labelWidthHalf) < rightPix)
                {
                    labelText = hour.ToString() + ":" + ((minute < 10) ? "0" : "") + minute.ToString();
                    _fontSpec.Draw(g, pane, labelText,
                                   pStartInterval, textVerticalCenter,
                                   AlignH.Center, AlignV.Center, scaleFactor);
                }
                dtStartInterval = dtStartInterval.AddMinutes(minutesPerLabel);
                hour            = dtStartInterval.Hour;
                minute          = dtStartInterval.Minute;
                dStartInterval  = dtStartInterval.ToOADate();
            }
        }
예제 #2
0
        internal void DrawDayLabels(Graphics g, GraphPane pane, MinorTic tic, MinorGrid grid, bool drawGrid,
                                    float topPix, float rightPix, float shift, float scaleFactor, bool includeMonthYear)
        {
            int    year;
            int    month;
            int    day;
            XDate  xStartInterval = new XDate(_minLinTemp);
            XDate  xEndInterval;
            string labelText = "28";

            if (includeMonthYear)
            {
                labelText = "2000 " + MonthNamesAbbreviated[1] + " 28";
            }
            SizeF labelBox           = _fontSpec.BoundingBox(g, labelText, scaleFactor);
            float labelWidth         = labelBox.Width + 4;
            float labelWidthHalf     = labelWidth / 2;
            float ticShift           = (includeMonthYear ? (shift + labelBox.Height / 2) : shift);
            float scaledTic          = tic.ScaledTic(scaleFactor);
            float textVerticalCenter = GetTextVerticalCenter(g, pane, scaledTic, labelBox.Height, shift, scaleFactor);
            float textHorizontalCenter;

            double dStartInterval, dEndInterval;
            float  pStartInterval, pEndInterval, pIntervalWidth;

            xStartInterval.GetDate(out year, out month, out day);
            xStartInterval.SetDate(year, month, 1);
            xEndInterval   = new XDate(year, month, 2);
            dStartInterval = xStartInterval.XLDate;
            dEndInterval   = xEndInterval.XLDate;

            pStartInterval = LocalTransform(dStartInterval);
            pEndInterval   = LocalTransform(dEndInterval);
            pIntervalWidth = pEndInterval - pStartInterval;

            int daysPerLabel = RoundNumber((int)Math.Ceiling(labelWidth / pIntervalWidth), roundNumbers);

            while (dStartInterval < _maxLinTemp)
            {
                TruncateIntervalDrawTicGrid(g, pane, topPix, tic, grid, drawGrid,
                                            ticShift + (includeMonthYear ? scaledTic : 0), scaleFactor, scaledTic,
                                            ref dStartInterval, ref dEndInterval, out pStartInterval, out pEndInterval, out pIntervalWidth);

                if (!drawGrid && this.IsVisible && pIntervalWidth > 1)
                {
                    if (((int)(day / daysPerLabel)) * daysPerLabel == day)
                    {
                        textHorizontalCenter = (pStartInterval + pEndInterval) / 2;
                        //if label will not extend beyond left or right edge of this axis, draw it
                        if ((textHorizontalCenter - labelWidthHalf > 0) &&
                            (textHorizontalCenter + labelWidthHalf) < rightPix)
                        {
                            labelText = day.ToString();
                            if (includeMonthYear)
                            {
                                labelText = year + " " + MonthNamesAbbreviated[month - 1] + " " + labelText;
                            }
                            _fontSpec.Draw(g, pane, labelText,
                                           textHorizontalCenter, textVerticalCenter,
                                           AlignH.Center, AlignV.Center, scaleFactor);
                        }
                    }
                }
                xStartInterval.AddDays(1);
                xStartInterval.GetDate(out year, out month, out day);                 // = new XDate(endInterval);
                dStartInterval = xStartInterval.XLDate;
                xEndInterval.AddDays(1);
                dEndInterval = xEndInterval.XLDate;
            }
        }
예제 #3
0
        internal void DrawMonthLabels(Graphics g, GraphPane pane, MinorTic tic, MinorGrid grid, bool drawGrid,
                                      float topPix, float rightPix, float shift, float scaleFactor, bool includeYear)
        {
            int year;
            int month;
            int day;
            int MonthLabelType = WhichMonthLabels(g, pane, topPix, rightPix, shift, scaleFactor, includeYear);

            XDate  xStartInterval = new XDate(_minLinTemp);
            XDate  xEndInterval;
            string labelText          = "0";
            SizeF  labelBox           = _fontSpec.BoundingBox(g, labelText, scaleFactor);
            float  ticShift           = (includeYear ? (shift + labelBox.Height / 2) : shift);
            float  charWidth          = labelBox.Width;
            float  scaledTic          = tic.ScaledTic(scaleFactor);
            float  textVerticalCenter = GetTextVerticalCenter(g, pane, scaledTic, labelBox.Height, shift, scaleFactor);

            double dStartInterval, dEndInterval;
            float  pStartInterval, pEndInterval, pIntervalWidth;

            SizeF labelSize;

            xStartInterval.GetDate(out year, out month, out day);
            if (day != 1)
            {
                xStartInterval.SetDate(year, month, 1);
            }
            xEndInterval = new XDate(xStartInterval);
            xEndInterval.AddMonths(1);
            dStartInterval = xStartInterval.XLDate;
            dEndInterval   = xEndInterval.XLDate;



            // draw tics and labels
            dStartInterval = xStartInterval.XLDate;
            while (dStartInterval < _maxLinTemp)
            {
                TruncateIntervalDrawTicGrid(g, pane, topPix, tic, grid, drawGrid,
                                            ticShift, scaleFactor, scaledTic,
                                            ref dStartInterval, ref dEndInterval, out pStartInterval, out pEndInterval, out pIntervalWidth);

                // If the width of the interval is at least wide enough for a character,
                // try displaying a month label
                if (!drawGrid && this.IsVisible && pIntervalWidth > charWidth)
                {
                    labelText = "";
                    switch (MonthLabelType)
                    {
                    case 3: labelText = MonthNamesFull[month - 1]; break;

                    case 2: labelText = MonthNamesAbbreviated[month - 1]; break;

                    case 1: labelText = MonthNamesAbbreviated[month - 1].Substring(0, 1); break;
                    }
                    if (includeYear)
                    {
                        labelText += " " + year;
                    }
                    labelSize = _fontSpec.BoundingBox(g, labelText, scaleFactor);
                    if (labelSize.Width >= pIntervalWidth)
                    {
                        labelText = "";
                    }
                    if (labelText.Length > 0)
                    {
                        _fontSpec.Draw(g, pane, labelText,
                                       (pStartInterval + pEndInterval) / 2, textVerticalCenter,
                                       AlignH.Center, AlignV.Center,
                                       scaleFactor);
                    }
                }
                xStartInterval.AddMonths(1);                 // = new XDate(endInterval);
                xEndInterval.AddMonths(1);
                dStartInterval = xStartInterval.XLDate;
                dEndInterval   = xEndInterval.XLDate;
                xStartInterval.GetDate(out year, out month, out day);
            }
        }
예제 #4
0
        private int WhichMonthLabels(Graphics g, GraphPane pane,
                                     float topPix, float rightPix, float shift, float scaleFactor, bool includeYear)
        {
            bool FullFit   = true;
            bool AbbrevFit = true;
            bool CharFit   = true;

            int year;
            int month;
            int day;

            string yearText = "";

            XDate  xStartInterval = new XDate(_minLinTemp);
            XDate  xEndInterval;
            string labelText = "0";
            SizeF  labelBox  = _fontSpec.BoundingBox(g, labelText, scaleFactor);
            float  ticShift  = (includeYear ? (shift + labelBox.Height / 2) : shift);
            float  charWidth = labelBox.Width;

            MinorGrid grid               = _ownerAxis._minorGrid;
            MinorTic  tic                = _ownerAxis._minorTic;
            float     scaledTic          = tic.ScaledTic(scaleFactor);
            float     textVerticalCenter = GetTextVerticalCenter(g, pane, scaledTic, labelBox.Height, shift, scaleFactor);

            double dStartInterval, dEndInterval;
            float  pStartInterval, pEndInterval, pIntervalWidth;

            xStartInterval.GetDate(out year, out month, out day);
            if (day != 1)
            {
                xStartInterval.SetDate(year, month, 1);
            }
            xEndInterval = new XDate(xStartInterval);
            xEndInterval.AddMonths(1);
            dStartInterval = xStartInterval.XLDate;
            dEndInterval   = xEndInterval.XLDate;

            while (dStartInterval < _maxLinTemp)
            {
                TruncateIntervalDrawTicGrid(g, pane, topPix, tic, grid, false,
                                            ticShift, scaleFactor, scaledTic,
                                            ref dStartInterval, ref dEndInterval, out pStartInterval, out pEndInterval, out pIntervalWidth);

                // If the width of the interval is at least wide enough for a character
                // and we have more than 27 days, try displaying a month label
                if (pIntervalWidth > charWidth && (dEndInterval - dStartInterval > 27))
                {
                    if (includeYear)
                    {
                        yearText = " " + year;
                    }

                    if (FullFit)                       // First try to fit whole month name
                    {
                        FullFit = LabelFits(g, scaleFactor, MonthNamesFull[month - 1] + yearText, pIntervalWidth);
                    }
                    if (AbbrevFit)                     // Next try to fit abbreviated month name
                    {
                        AbbrevFit = LabelFits(g, scaleFactor, MonthNamesAbbreviated[month - 1] + yearText, pIntervalWidth);
                    }
                    if (CharFit)                       // Finally try to fit first letter of month name
                    {
                        CharFit = LabelFits(g, scaleFactor, labelText.Substring(0, 1) + yearText, pIntervalWidth);
                    }
                }
                xStartInterval.AddMonths(1);                 // = new XDate(endInterval);
                xEndInterval.AddMonths(1);
                dStartInterval = xStartInterval.XLDate;
                dEndInterval   = xEndInterval.XLDate;
                xStartInterval.GetDate(out year, out month, out day);
            }
            if (FullFit)
            {
                return(3);
            }
            if (AbbrevFit)
            {
                return(2);
            }
            if (CharFit)
            {
                return(1);
            }
            return(0);
        }
예제 #5
0
        internal void DrawYearLabels(Graphics g, GraphPane pane, MinorTic tic, MinorGrid grid, bool drawGrid,
                                     float topPix, float rightPix, float shift, float scaleFactor)
        {
            int year;
            int month;
            int day;

            XDate  xStartInterval = new XDate(_minLinTemp);
            XDate  xEndInterval;
            string labelText      = "2000";
            SizeF  labelBox       = _fontSpec.BoundingBox(g, labelText, scaleFactor);
            float  labelWidth     = labelBox.Width + 4;
            float  labelWidthHalf = labelWidth / 2;

            float scaledTic          = tic.ScaledTic(scaleFactor);
            float textVerticalCenter = GetTextVerticalCenter(g, pane, scaledTic, labelBox.Height, shift, scaleFactor);
            float textHorizontalCenter;

            double dStartInterval, dEndInterval;
            float  pStartInterval, pEndInterval, pIntervalWidth;

            xStartInterval.GetDate(out year, out month, out day);
            xStartInterval.SetDate(year, 1, 1);
            xEndInterval   = new XDate(year + 1, 1, 1);
            dStartInterval = xStartInterval.XLDate;
            dEndInterval   = xEndInterval.XLDate;

            pStartInterval = LocalTransform(dStartInterval);
            pEndInterval   = LocalTransform(dEndInterval);
            pIntervalWidth = pEndInterval - pStartInterval;

            int yearsPerLabel = RoundNumber((int)Math.Ceiling(labelWidth / pIntervalWidth), roundNumbers);
            int yearsPerTic   = RoundNumber((int)Math.Ceiling(10 / pIntervalWidth), roundNumbers);

            while (dStartInterval < _maxLinTemp)
            {
                bool labelThisYear = ((year / yearsPerLabel) * yearsPerLabel == year);
                if (labelThisYear || ((year / yearsPerTic) * yearsPerTic == year))
                {
                    TruncateIntervalDrawTicGrid(g, pane, topPix, tic, grid, drawGrid, shift, scaleFactor, scaledTic,
                                                ref dStartInterval, ref dEndInterval, out pStartInterval, out pEndInterval, out pIntervalWidth);

                    if (!drawGrid && this.IsVisible && labelThisYear)
                    {
                        textHorizontalCenter = (pStartInterval + pEndInterval) / 2;
                        //if label will not extend beyond left or right edge of this axis, draw it
                        if ((textHorizontalCenter - labelWidthHalf > 0) &&
                            (textHorizontalCenter + labelWidthHalf) < rightPix)
                        {
                            labelText = year.ToString();
                            _fontSpec.Draw(g, pane, labelText,
                                           textHorizontalCenter, textVerticalCenter,
                                           AlignH.Center, AlignV.Center, scaleFactor);
                        }
                    }
                }
                year += 1;
                xStartInterval.SetDate(year, 1, 1);                 // = new XDate(endInterval);
                xEndInterval.SetDate(year + 1, 1, 1);
                dStartInterval = xStartInterval.XLDate;
                dEndInterval   = xEndInterval.XLDate;
            }
        }