using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; namespace RealTimeGraphEx.FastGraphs { public class RealTimeGraphExWaveErase : RealTimeGraphExLineErase { #region Constructors public RealTimeGraphExWaveErase() : base() { } #endregion #region Override Methods /// /// Set the cross thread fields. /// protected override void OnSetCrossThreadFields() { base.OnSetCrossThreadFields(); this.Dispatcher.Invoke(() => { _minimum = _maximum * -1; }, System.Windows.Threading.DispatcherPriority.Send); } /// /// Draw the actual polygon on the image. /// /// protected override void OnDrawVisuals(WriteableBitmap bmp) { Color stroke = _graphController.dataSeries.GetStrokeColor() != null ? _graphController.dataSeries.GetStrokeColor().Value : _stroke; Color fill = _graphController.dataSeries.GetFillColor() != null ? _graphController.dataSeries.GetFillColor().Value : _fill; double scale = GetPolygonScaleFactor(); double currentWidth = _endReached ? _width : xValueCounter; if (_fillGraph) //Fill Graph { bmp.FillPolygon(graphPolygon.ToPolygonPointsWaveFill(_offSetX, _offSetY, _width, _height, scale, ConvertYToImageYFliped), fill); } DrawPolyline(bmp, graphPolygon.ToPolygonPoints(_offSetX, _offSetY, scale, ConvertYToImageYFliped), stroke); DrawPolyline(bmp, graphPolygon.ToPolygonPointsReflection(_offSetX, _offSetY, _height, scale, ConvertYToImageYFliped), stroke); //Draw marker if (_showMarker) { if (_currentReplaceIndex > 0) { double x = ((_currentReplaceIndex * scale) + _offSetX); bmp.DrawLine((int)x, 0, (int)x, (int)_mainHeight, _markerColor); } } if (_enableMarkerPosition) { MarkerPosition = new Point((_currentReplaceIndex * scale) + _offSetX, ConvertYToImageYFliped(lastVirtualValue) + _offSetY); } } #endregion } }