livia-test/DicomViewer/Views/MainWindow.xaml.cs
2025-03-28 14:31:53 +08:00

79 lines
2.1 KiB
C#

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using DicomViewer.ViewModels;
using FellowOakDicom;
using FellowOakDicom.Imaging;
using Ookii.Dialogs.Wpf;
namespace DicomViewer.Views;
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
private readonly MainWindowViewModel _viewModel = new();
public MainWindow()
{
//TODO::move this somewhere
new DicomSetupBuilder()
.RegisterServices(s => s.AddFellowOakDicom().AddImageManager<WinFormsImageManager>())
.Build();
InitializeComponent();
DataContext = _viewModel;
}
private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta < 0)
{
((MainWindowViewModel)DataContext).PrevImage();
}
else
{
((MainWindowViewModel)DataContext).NextImage();
}
e.Handled = true;
}
private void OnImageMouseUp(object sender, MouseButtonEventArgs e)
{
(int x, int y) = GetPixelIndex(e.GetPosition(Image));
_viewModel.UpdateCbfPlot(x, y);
}
private void OnImageMouseMove(object sender, MouseEventArgs e)
{
(int x, int y) = GetPixelIndex(e.GetPosition(Image));
_viewModel.CursorPosition = $"{x}, {y}";
}
private (int x, int y) GetPixelIndex(Point pos)
{
if (_viewModel.CurrentImage == null)
return (0, 0);
int x = (int)Math.Floor(pos.X * _viewModel.CurrentImage.Image.PixelWidth / Image.ActualWidth);
int y = (int)Math.Floor(pos.Y * _viewModel.CurrentImage.Image.PixelHeight / Image.ActualHeight);
return (x, y);
}
private void OpenButtonOnClick(object sender, RoutedEventArgs e)
{
VistaFolderBrowserDialog dialog = new();
if (!(dialog.ShowDialog() ?? false))
return;
_viewModel.LoadData(dialog.SelectedPath);
}
private void ToggleButtonOnChecked(object sender, RoutedEventArgs e)
{
_viewModel.CurrentImageName = (string)((RadioButton)sender).DataContext;
}
}