From f153e5c255f4453f6b9b20aa23bbfd618987d2e1 Mon Sep 17 00:00:00 2001 From: Tadas Baltrusaitis Date: Thu, 6 Oct 2016 12:18:34 -0400 Subject: [PATCH] Removing unneeded classes and starting on reset. --- gui/OpenFaceDemo/MainWindow.xaml.cs | 10 + gui/OpenFaceDemo/OpenFaceDemo.csproj | 8 - gui/OpenFaceDemo/UI_items/AxesBorder.cs | 180 -------------- .../UI_items/AxesTimeSeriesPlot.xaml.cs | 8 +- gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml | 8 - .../UI_items/TimeSeriesPlot.xaml.cs | 231 ------------------ 6 files changed, 17 insertions(+), 428 deletions(-) delete mode 100644 gui/OpenFaceDemo/UI_items/AxesBorder.cs delete mode 100644 gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml delete mode 100644 gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml.cs diff --git a/gui/OpenFaceDemo/MainWindow.xaml.cs b/gui/OpenFaceDemo/MainWindow.xaml.cs index 782c0a6..fe309f4 100644 --- a/gui/OpenFaceDemo/MainWindow.xaml.cs +++ b/gui/OpenFaceDemo/MainWindow.xaml.cs @@ -387,6 +387,16 @@ namespace OpenFaceDemo clnf_model.Reset(); face_analyser.Reset(); reset = false; + + Dispatcher.Invoke(DispatcherPriority.Render, new TimeSpan(0, 0, 0, 0, 200), (Action)(() => + { + headPosePlot.ClearDataPoints(); + headPosePlot.ClearDataPoints(); + gazePlot.ClearDataPoints(); + smilePlot.ClearDataPoints(); + browPlot.ClearDataPoints(); + eyePlot.ClearDataPoints(); + })); } frame_id++; diff --git a/gui/OpenFaceDemo/OpenFaceDemo.csproj b/gui/OpenFaceDemo/OpenFaceDemo.csproj index 405e554..98208ba 100644 --- a/gui/OpenFaceDemo/OpenFaceDemo.csproj +++ b/gui/OpenFaceDemo/OpenFaceDemo.csproj @@ -78,16 +78,12 @@ MSBuild:Compile Designer - AxesTimeSeriesPlot.xaml CameraSelection.xaml - - TimeSeriesPlot.xaml - MSBuild:Compile Designer @@ -108,10 +104,6 @@ Designer MSBuild:Compile - - Designer - MSBuild:Compile - diff --git a/gui/OpenFaceDemo/UI_items/AxesBorder.cs b/gui/OpenFaceDemo/UI_items/AxesBorder.cs deleted file mode 100644 index 21d098f..0000000 --- a/gui/OpenFaceDemo/UI_items/AxesBorder.cs +++ /dev/null @@ -1,180 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Media; - -namespace OpenFaceDemo -{ - class AxesBorder : Border - { - - public double MinVal { get; set; } - public double MaxVal { get; set; } - public int NumVertGrid { get; set; } - - public bool ShowXLabel { get; set; } - public bool ShowYLabel { get; set; } - - public string RangeLabel { get; set; } - - public bool XTicks { get; set; } - - public Orientation Orientation { get; set; } - - public AxesBorder() - { - MinVal = -1; - MaxVal = 1; - NumVertGrid = 5; - ShowXLabel = true; - ShowYLabel = true; - XTicks = true; - } - - protected override void OnRender(DrawingContext dc) - { - base.OnRender(dc); - - if (Orientation == System.Windows.Controls.Orientation.Horizontal) - RenderHorizontal(dc); - else - RenderVertical(dc); - } - - private void RenderHorizontal(DrawingContext dc) - { - Pen p = new Pen(Brushes.Black, 1); - Pen q = new Pen(Brushes.LightGray, 1); - - double padLeft = Padding.Left; - double padBottom = Padding.Bottom - 2 + 10; - double padTop = Padding.Top; - double padRight = Padding.Right; - - // Draw horizontal gridlines - - double step_size = (MaxVal - MinVal)/(NumVertGrid - 1.0); - - for (int i = 0; i < NumVertGrid; i++) - { - double y = (int)(padTop + ((NumVertGrid - 1.0) - i) * ((ActualHeight - padBottom - padTop) / (NumVertGrid - 1.0))) - 0.5; - - double y_val = MinVal + i * step_size; - - if (y_val != 0) - dc.DrawLine(q, new Point(padLeft, y), new Point(ActualWidth - padRight, y)); - else - dc.DrawLine(p, new Point(padLeft, y), new Point(ActualWidth - padRight, y)); - - dc.DrawLine(p, new Point(padLeft - 10, y), new Point(padLeft, y)); - - //var t = FT((i / 2.0 - 1).ToString("0.0"), 10); - var t = FT((MinVal + i * step_size).ToString("0.0"), 10); - dc.DrawText(t, new Point(padLeft - t.Width - 12, y - t.Height / 2)); - } - - // Draw vertical gridlines - - for (int i = 0; i < 11; i++) - { - double x = (int)(padLeft + (10 - i) * ((ActualWidth - padLeft - padRight) / 10.0)) - 0.5; - if (i < 10) - dc.DrawLine(q, new Point(x, ActualHeight - padBottom), new Point(x, padTop)); - dc.DrawLine(p, new Point(x, ActualHeight - padBottom + 10), new Point(x, ActualHeight - padBottom)); - - if(XTicks) - { - var t = FT(i.ToString(), 10); - dc.DrawText(t, new Point(x - t.Width / 2, ActualHeight - padBottom + t.Height)); - } - } - - // Draw y axis - - dc.DrawLine(p, new Point(((int)padLeft) - 0.5, padTop), new Point(((int)padLeft) - 0.5, ActualHeight - padBottom)); - - // Draw x axis - //dc.DrawLine(p, new Point(padLeft, ((int)((ActualHeight - padBottom - padTop) / 2 + padTop)) - 0.5), new Point(ActualWidth - padRight, ((int)((ActualHeight - padBottom - padTop) / 2 + padTop)) - 0.5)); - - // Draw x axis label - if(ShowXLabel) - { - FormattedText ft = FT("History (seconds)", 20); - dc.DrawText(ft, new Point(padLeft + (ActualWidth - padLeft - padRight) / 2 - ft.Width / 2, ActualHeight - ft.Height)); - } - - // Draw y axis label - if(ShowYLabel) - { - FormattedText ft = FT(RangeLabel, 20); - dc.PushTransform(new RotateTransform(-90)); - dc.DrawText(ft, new Point(-ft.Width - ActualHeight / 2 + ft.Width / 2, 0)); - } - } - - private void RenderVertical(DrawingContext dc) - { - Pen p = new Pen(Brushes.Black, 1); - Pen q = new Pen(Brushes.LightGray, 1); - - double padLeft = Padding.Left; - double padBottom = Padding.Bottom - 2 + 10; - double padTop = Padding.Top; - double padRight = Padding.Right; - - // Draw horizontal gridlines - - for (int i = 0; i < 11; i++) - { - double y = (int)(padTop + (10 - i) * ((ActualHeight - padBottom - padTop) / 10.0)) - 0.5; - if (i > 0) - dc.DrawLine(q, new Point(padLeft, y), new Point(ActualWidth - padRight, y)); - dc.DrawLine(p, new Point(padLeft - 10, y), new Point(padLeft, y)); - var t = FT(i.ToString(), 10); - dc.DrawText(t, new Point(padLeft - t.Width - 12, y - t.Height / 2)); - } - - // Draw vertical gridlines - - for (int i = 0; i < 5; i++) - { - double x = (int)(padLeft + (4 - i) * ((ActualWidth - padLeft - padRight) / 4.0)) - 0.5; - if (i < 10) - dc.DrawLine(q, new Point(x, ActualHeight - padBottom), new Point(x, padTop)); - dc.DrawLine(p, new Point(x, ActualHeight - padBottom + 10), new Point(x, ActualHeight - padBottom)); - - var t = FT(((4-i) / 2.0 - 1).ToString("0.0"), 10); - dc.DrawText(t, new Point(x - t.Width / 2, ActualHeight - padBottom + t.Height)); - } - - // Draw y axis - - dc.DrawLine(p, new Point(((int)((ActualWidth - padRight - padLeft) / 2 + padLeft)) - 0.5, padTop), new Point(((int)((ActualWidth - padRight - padLeft) / 2 + padLeft)) - 0.5, ActualHeight - padBottom)); - - // Draw x axis - dc.DrawLine(p, new Point(padLeft, ((int)((ActualHeight - padBottom))) - 0.5), new Point(ActualWidth - padRight, ((int)((ActualHeight - padBottom))) - 0.5)); - - // Draw x axis label - - FormattedText ft = FT(RangeLabel, 20); - dc.DrawText(ft, new Point(padLeft + (ActualWidth - padLeft - padRight) / 2 - ft.Width / 2, ActualHeight - ft.Height)); - - // Draw y axis label - - ft = FT("History (seconds)", 20); - dc.PushTransform(new RotateTransform(-90)); - dc.DrawText(ft, new Point(-ft.Width - ActualHeight / 2 + ft.Width / 2, 0)); - } - - private FormattedText FT(string text, int size) - { - return new FormattedText(text, CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight, new Typeface("Verdana"), size, Brushes.Black); - } - - } -} diff --git a/gui/OpenFaceDemo/UI_items/AxesTimeSeriesPlot.xaml.cs b/gui/OpenFaceDemo/UI_items/AxesTimeSeriesPlot.xaml.cs index f68671c..306cc75 100644 --- a/gui/OpenFaceDemo/UI_items/AxesTimeSeriesPlot.xaml.cs +++ b/gui/OpenFaceDemo/UI_items/AxesTimeSeriesPlot.xaml.cs @@ -22,7 +22,7 @@ namespace OpenFaceDemo { public DataPointGraph() { - Time = TimeSeriesPlot.CurrentTime; + Time = AxesTimeSeriesPlot.CurrentTime; } public DateTime Time { get; set; } @@ -113,6 +113,12 @@ namespace OpenFaceDemo dataPoints.Enqueue(dp); } + public void ClearDataPoints() + { + lock (dataPoints) + dataPoints.Clear(); + } + private void Timer_Tick(object sender, EventArgs e) { PruneData(); diff --git a/gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml b/gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml deleted file mode 100644 index 1e4cadf..0000000 --- a/gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - diff --git a/gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml.cs b/gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml.cs deleted file mode 100644 index 76e8f84..0000000 --- a/gui/OpenFaceDemo/UI_items/TimeSeriesPlot.xaml.cs +++ /dev/null @@ -1,231 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; -using System.Windows.Threading; - -namespace OpenFaceDemo -{ - public class DataPoint - { - public DataPoint() - { - Time = TimeSeriesPlot.CurrentTime; - - } - public DateTime Time { get; set; } - - public Dictionary values = new Dictionary(); - - public double Confidence { get; set; } - } - /// - /// Interaction logic for TimeSeriesPlot.xaml - /// - public partial class TimeSeriesPlot : UserControl - { - - #region High-Resolution Timing - static DateTime startTime; - static Stopwatch sw = new Stopwatch(); - static TimeSeriesPlot() - { - startTime = DateTime.Now; - sw.Start(); - } - public static DateTime CurrentTime - { - get { return startTime + sw.Elapsed; } - } - #endregion - - - public Orientation Orientation { get; set; } - - public bool ShowLegend { get; set; } - - Queue dataPoints = new Queue(); - TimeSpan historyLength = TimeSpan.FromSeconds(10); - Dictionary brushes = new Dictionary(); - Dictionary brush_thicknesses = new Dictionary(); - Dictionary line_names = new Dictionary(); - Dictionary brush_colors = new Dictionary(); - - public TimeSeriesPlot() - { - InitializeComponent(); - ShowLegend = false; - ClipToBounds = true; - DispatcherTimer dt = new DispatcherTimer(TimeSpan.FromMilliseconds(20), DispatcherPriority.Background, Timer_Tick, Dispatcher); - } - - private void PruneData() - { - lock (dataPoints) - { - while (dataPoints.Count > 0 && dataPoints.Peek().Time < CurrentTime - historyLength - TimeSpan.FromSeconds(2)) - dataPoints.Dequeue(); - } - } - - public void AddDataPoint(DataPoint dp) - { - lock (dataPoints) - dataPoints.Enqueue(dp); - } - - private void Timer_Tick(object sender, EventArgs e) - { - PruneData(); - - if (this.IsVisible) - InvalidateVisual(); - } - - private FormattedText FT(string text, int size) - { - return new FormattedText(text, System.Globalization.CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight, new Typeface("Verdana"), size, Brushes.Black); - } - - public void AssocColor(int seriesId, Color b) - { - Color bTransparent = b; - bTransparent.A = 0; - - GradientStopCollection gs = new GradientStopCollection(); - gs.Add(new GradientStop(bTransparent, 0)); - gs.Add(new GradientStop(b, 0.2)); - LinearGradientBrush g = new LinearGradientBrush(gs, new Point(0, 0), Orientation == System.Windows.Controls.Orientation.Horizontal ? new Point(ActualWidth, 0) : new Point(0, ActualHeight)); - g.MappingMode = BrushMappingMode.Absolute; - g.Freeze(); - brushes[seriesId] = g; - - brush_colors[seriesId] = b; - } - - public void AssocThickness(int seriesId, int thickness) - { - brush_thicknesses[seriesId] = thickness; - } - - public void AssocName(int seriesId, String name) - { - line_names[seriesId] = name; - } - - protected override void OnRender(DrawingContext dc) - { - base.OnRender(dc); - - - - DataPoint[] localPoints; - lock (dataPoints) - localPoints = dataPoints.ToArray(); - - var pfs = new Dictionary(); - - for (int i = 0; i < localPoints.Length; i++) - { - var ptTime = localPoints[i].Time; - var ptAge = (DateTime.Now - ptTime).TotalSeconds; - foreach (var kvp in localPoints[i].values) - { - var seriesId = kvp.Key; - - double v = Math.Min(Math.Max(kvp.Value, 0), 1); - - - double x = 0; - double y = 0; - - if (Orientation == System.Windows.Controls.Orientation.Horizontal) - { - x = ActualWidth - (CurrentTime - localPoints[i].Time).TotalMilliseconds * (ActualWidth / historyLength.TotalMilliseconds); - y = ActualHeight - ActualHeight * v; - } - else - { - y = ActualHeight - (CurrentTime - localPoints[i].Time).TotalMilliseconds * (ActualHeight / historyLength.TotalMilliseconds); - x = ActualWidth * v; - } - - if (!pfs.ContainsKey(seriesId)) - { - pfs[seriesId] = new PathFigure(); - pfs[seriesId].IsClosed = false; - pfs[seriesId].StartPoint = new Point(x, y); - } - else - { - pfs[seriesId].Segments.Add(new LineSegment(new Point(x, y), true)); - } - } - } - - - foreach (var kvp in pfs) - { - var seriesId = kvp.Key; - var pf = kvp.Value; - - Brush b = brushes.ContainsKey(seriesId) ? brushes[seriesId] : Brushes.Black; - - int thickness = brush_thicknesses.ContainsKey(seriesId) ? brush_thicknesses[seriesId] : 2; - - PathGeometry pg = new PathGeometry(new PathFigure[] { pf }); - - - Pen p = new Pen(b, thickness); - - if (line_names.ContainsKey(seriesId) && line_names[seriesId].CompareTo("State rapport") == 0) - { - double[] dashValues = { 5.0, 5.0, 5.0 }; - p.DashStyle = new System.Windows.Media.DashStyle(dashValues, 0); - } - dc.DrawGeometry(null, p, pg); - } - - if (ShowLegend && line_names.Count > 0) - { - int height_one = 18; - int height = height_one * line_names.Count; - - Pen p = new Pen(Brushes.Black, 1); - Brush legend_b = new SolidColorBrush(Color.FromRgb(255, 255, 255)); - - dc.DrawRectangle(legend_b, p, new Rect(0, 1, 100, height)); - - int i = 0; - foreach (var key_name_pair in line_names) - { - var line_name = key_name_pair.Value; - FormattedText ft = FT(line_name, 11); - - // Draw the text - dc.DrawText(ft, new Point(15, 1 + height_one * i)); - // Draw example lines - - Brush legend_c = new SolidColorBrush(brush_colors[key_name_pair.Key]); - Pen p_line = new Pen(legend_c, brush_thicknesses[key_name_pair.Key]); - dc.DrawLine(p_line, new Point(0, 1 + height_one * i + height_one / 2), new Point(14, 1 + height_one * i + height_one / 2)); - i++; - } - } - - } - - - } - -}