public ActionResult Aggregate(ResultsModel resultsModel) { try { // union double lower = 10, upper = 0; foreach (var result in resultsModel.AllResults) { if (!result.IsFullWorkspace) { var splitInterval = (from i in result.OutputInterval.Split(new[] {";", "[", "]"}, StringSplitOptions.RemoveEmptyEntries) select i.Trim()).ToList(); if (splitInterval.Count() == 2) { double parsedLower = double.Parse(splitInterval[0]); if (parsedLower < lower) { lower = parsedLower; } double parsedUpper = double.Parse(splitInterval[1]); if (parsedUpper > upper) { upper = parsedUpper; } } } } // intersection with full results foreach (var result in resultsModel.AllResults) { if (result.IsFullWorkspace) { var splitInterval = (from i in result.OutputInterval.Split(new[] { ";", "[", "]" }, StringSplitOptions.RemoveEmptyEntries) select i.Trim()).ToList(); if (splitInterval.Count() == 2) { double parsedLower = double.Parse(splitInterval[0]); if (parsedLower < upper) { lower = parsedLower; } double parsedUpper = double.Parse(splitInterval[1]); if (parsedUpper > lower) { upper = parsedUpper; } } } } var interval = new Interval(lower, upper); var aggregatedResult = new ResultModel { IsAggregated = true, OutputInterval = interval.ToString(), OutputLinguistic = string.Join( ", ", DecisionMakerType2.IntervalToLinguistic(interval)) }; return PartialView("_Result", aggregatedResult); } catch (Exception ex) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.InternalServerError); } }
public ActionResult DrawChart(ResultsModel resultsModel) { try { var chart = new Chart(); chart.Width = 1000; chart.Height = 800; chart.Palette = ChartColorPalette.SeaGreen; int counter = 1; foreach (var result in resultsModel.AllResults) { chart.Series.Add(CreateSeries(result.OutputInterval, result.WorkspaceName, ref counter, result.IsAggregated)); } if (resultsModel.AggregatedResult != null) { chart.Series.Add( CreateSeries( resultsModel.AggregatedResult.OutputInterval, resultsModel.AggregatedResult.WorkspaceName, ref counter, true)); } chart.ChartAreas.Add(CreateChartArea(counter, resultsModel)); MemoryStream ms = new MemoryStream(); chart.SaveImage(ms); var data = Convert.ToBase64String(ms.GetBuffer()); return Json(data); } catch (Exception ex) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.InternalServerError); } }
private ChartArea CreateChartArea(int counter, ResultsModel results) { ChartArea chartArea = new ChartArea(); chartArea.Name = "Result Chart"; chartArea.BackColor = Color.Transparent; chartArea.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.WordWrap; chartArea.AxisX.Interval = 1; chartArea.AxisX.IntervalOffset = -0.5; chartArea.AxisX.Maximum = counter - 0.5; chartArea.AxisX.Minimum = 0.5; chartArea.AxisY.IsLabelAutoFit = false; chartArea.AxisY.Interval = 2; chartArea.AxisY.Maximum = 10; chartArea.AxisX.LabelStyle.Font = new Font("Verdana,Arial,Helvetica,sans-serif", 20F, FontStyle.Regular); chartArea.AxisY.LabelStyle.Font = new Font("Verdana,Arial,Helvetica,sans-serif", 20F, FontStyle.Regular); chartArea.AxisY.LineColor = Color.FromArgb(18, 44, 63); chartArea.AxisX.LineColor = Color.FromArgb(18, 44, 63); chartArea.AxisY.MajorGrid.LineColor = Color.FromArgb(18, 44, 63); chartArea.AxisX.MajorGrid.LineColor = Color.FromArgb(18, 44, 63); chartArea.AxisX.LabelStyle.ForeColor = Color.FromArgb(18, 44, 63); chartArea.AxisY.LabelStyle.ForeColor = Color.FromArgb(18, 44, 63); double offset = 0.5; foreach (var result in results.AllResults) { chartArea.AxisX.CustomLabels.Add(offset, offset + 1, result.WorkspaceName); offset++; } if (results.AggregatedResult != null) { chartArea.AxisX.CustomLabels.Add(offset, offset + 1, results.AggregatedResult.WorkspaceName); } return chartArea; }