using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using GSS2.Core.Hardware; using GSS2.UI.Core.ViewModels; namespace GSS2.Test.ViewModels; public partial class MainViewModel : ViewModelBase { private readonly ILogger _logger; private readonly CameraService _cameraService; private readonly IlluminatorService _illuminatorService; [ObservableProperty] private CameraViewModel _cameraViewModel; [ObservableProperty] private ResourcesViewModel _resourcesViewModel; [ObservableProperty] private IlluminatorControllerViewModel _illuminatorControllerViewModel; [ObservableProperty] private OpenCvSharp.Mat? _image1; [ObservableProperty] private OpenCvSharp.Mat? _image2; [ObservableProperty] private OpenCvSharp.Mat? _image3; [ObservableProperty] private OpenCvSharp.Mat? _image4; [ObservableProperty] private IRelayCommand _buttonCaptureClick; [ObservableProperty] private IRelayCommand _buttonUpClick; [ObservableProperty] private IRelayCommand _buttonDownClick; [ObservableProperty] private int _currentIndex; [ObservableProperty] private bool _canScrollForward; [ObservableProperty] private bool _canScrollBackward; public MainViewModel(ILogger logger, CameraViewModel cameraViewModel, ResourcesViewModel resourcesViewModel, IlluminatorControllerViewModel illuminatorControllerViewModel, CameraService cameraService, IlluminatorService illuminatorService) { _logger = logger; _logger.LogInformation("Initialization"); _cameraService = cameraService; _illuminatorService = illuminatorService; CameraViewModel = cameraViewModel; ResourcesViewModel = resourcesViewModel; IlluminatorControllerViewModel = illuminatorControllerViewModel; ButtonCaptureClick = new RelayCommand(() => { Task.Run(async () => { _illuminatorService.TurnOn(); _illuminatorService.SetIntensity(1, 0, 0); await _cameraService.CaptureImage(CancellationToken.None, 3).ContinueWith(image => Image1 = image.Result); _illuminatorService.SetIntensity(0, 1, 1); await _cameraService.CaptureImage(CancellationToken.None, 3).ContinueWith(image => Image2 = image.Result); _illuminatorService.SetIntensity(0, 1, 0); await _cameraService.CaptureImage(CancellationToken.None, 3).ContinueWith(image => Image3 = image.Result); _illuminatorService.SetIntensity(0, 0, 1); await _cameraService.CaptureImage(CancellationToken.None, 3).ContinueWith(image => Image4 = image.Result); _illuminatorService.SetIntensity(0, 0, 0); _illuminatorService.TurnOff(); }); }); ButtonUpClick = new RelayCommand(() => CurrentIndex--); ButtonDownClick = new RelayCommand(() => CurrentIndex++); _logger.LogInformation("Initialized"); } }