Files
LeafWeb/Web/Controllers/LeafCharterController.cs
T

113 lines
2.8 KiB
C#

using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using System.Web.UI.DataVisualization.Charting;
using System.Web.UI.WebControls;
using LeafWeb.Core.Charter;
using LeafWeb.Core.Entities;
using LeafWeb.Core.Parsers;
using LeafWeb.Web.Charter;
namespace LeafWeb.Web.Controllers
{
public class LeafCharterController : ControllerBase
{
public ActionResult Index(int leafInputId)
{
var hasLeafOutputFile =
DataService
.GetLeafInput(leafInputId)?
.OutputFiles?
.FirstOrDefault(f => f.IsLeafChartFile) != null;
return View(leafInputId);
}
public ActionResult LeafCharts(int leafInputId, int number)
{
var leafOutputFile =
DataService
.GetLeafInput(leafInputId)?
.OutputFiles?
.FirstOrDefault(f => f.IsLeafChartFile);
if (leafOutputFile == null)
return View(); // TODO: break
return File(GetChartImage(leafOutputFile.Contents, number), "image/png", "mychart.png");
}
private byte[] GetChartImage(byte[] fileContents, int number, ChartImageFormat format = ChartImageFormat.Png)
{
CntrlComparison[] cntrlComparison;
using (var parser = new CntrlComparisonParser(fileContents))
cntrlComparison = parser.Parse();
var curveData = CurveDataConverter.Convert(cntrlComparison).ToArray();
var charts = LeafWebCharter.ProduceCharts(curveData[2]);
//Image.FromFile()
using (var ms = new MemoryStream())
{
charts.Skip(number).First().SaveImage(ms, format);
ms.Seek(0, SeekOrigin.Begin);
return ms.ToArray();
}
}
public ActionResult ChartSample()
{
var chart = new Chart
{
BackColor = Color.FromArgb(255, 255, 255),
Width = Unit.Pixel(250),
Height = Unit.Pixel(2500)
};
var series = new Series
{
ChartArea = "ca1",
ChartType = SeriesChartType.Line
};
//series.Font = new Font("Verdana", 8.25f, FontStyle.Regular);
var myRandom = new Random();
for (int i = 0; i < 100; i++)
{
var dp = new DataPoint();
dp.AxisLabel = String.Format("{0}-{1}", i, Guid.NewGuid().ToString().Substring(0, 4));
dp.YValues = new double[] { myRandom.Next(5, 100) };
series.Points.Add(dp);
}
chart.Series.Add(series);
var area = new ChartArea("ca1");
area.Area3DStyle.Enable3D = false;
area.AxisX.Interval = 1;
//area.BackColor = Color.Transparent;
//var labelStyle = new LabelStyle();
//labelStyle.Enabled = true;
//labelStyle.Font = new Font("Arial", 3f);
area.AxisX.LabelStyle.Font = new Font("Verdana", 8.25f, FontStyle.Underline);//Why does it recognize the style but not the font!!!???
chart.ChartAreas.Add(area);
using (var ms = new MemoryStream())
{
chart.SaveImage(ms, ChartImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
return File(ms.ToArray(), "image/png", "mychart.png");
}
}
}
}