CPF/CPF.ReoGrid/Chart/ColumnChartPlotView.cs
2024-06-24 10:15:59 +08:00

72 lines
2.2 KiB
C#

using System;
using CPF.Drawing;
using CPF.ReoGrid.Graphics;
using CPF.ReoGrid.Rendering;
namespace CPF.ReoGrid.Chart
{
public class ColumnChartPlotView : ChartPlotView
{
public ColumnChartPlotView(AxisChart chart) : base(chart)
{
}
protected override void OnPaint(RDrawingContext dc)
{
base.OnPaint(dc);
Rect clientBounds = this.ClientBounds;
double num = (double)clientBounds.Width * 0.7;
bool flag = num < 20.0;
if (!flag)
{
AxisChart axisChart = base.Chart as AxisChart;
bool flag2 = axisChart == null;
if (!flag2)
{
WorksheetChartDataSource dataSource = base.Chart.DataSource;
int serialCount = dataSource.SerialCount;
int categoryCount = dataSource.CategoryCount;
double num2 = num / (double)categoryCount;
double num3 = ((double)clientBounds.Width - num) / (double)(categoryCount + 1);
double num4 = num2 / (double)serialCount;
AxisDataInfo primaryAxisInfo = axisChart.PrimaryAxisInfo;
double num5 = num3;
IGraphics graphics = dc.Graphics;
for (int i = 0; i < categoryCount; i++)
{
for (int j = 0; j < dataSource.SerialCount; j++)
{
PlotPointColumn plotPointColumn = axisChart.PlotDataPoints[j][i];
bool hasValue = plotPointColumn.hasValue;
if (hasValue)
{
IDataSerialStyle dataSerialStyle = axisChart.DataSerialStyles[j];
bool flag3 = plotPointColumn.value > 0f;
if (flag3)
{
IGraphics graphics2 = graphics;
float num6 = (float)num5;
float num7 = axisChart.ZeroHeight - plotPointColumn.value;
float num8 = (float)(num4 - 1.0);
graphics2.DrawAndFillRectangle(new Rect(ref num6, ref num7, ref num8, ref plotPointColumn.value), dataSerialStyle.LineColor, dataSerialStyle.FillColor);
}
else
{
IGraphics graphics3 = graphics;
float num6 = (float)num5;
float num7 = axisChart.ZeroHeight;
float num8 = (float)(num4 - 1.0);
float num9 = -plotPointColumn.value;
graphics3.DrawAndFillRectangle(new Rect(ref num6, ref num7, ref num8, ref num9), dataSerialStyle.LineColor, dataSerialStyle.FillColor);
}
}
num5 += num4;
}
num5 += num3;
}
}
}
}
}
}