/// <summary> /// Converts population level to a line and polygon using a ChartPrimitive as the baseline /// </summary> /// <param name="results"></param> /// <param name="color"></param> /// <param name="label"></param> /// <returns></returns> public static LineAndPolygon ConvertResultsToPopulationLineAndPolygon(ChartControl factory, float[] results, Color color, string label, ChartPrimitiveXY baseLine) { ChartPrimitiveXY populationLine = factory.CreateXY(); populationLine.LineColor = color; populationLine.Label = label; populationLine.LegendColor = color; populationLine.IsHitTest = true; if (baseLine == null) { for (int monthNo = 0; monthNo < results.Length; monthNo += 2) { populationLine.AddPoint(new Point((float)monthNo * .5f, results[monthNo])); populationLine.AddPoint(new Point((float)monthNo * .5f + 1f, results[monthNo + 1])); } } else { for (int monthNo = 0; monthNo < results.Length; monthNo += 2) { populationLine.AddPoint(new Point((float)monthNo * .5f, results[monthNo] + baseLine.Points[monthNo].Y)); populationLine.AddPoint(new Point((float)monthNo * .5f + 1f, results[monthNo + 1] + baseLine.Points[monthNo + 1].Y)); } } ChartPrimitiveXY populationPolygon = ChartUtilities.LineDiffToPolygon(factory, baseLine, populationLine); color.A = (byte)(_alpha * color.A); populationPolygon.FillColor = color; populationPolygon.IsHitTest = false; return(new LineAndPolygon(populationLine, populationPolygon)); }
/// <summary> /// Gets ChartLines and ChartPolygons for the population line, and /// the target line using a baseline. /// </summary> public static LineAndPolygon ConvertResultsToTargetLineAndPolygon(ChartControl factory, ChartPrimitive populationLine, float[] results, Color color, string label, ChartPrimitiveXY baseLine) { // Calculate Target Primitives ChartPrimitiveXY targetLine = factory.CreateXY(); targetLine.LineColor = color; targetLine.IsDashed = true; targetLine.Label = label + " Target"; targetLine.IsHitTest = true; if (populationLine.Points.Count == results.Length) { if (baseLine == null) { for (int monthNo = 0; monthNo < results.Length; monthNo += 2) { targetLine.AddPoint(new Point((float)monthNo * .5f, results[monthNo])); targetLine.AddPoint(new Point((float)monthNo * .5f + 1f, results[monthNo + 1])); } } else { for (int monthNo = 0; monthNo < results.Length; monthNo += 2) { targetLine.AddPoint(new Point((float)monthNo * .5f, results[monthNo] + baseLine.Points[monthNo].Y)); targetLine.AddPoint(new Point((float)monthNo * .5f + 1f, results[monthNo + 1] + baseLine.Points[monthNo + 1].Y)); } } } else { if (baseLine == null) { for (int monthNo = 0; monthNo < results.Length; ++monthNo) { targetLine.AddPoint(new Point((float)monthNo, results[monthNo])); targetLine.AddPoint(new Point((float)monthNo + 1f, results[monthNo])); } } else { for (int monthNo = 0; monthNo < results.Length; ++monthNo) { targetLine.AddPoint(new Point((float)monthNo, results[monthNo] + baseLine.Points[monthNo].Y)); targetLine.AddPoint(new Point((float)monthNo + 1f, results[monthNo] + baseLine.Points[monthNo + 1].Y)); } } } ChartPrimitiveXY targetPolygon = ChartUtilities.LineDiffToPolygon(factory, baseLine, targetLine); color.A = (byte)(_alpha * color.A); targetPolygon.FillColor = color; targetPolygon.IsDashed = true; targetLine.IsHitTest = false; return(new LineAndPolygon(targetLine, targetPolygon)); }