From febeda21c7d8e20ff98d8a4b351d55a82c5aa051 Mon Sep 17 00:00:00 2001 From: chuan Date: Sun, 28 Jun 2026 15:34:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9F=BA=E7=A1=80=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + src/RamanApp/App.axaml.cs | 37 +- src/RamanApp/MainWindow.axaml | 12 +- src/RamanApp/MainWindow.axaml.cs | 11 +- src/RamanApp/RamanApp.csproj | 4 + src/RamanApp/SampleData/sample_spectra.csv | 1338 +++++++++++++++++ src/RamanApp/Services/CalibrationStore.cs | 98 ++ .../Services/FakeSpectrometerDevice.cs | 181 +-- src/RamanApp/Services/ISpectrometerDevice.cs | 12 +- src/RamanApp/Services/SampleDataProvider.cs | 84 ++ src/RamanApp/Services/SpectrumProcessor.cs | 27 + .../ViewModels/AcquisitionViewModel.cs | 7 +- .../ViewModels/MainWindowViewModel.cs | 284 +++- src/RamanTester/Program.cs | 3 + .../Runtime/SpectrometerRuntimeWorkspace.cs | 4 +- .../SpectrometerRuntimeWorkspaceTests.cs | 22 + 16 files changed, 1992 insertions(+), 134 deletions(-) create mode 100644 src/RamanApp/SampleData/sample_spectra.csv create mode 100644 src/RamanApp/Services/CalibrationStore.cs create mode 100644 src/RamanApp/Services/SampleDataProvider.cs diff --git a/.gitignore b/.gitignore index 154e127..7fd6777 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +tmp/ + ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## diff --git a/src/RamanApp/App.axaml.cs b/src/RamanApp/App.axaml.cs index b478874..4d40d83 100644 --- a/src/RamanApp/App.axaml.cs +++ b/src/RamanApp/App.axaml.cs @@ -1,3 +1,5 @@ +using System; +using System.Linq; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; @@ -16,9 +18,42 @@ public partial class App : Application { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { - desktop.MainWindow = new MainWindow(); + int simulateIndex = ParseSimulateArg(desktop.Args); + var noiseRange = ParseRangeArg(desktop.Args); + desktop.MainWindow = new MainWindow(simulateIndex, noiseRange); } base.OnFrameworkInitializationCompleted(); } + + private static int ParseSimulateArg(string[]? args) + { + if (args == null) return -1; + for (int i = 0; i < args.Length; i++) + { + if (string.Equals(args[i], "--simulate", StringComparison.OrdinalIgnoreCase)) + { + if (i + 1 < args.Length && int.TryParse(args[i + 1], out int idx) && idx >= 1 && idx <= 4) + return idx; + return 1; + } + } + return -1; + } + + private static (double Lo, double Hi)? ParseRangeArg(string[]? args) + { + if (args == null) return null; + for (int i = 0; i < args.Length; i++) + { + if (string.Equals(args[i], "--range", StringComparison.OrdinalIgnoreCase) + && i + 2 < args.Length + && double.TryParse(args[i + 1], System.Globalization.CultureInfo.InvariantCulture, out double lo) + && double.TryParse(args[i + 2], System.Globalization.CultureInfo.InvariantCulture, out double hi)) + { + return (lo, hi); + } + } + return null; + } } diff --git a/src/RamanApp/MainWindow.axaml b/src/RamanApp/MainWindow.axaml index ae70a06..9cacd6f 100644 --- a/src/RamanApp/MainWindow.axaml +++ b/src/RamanApp/MainWindow.axaml @@ -206,7 +206,7 @@ - - -