protected override void UpdateCore() { if (DataSource == null) { return; } if (Plotter == null) { return; } if (!IsEnabled) { return; } Rect output = Viewport.Output; var transform = GetTransform(); if (FilteredPoints == null || !(transform.DataTransform is IdentityTransform)) { IEnumerable <Point> points = GetPoints(); if (!points.Any()) { return; } var bounds = BoundsHelper.GetViewportBounds(points, transform.DataTransform); if (bounds.Width >= 0 && bounds.Height >= 0) { bounds = new DataRect(bounds.XMin - 360.0, bounds.YMin, bounds.Width + 720.0, bounds.Height); } Viewport2D.SetContentBounds(this, bounds); // getting new value of transform as it could change after calculating and setting content bounds. transform = GetTransform(); List <Point> transformedPoints = transform.DataToScreenAsList(points); var screenOffset = transform.DataToScreen(new Point(360, 0)); // Analysis and filtering of unnecessary points FilteredPoints = new FakePointList(transformedPoints, double.NegativeInfinity, double.PositiveInfinity); if (ProvideVisiblePoints) { List <Point> viewportPointsList = null; viewportPointsList = new List <Point>(transformedPoints.Count); if (transform.DataTransform is IdentityTransform) { viewportPointsList.AddRange(points); } else { var viewportPoints = points.DataToViewport(transform.DataTransform); viewportPointsList.AddRange(viewportPoints); } SetVisiblePoints(this, new ReadOnlyCollection <Point>(viewportPointsList)); } Offset = new Vector(); } }
protected override void UpdateCore() { if (DataSource == null || Viewport == null || Viewport.Output == new Rect(0,0,0,0)) return; if (path.Clip == null) updateClippingRect(); Rect output = Viewport.Output; var transform = GetTransform(); PerformanceCounter.startStopwatch("Updating linegraph core: Getting points"); IEnumerable<Point> points = GetPoints(); PerformanceCounter.stopStopwatch("Updating linegraph core: Getting points"); PerformanceCounter.startStopwatch("Updating linegraph core: Getting Content bounds"); ContentBounds = BoundsHelper.GetViewportBounds(points, transform.DataTransform); PerformanceCounter.stopStopwatch("Updating linegraph core: Getting Content bounds"); List<Point> transformedPoints = transform.DataToScreen(points); PerformanceCounter.startStopwatch("Updating linegraph core: Creating fake points"); filteredPoints = new FakePointList(FilterPoints(transformedPoints), output.Left, output.Right,output.Top,output.Bottom); PerformanceCounter.stopStopwatch("Updating linegraph core: Creating fake points"); PerformanceCounter.startStopwatch("Updating linegraph core: adding segments"); if (filteredPoints.Count!=0) { segments.Clear(); for (int i = 0; i < filteredPoints.Count; i++) { LineSegment segment = new LineSegment(); segment.Point = filteredPoints[i]; segments.Add(segment); } figure.StartPoint = filteredPoints.StartPoint; PerformanceCounter.stopStopwatch("Updating linegraph core: adding segments"); } }
protected override void UpdateCore() { if (DataSource == null) return; if (Plotter == null) return; Rect output = Viewport.Output; var transform = GetTransform(); if (filteredPoints == null || !(transform.DataTransform is IdentityTransform)) { IEnumerable<Point> points = GetPoints(); var bounds = BoundsHelper.GetViewportBounds(points, transform.DataTransform); Viewport2D.SetContentBounds(this, bounds); // getting new value of transform as it could change after calculating and setting content bounds. transform = GetTransform(); List<Point> transformedPoints = transform.DataToScreenAsList(points); // Analysis and filtering of unnecessary points filteredPoints = new FakePointList(FilterPoints(transformedPoints), output.Left, output.Right); if (ProvideVisiblePoints) { List<Point> viewportPointsList = new List<Point>(transformedPoints.Count); if (transform.DataTransform is IdentityTransform) { viewportPointsList.AddRange(points); } else { var viewportPoints = points.DataToViewport(transform.DataTransform); viewportPointsList.AddRange(viewportPoints); } SetVisiblePoints(this, new ReadOnlyCollection<Point>(viewportPointsList)); } Offset = new Vector(); } else { double left = output.Left; double right = output.Right; double shift = Offset.X; left -= shift; right -= shift; filteredPoints.SetXBorders(left, right); } }
void filters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { filteredPoints = null; UpdateCore(); }
protected override void UpdateCore() { if (DataSource == null) return; Rect output = Viewport.Output; var transform = GetTransform(); if (filteredPoints == null || !(transform.DataTransform is IdentityTransform)) { IEnumerable<Point> points = GetPoints(); ContentBounds = BoundsHelper.GetViewportBounds(points, transform.DataTransform); transform = GetTransform(); List<Point> transformedPoints = transform.DataToScreen(points); // Analysis and filtering of unnecessary points filteredPoints = new FakePointList(FilterPoints(transformedPoints), output.Left, output.Right); Offset = new Vector(); } else { double left = output.Left; double right = output.Right; double shift = Offset.X; left -= shift; right -= shift; filteredPoints.SetXBorders(left, right); } }