using Shaker.Models; using System.Collections.Generic; namespace ShakerApp.ViewModels { internal abstract class BaseMainPageViewModel:DisplayViewModelBase,IMainPageViewModel where TModel:IModel { public const string THDData = "THDData"; public const string TimeDomainData = "TimeDomainData"; public abstract MainPageType PageType { get; } public virtual bool Start() { return true; } public virtual void Stop() { } public virtual void SaveTestData(TDMS.ITDMSFile? file) { if (file == null) return; var group = file.Contains(TimeDomainData) ? file[TimeDomainData] : file.AddGroup(TimeDomainData); if (group == null) return; for (int i = 0; i < ShakerConfigViewModel.Instance.Model.AnalogSignalConfigs.Count; i++) { bool exit = group.Contains(ShakerConfigViewModel.Instance.Model.AnalogSignalConfigs[i].Name); var ch = exit ? group[ShakerConfigViewModel.Instance.Model.AnalogSignalConfigs[i].Name] : group.AddChannel(TDMS.Common.TDMSDataType.Double, ShakerConfigViewModel.Instance.Model.AnalogSignalConfigs[i].Name, ShakerConfigViewModel.Instance.Model.AnalogSignalConfigs[i].Unit); ch?.AppendData(ShakerDataViewModel.Instance.GetAnalogRawData(i)); } group = file.Contains(THDData) ? file[THDData] : file.AddGroup(THDData); if (group == null) return; for (int i = 0; i < ShakerDataViewModel.Instance.AllowTHDChannels.Count; i++) { var ch = group.Contains(ShakerDataViewModel.Instance.AllowTHDChannels[i]) ? group[ShakerDataViewModel.Instance.AllowTHDChannels[i]] : group.AddChannel(TDMS.Common.TDMSDataType.Float, ShakerDataViewModel.Instance.AllowTHDChannels[i], "%"); if (ch == null) continue; var statistics = ShakerDataViewModel.Instance.GetStatistics(ch.Name); if (statistics == null) continue; ch.AppendData(statistics.THD); } if (MainPageViewModel.Instance.MainPage is SineMainPageViewModel sine) { var ch = group.Contains(nameof(SweepData.Frequency)) ? group[nameof(SweepData.Frequency)] : group.AddChannel(TDMS.Common.TDMSDataType.Double, nameof(SweepData.Frequency), "Hz"); if (ch == null) return; ch.AppendData(sine.CurrentFrequency); if (SweepConfigViewModel.Instance.SignalType == SignalType.Sweep) { ch = group.Contains(nameof(SineMainPageViewModel.SweepIndex)) ? group[nameof(SineMainPageViewModel.SweepIndex)] : group.AddChannel(TDMS.Common.TDMSDataType.Int32, nameof(SineMainPageViewModel.SweepIndex), ""); if (ch == null) return; ch.AppendData((int)sine.SweepIndex); } } } public virtual void SaveTdmsConfig(TDMS.ITDMSFile? config) { ShakerConfigViewModel.Instance.SaveTdmsConfig(config); } public virtual void InitUI() { } public virtual void UpdateData(List model) { } } }