Никита
6 years ago
4 changed files with 128 additions and 31 deletions
@ -0,0 +1,90 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Diagnostics; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using System.Timers; |
|||
using System.Windows.Controls; |
|||
using System.Windows.Media; |
|||
using System.Windows.Shapes; |
|||
|
|||
namespace Signal_Generator |
|||
{ |
|||
public class DrawTask : Task |
|||
{ |
|||
Canvas currentCanvas; |
|||
System.Timers.Timer taskTimer; |
|||
Stopwatch stopwatch = new Stopwatch(); |
|||
MultiSignal currentMultiSignal; |
|||
public DStatus dStatus; |
|||
public enum DStatus |
|||
{ |
|||
Created, Running, Paused, Finished, Canceled |
|||
} |
|||
|
|||
public DrawTask(Action a) : base(a) { } |
|||
|
|||
public void buildTask(MultiSignal s, Canvas c) |
|||
{ |
|||
currentCanvas = c; |
|||
currentMultiSignal = s; |
|||
dStatus = DStatus.Running; |
|||
drawSignalAtCanvas(); |
|||
stopwatch.Start(); |
|||
taskTimer = new System.Timers.Timer(2000); |
|||
taskTimer.Elapsed += updateTextForms; |
|||
taskTimer.Enabled = true; |
|||
} |
|||
|
|||
private void updateTextForms(object sender, ElapsedEventArgs e) |
|||
{ |
|||
var elapsed = stopwatch.ElapsedMilliseconds; |
|||
} |
|||
|
|||
private void drawSignalAtCanvas() |
|||
{ |
|||
double lastX = 0, lastY = 0; |
|||
double w = currentCanvas.ActualWidth; |
|||
for (int i = 0; i != (int)w; i++) |
|||
{ |
|||
double y = currentMultiSignal.currentAmplitude(i / 5.0); |
|||
drawLine(lastX, lastY, i, y); |
|||
lastX = i; |
|||
lastY = y; |
|||
Thread.Sleep(10); |
|||
switch (dStatus) |
|||
{ |
|||
case DStatus.Paused: |
|||
while (dStatus == DStatus.Paused) |
|||
Thread.Sleep(10); |
|||
break; |
|||
case DStatus.Canceled: return; |
|||
} |
|||
} |
|||
dStatus = DStatus.Finished; |
|||
} |
|||
|
|||
private void drawLine(double x1, double y1, double x2, double y2) |
|||
{ |
|||
Action a = () => { |
|||
Line l = new Line(); |
|||
l.StrokeThickness = 1; |
|||
l.Stroke = Brushes.Red; |
|||
l.X1 = x1; |
|||
l.Y1 = remap(y1); |
|||
l.X2 = x2; |
|||
l.Y2 = remap(y2); |
|||
currentCanvas.Children.Add(l); |
|||
}; |
|||
currentCanvas.Dispatcher.Invoke(a); |
|||
} |
|||
|
|||
private double remap(double x, double oldMin = -100.0, double oldMax = 100.0, double newMin = 100.0, double newMax = 0.0) |
|||
{ |
|||
newMin = currentCanvas.ActualHeight; |
|||
return newMin + (x - oldMin) * (newMax - newMin) / (oldMax - oldMin); |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue