90 lines
4.2 KiB
C#
90 lines
4.2 KiB
C#
using System.Collections.Concurrent;
|
|
using System.Collections.ObjectModel;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using Livia.Models;
|
|
using Livia.Models.Data;
|
|
using Livia.Utility.DependencyInjection;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace Livia.ViewModels;
|
|
|
|
public class ImageRotationViewerGroupControlViewModel(IDataBlockLoader dataBlockLoader)
|
|
: ObservableObject, ILiviaModuleViewModel
|
|
{
|
|
public ObservableCollection<ImageRotationViewerControlViewModel> ImageCollection { get; } = [];
|
|
public int ImageCollectionRows { get => _imageCollectionRows; private set => SetProperty(ref _imageCollectionRows, value); }
|
|
private int _imageCollectionRows;
|
|
|
|
public async Task LoadData(DataBlock dataBlock)
|
|
{
|
|
foreach (ImageRotationViewerControlViewModel viewModel in ImageCollection)
|
|
{
|
|
viewModel.ClearData();
|
|
}
|
|
ImageCollection.Clear();
|
|
|
|
AdditionalInfoJson additionalInfo = dataBlockLoader.GetSharedData<AdditionalInfoJson>("additionalInfo");
|
|
|
|
foreach (AxialOverviewImageInfo axialOverviewImageInfo in additionalInfo.AxialOverviewImageInfoList)
|
|
{
|
|
string displayName = axialOverviewImageInfo.ImgId;
|
|
|
|
//read color bar
|
|
ColorBarControlViewModel colorBarControlViewModel = ActivatorUtilities.CreateInstance<ColorBarControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
int findIndex = additionalInfo.MosaicImageInfoList.FindIndex(item => item.ImgId == axialOverviewImageInfo.ImgId);
|
|
if (findIndex >= 0)
|
|
{
|
|
MosaicImageInfo info = additionalInfo.MosaicImageInfoList[findIndex];
|
|
if (info.Range != null)
|
|
{
|
|
colorBarControlViewModel.ColorBarRangeMin = info.Range[0];
|
|
colorBarControlViewModel.ColorBarRangeMax = info.Range[1];
|
|
|
|
colorBarControlViewModel.ColorBarUnit = info.Unit;
|
|
colorBarControlViewModel.ImagePath = info.IsGray ? ColorBarControlViewModel.BlackWhiteColorBarImage : ColorBarControlViewModel.PerfusionColorBarImage;
|
|
}
|
|
else
|
|
{
|
|
colorBarControlViewModel.Visible = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
colorBarControlViewModel.Visible = false;
|
|
}
|
|
|
|
ImageRotationViewerControlViewModel viewModel = ActivatorUtilities.CreateInstance<ImageRotationViewerControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
viewModel.DisplayName = displayName;
|
|
viewModel.StructLoadPath = axialOverviewImageInfo.FilePath;
|
|
viewModel.StructDataType = ImageRotationViewerDataType.Dicom3D;
|
|
viewModel.ColorBarControlViewModel = colorBarControlViewModel;
|
|
viewModel.ImageIndexSyncKey = "structure";
|
|
viewModel.ShowHelperTip = additionalInfo.MosaicRoiOverlayInfoList.Exists(n => n.ImgId.Equals(axialOverviewImageInfo.ImgId));
|
|
viewModel.Init();
|
|
await viewModel.LoadData(dataBlock);
|
|
|
|
Dictionary<string, ConcurrentBag<RoiExpanderControlViewModel>> roiDictionary = dataBlockLoader.GetSharedData<Dictionary<string, ConcurrentBag<RoiExpanderControlViewModel>>>("roiCollection");
|
|
//add roi to dictionary.
|
|
if (RoiSummaryControlViewModel.RoiTabIdToTabIndexDictionary != null)
|
|
{
|
|
foreach (RoiOverlayInfo overlayInfo in additionalInfo.AxialRoiOverlayInfoList.Where(overlayInfo => overlayInfo.ImgId == axialOverviewImageInfo.ImgId))
|
|
{
|
|
if (!roiDictionary.TryGetValue(overlayInfo.RoiTabId, out ConcurrentBag<RoiExpanderControlViewModel>? bag))
|
|
continue;
|
|
if (!RoiSummaryControlViewModel.RoiTabIdToTabIndexDictionary.TryGetValue(overlayInfo.RoiTabId, out int tabIndex))
|
|
continue;
|
|
viewModel.AddRoiListToDictionary(tabIndex, bag);
|
|
}
|
|
}
|
|
|
|
ImageCollection.Add(viewModel);
|
|
}
|
|
|
|
//decide how many rows we need according to image count
|
|
ImageCollectionRows = ImageCollection.Count > 2 ? 2 : 1;
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
}
|
|
} |