using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Media;
using MECF.Framework.UI.Client.ClientBase.Tree;
using SciChart.Charting.Visuals.RenderableSeries;
namespace MECF.Framework.UI.Client.ClientBase.Charting
{
public class FastLineSeries : FastLineRenderableSeries, INotifyPropertyChanged
{
private double _dataFactor = 1.0;
private double _dataOffset = 0.0;
public event PropertyChangedEventHandler PropertyChanged;
#region Constructors
public FastLineSeries(string dataName)
: this(dataName, dataName, Colors.Black)
{
}
public FastLineSeries(string dataName, string displayName, Color seriesColor, int? fifoCapacity = null)
{
UniqueId = Guid.NewGuid().ToString();
Stroke = seriesColor;
IsVisible = true;
LineThickness = 1.0;
XAxisId = "DefaultAxisId";
YAxisId = "DefaultAxisId";
DataFactor = 1.0;
DataOffset = 0.0;
DataSeries = new FastLineDataSeries()
{
SeriesName = dataName,
FifoCapacity = fifoCapacity,
Factor = DataFactor,
Offset = DataOffset
};
//! 注意目前的程序要求 DataSeries.SeriesName 必须等于 DataName.
DisplayName = displayName;
DataName = dataName;
}
#endregion
#region Properties
public string UniqueId { get; }
public string DataName { get; }
public string DisplayName
{
get => DataSeries.SeriesName;
set => DataSeries.SeriesName = value;
}
public double LineThickness
{
get => StrokeThickness;
set
{
var num = Convert.ToInt32(value);
if (num < 1)
num = 1;
if (num > 100)
num = 100;
StrokeThickness = num;
InvokePropertyChanged();
}
}
public double DataFactor
{
get => _dataFactor;
set
{
if (Math.Abs(_dataFactor - value) <= 0.001)
return;
_dataFactor = value;
GetDataSeries().Factor = _dataFactor;
InvokePropertyChanged();
UpdateChartSeriesValue();
}
}
public double DataOffset
{
get => _dataOffset;
set
{
if (Math.Abs(_dataOffset - value) <= 0.001)
return;
_dataOffset = value;
GetDataSeries().Offset = _dataOffset;
InvokePropertyChanged();
UpdateChartSeriesValue();
}
}
public TreeNode BackendParameterNode { get; set; }
#endregion
#region Methods
///
/// 获取XyDataSeries类型的DataSeries对象
///
///
public FastLineDataSeries GetDataSeries()
{
return DataSeries as FastLineDataSeries;
}
///
/// /
///
public void UpdateChartSeriesValue()
{
using (DataSeries.SuspendUpdates())
{
var ds = GetDataSeries();
for (var i = 0; i < ds.Count; i++)
{
var y = (ds.Metadata[i] as ParameterNodePoint)?.Value;
if (y == null)
continue;
ds.Update(i, (double)y * _dataFactor + DataOffset);
}
//var dataSeries = DataSeries as XyDataSeries;
//for (var index = 0; index < dataSeries.Count; ++index)
// dataSeries.Update(index, _queueRawData.ElementAt(index).Item2 * _dataFactor + _dataOffset);
}
}
public void ClearData()
{
DataSeries.Clear();
}
private void InvokePropertyChanged([CallerMemberName] string propertyName = "")
{
if (string.IsNullOrEmpty(propertyName))
return;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public override string ToString()
{
return DataName;
}
#endregion
}
}