/// <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; } }