Exemplo n.º 1
0
        /// <summary>
        /// Display all text on chart for all columns
        /// </summary>
        /// <param name="e"></param>
        /// <param name="columnWidth"></param>
        /// <param name="columnWidthNoMargin"></param>
        /// <param name="columnStartOffset"></param>
        /// <param name="verticalAxisMaxValueInPixels"></param>
        /// <param name="lowerLeftX"></param>
        /// <param name="lowerLeftY"></param>
        virtual protected void DisplayColumnsText(System.Windows.Forms.PaintEventArgs e, int columnWidth, int columnWidthNoMargin, int columnStartOffset, int verticalAxisMaxValueInPixels, int lowerLeftX, int lowerLeftY)
        {
            int         offset;
            int         offsetFor0;
            IEnumerator Iterator            = this.ChartDescription.Columns.GetEnumerator();
            int         columnCurrentOffset = columnStartOffset;

            System.Diagnostics.Debug.Assert(this.ChartDescription.VerticalAxisMaxValue - this.ChartDescription.VerticalAxisMinValue != 0);

            offsetFor0 = (-this.ChartDescription.VerticalAxisMinValue) * verticalAxisMaxValueInPixels / (this.ChartDescription.VerticalAxisMaxValue - this.ChartDescription.VerticalAxisMinValue);
            while (Iterator.MoveNext())
            {
                ChartColumn currentColumn = (ChartColumn)Iterator.Current;

                if (this.ChartDescription.CumulativeMode == ChartCumulativeMode.StartFromLastValue)
                {
                    Debug.Assert(currentColumn.PositiveValuesSum <= this.ChartDescription.VerticalAxisMaxValue, "Chart.OnPaintBackground", "Vertical axis overflow, verify why current column value is higher than axis vertical value");
                }

                if (this.ChartDescription.CumulativeMode == ChartCumulativeMode.StartFrom0)
                {
                    if (currentColumn.HighestValue >= 0)
                    {
                        offset = offsetFor0 + (verticalAxisMaxValueInPixels * currentColumn.HighestValue / (this.ChartDescription.VerticalAxisMaxValue - this.ChartDescription.VerticalAxisMinValue));
                    }
                    else
                    {
                        // In this case, align text on the '0' line offset
                        offset = offsetFor0;
                    }
                }
                else if (this.ChartDescription.CumulativeMode == ChartCumulativeMode.StartFromLastValue)
                {
                    offset = offsetFor0 + (verticalAxisMaxValueInPixels * currentColumn.PositiveValuesSum / (this.ChartDescription.VerticalAxisMaxValue - this.ChartDescription.VerticalAxisMinValue));
                }
                else
                {
                    Debug.Assert(this.ChartDescription.CumulativeMode == ChartCumulativeMode.Max, "Chart.OnPaintBackground", "Cumulative mode not managed");
                    offset = 0;
                }

                int AbsoluteSum = currentColumn.PositiveValuesSum - currentColumn.NegativeValuesSum;

                // Compute sie of bouding rectangle
                System.Drawing.SizeF Size      = e.Graphics.MeasureString(AbsoluteSum.ToString(CultureInfo.InvariantCulture), this.ChartDescription.ColumnFont);
                PointF     Base0               = new PointF((float)columnCurrentOffset, (float)(lowerLeftY - offset) - Size.Height);
                RectangleF backgroundRectangle = new RectangleF(Base0, Size);

                // Align rectangle on column width
                backgroundRectangle.X = columnCurrentOffset + this.ChartDescription.MarginBetweenColumn / 2 + ((columnWidthNoMargin - backgroundRectangle.Width) / 2);
                currentColumn.DisplayText(e, this, backgroundRectangle);

                // Jump to next offset
                columnCurrentOffset += columnWidth;
            }
        }