using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views; using HeuristicLab.Visualization; namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views { public partial class SymbolicExpressionChartControl : ChartControl { public SymbolicExpressionChartControl() { InitializeComponent(); if (Chart == null) { Chart = new Chart(0, 0, PreferredSize.Width, PreferredSize.Height); } } public void Clear() { Chart.Group.Clear(); } public void Add(IPrimitive primitive) { Chart.Group.Add(primitive); } public void AddRange(IEnumerable primitives) { Chart.Group.AddRange(primitives); } public void Draw(Graphics graphics) { graphics.SmoothingMode = SmoothingMode.HighQuality; Chart.Group.Draw(graphics); } public bool UpdateEnabled { get { return Chart.UpdateEnabled; } set { Chart.UpdateEnabled = value; } } public void EnforceUpdate() { Chart.EnforceUpdate(); } public void FlipVertical() { foreach (var p in Chart.Group.Primitives.OfType().SelectMany(x => x.Primitives)) { FlipPrimitive(p); } } public void FlipPrimitive(IPrimitive primitive) { var height = pictureBox.Height; var rect = primitive as RectangularPrimitiveBase; var line = primitive as LinearPrimitiveBase; if (rect != null) { rect.SetPosition(rect.LowerLeft.X, height - rect.UpperRight.Y, rect.UpperRight.X, height - rect.LowerLeft.Y); } else if (line != null) { line.SetPosition(line.Start.X, height - line.Start.Y, line.End.X, height - line.End.Y); } } } }