Exemplo n.º 1
0
        public void Draw()
        {
            drawXOffset     = 0;
            drawYOffset     = (int)canvasTracing.ActualHeight / 2;
            drawXMultiplier = (int)canvasTracing.ActualWidth / wfStrip.lengthSeconds;
            drawYMultiplier = -(int)canvasTracing.ActualHeight / 2;

            if (wfStrip.Points.Count < 2)
            {
                return;
            }

            wfStrip.RemoveNull();
            wfStrip.Sort();

            drawPath = new Path {
                Stroke = drawBrush, StrokeThickness = 1
            };
            drawGeometry = new StreamGeometry {
                FillRule = FillRule.EvenOdd
            };

            using (drawContext = drawGeometry.Open()) {
                drawContext.BeginFigure(new System.Windows.Point(
                                            (int)(wfStrip.Points [0].X * drawXMultiplier) + drawXOffset,
                                            (int)(wfStrip.Points [0].Y * drawYMultiplier) + drawYOffset),
                                        true, false);

                for (int i = 1; i < wfStrip.Points.Count; i++)
                {
                    if (wfStrip.Points [i].X > wfStrip.lengthSeconds * 2)
                    {
                        continue;
                    }

                    drawContext.LineTo(new System.Windows.Point(
                                           (int)(wfStrip.Points [i].X * drawXMultiplier) + drawXOffset,
                                           (int)(wfStrip.Points [i].Y * drawYMultiplier) + drawYOffset),
                                       true, true);
                }
            }

            drawGeometry.Freeze();
            drawPath.Data = drawGeometry;

            canvasTracing.Children.Clear();
            canvasTracing.Children.Add(drawPath);
        }