public override List <IDisplaySet> CreateDisplaySets(Series series) { var displaySets = new List <IDisplaySet>(); bool showOriginal = true; if (SplitMultiEchoSeries) { List <IDisplaySet> echoDisplaySets = _echoFactory.CreateDisplaySets(series); if (echoDisplaySets.Count > 0 && !ShowOriginalMREchoSeries) { showOriginal = false; } displaySets.AddRange(echoDisplaySets); } if (SplitMixedMultiframeSeries) { List <IDisplaySet> multiFrameDisplaySets = _mixedMultiFrameFactory.CreateDisplaySets(series); if (multiFrameDisplaySets.Count > 0 && !ShowOriginalMixedMultiframeSeries) { showOriginal = false; } displaySets.AddRange(multiFrameDisplaySets); } bool modalityDegenerateCase = CreateAllImagesDisplaySet && !ModalityDisplaySetExists; bool singleImageDegenerateCase = false; if (CreateSingleImageDisplaySets) { //The factory will only create single image display sets and will not create a series //display set for the degenerate case of one image in a series. In the case where //the user wants to see "single image" display sets, we actually create a series //display set (below) for the degenerate case, because that's technically more correct. _basicFactory.CreateSingleImageDisplaySets = true; var singleImageDisplaySets = new List <IDisplaySet>(); foreach (IDisplaySet displaySet in _basicFactory.CreateDisplaySets(series)) { singleImageDisplaySets.Add(displaySet); } displaySets.AddRange(singleImageDisplaySets); singleImageDegenerateCase = singleImageDisplaySets.Count == 0; } //Show the original if: // 1. A previous part of this method hasn't already disabled it. // 2. The user wants to see it, or // 3. It's a degenerate case showOriginal = showOriginal && (ShowOriginalSeries || modalityDegenerateCase || singleImageDegenerateCase); if (showOriginal) { //The factory will create series display sets only. _basicFactory.CreateSingleImageDisplaySets = false; foreach (IDisplaySet displaySet in _basicFactory.CreateDisplaySets(series)) { displaySets.Add(displaySet); } } bool anyDisplaySetsCreated = displaySets.Count > 0 || ModalityDisplaySetExists; if (!anyDisplaySetsCreated) { displaySets.AddRange(_placeholderDisplaySetFactory.CreateDisplaySets(series)); } foreach (var factory in _externalFactories) { displaySets.AddRange(factory.CreateDisplaySets(series)); } foreach (var displaySet in displaySets) { } return(displaySets); }
public void TestMixedMultiframes(int numberOfSingleFrames, int[] multiFramesNumberOfFrames) { const int numberOfSeries = 1; int instancesPerSeries = numberOfSingleFrames + multiFramesNumberOfFrames.Length; int numberOfMultiframes = multiFramesNumberOfFrames.Length; List<TestDataSource> dataSources = CreateMRStudyDataSources(numberOfSeries, instancesPerSeries, "1.2.3"); for (int i = 0; i < numberOfMultiframes; i++) dataSources[i]._file.DataSet[DicomTags.NumberOfFrames].SetInt32(0, multiFramesNumberOfFrames[i]); StudyTree studyTree = CreateStudyTree(ConvertToSops(dataSources)); MixedMultiFrameDisplaySetFactory factory = new MixedMultiFrameDisplaySetFactory(); factory.SetStudyTree(studyTree); List<IDisplaySet> allDisplaySets = new List<IDisplaySet>(); Patient patient = studyTree.Patients[0]; Study study = patient.Studies[0]; Series series = study.Series[0]; if (instancesPerSeries == 1) { try { Assert.AreEqual(instancesPerSeries, series.Sops.Count, "There should be exactly {0} sops", instancesPerSeries); List<IDisplaySet> displaySets = factory.CreateDisplaySets(series); allDisplaySets.AddRange(displaySets); Assert.AreEqual(0, displaySets.Count, "This scenario should produce no display sets"); } finally { foreach (IDisplaySet displaySet in allDisplaySets) displaySet.Dispose(); studyTree.Dispose(); } } else { try { Assert.AreEqual(instancesPerSeries, series.Sops.Count, "There should be exactly {0} sops", instancesPerSeries); List<IDisplaySet> displaySets = factory.CreateDisplaySets(series); allDisplaySets.AddRange(displaySets); if (series.SeriesInstanceUid == dataSources[0].SeriesInstanceUid) { int numberOfDisplaySets = numberOfSingleFrames > 0 ? 1 : 0; numberOfDisplaySets += numberOfMultiframes; Assert.AreEqual(numberOfDisplaySets, displaySets.Count, "There should be exactly {0} display sets", numberOfDisplaySets); if (numberOfSingleFrames > 0) { IDisplaySet singleFramesDisplaySet = displaySets[0]; Assert.AreEqual(numberOfSingleFrames, singleFramesDisplaySet.PresentationImages.Count, "#Presentation images should match #singe frames in series"); Assert.AreEqual(typeof(SingleImagesDisplaySetDescriptor), singleFramesDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); Assert.AreEqual(String.Format("{0}:SingleImages", series.SeriesInstanceUid), singleFramesDisplaySet.Uid); } int multiFramesStartIndex = numberOfSingleFrames > 0 ? 1 : 0; for (int i = multiFramesStartIndex; i < displaySets.Count; i++) { IDisplaySet multiFrameDisplaySet = displaySets[i]; int numberOfFrames = multiFramesNumberOfFrames[i - multiFramesStartIndex]; ImageSop multiFrame = ((IImageSopProvider)multiFrameDisplaySet.PresentationImages[0]).ImageSop; Assert.AreEqual(numberOfFrames, multiFrameDisplaySet.PresentationImages.Count, "#Presentation images should match #frames in multiframe"); Assert.AreEqual(typeof(MultiframeDisplaySetDescriptor), multiFrameDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); Assert.AreEqual(multiFrame.SopInstanceUid, multiFrameDisplaySet.Uid); } } else { Assert.AreEqual(0, displaySets.Count, "There should be no display sets"); } } finally { foreach (IDisplaySet displaySet in allDisplaySets) displaySet.Dispose(); studyTree.Dispose(); } } }
public void TestMixedMultiframes(int numberOfSingleFrames, int[] multiFramesNumberOfFrames) { const int numberOfSeries = 1; int instancesPerSeries = numberOfSingleFrames + multiFramesNumberOfFrames.Length; int numberOfMultiframes = multiFramesNumberOfFrames.Length; List <TestDataSource> dataSources = CreateMRStudyDataSources(numberOfSeries, instancesPerSeries, "1.2.3"); for (int i = 0; i < numberOfMultiframes; i++) { dataSources[i].File.DataSet[DicomTags.NumberOfFrames].SetInt32(0, multiFramesNumberOfFrames[i]); } StudyTree studyTree = CreateStudyTree(ConvertToSops(dataSources)); MixedMultiFrameDisplaySetFactory factory = new MixedMultiFrameDisplaySetFactory(); factory.SetStudyTree(studyTree); List <IDisplaySet> allDisplaySets = new List <IDisplaySet>(); Patient patient = studyTree.Patients[0]; Study study = patient.Studies[0]; Series series = study.Series[0]; if (instancesPerSeries == 1) { try { Assert.AreEqual(instancesPerSeries, series.Sops.Count, "There should be exactly {0} sops", instancesPerSeries); List <IDisplaySet> displaySets = factory.CreateDisplaySets(series); allDisplaySets.AddRange(displaySets); Assert.AreEqual(0, displaySets.Count, "This scenario should produce no display sets"); } finally { foreach (IDisplaySet displaySet in allDisplaySets) { displaySet.Dispose(); } studyTree.Dispose(); } } else { try { Assert.AreEqual(instancesPerSeries, series.Sops.Count, "There should be exactly {0} sops", instancesPerSeries); List <IDisplaySet> displaySets = factory.CreateDisplaySets(series); allDisplaySets.AddRange(displaySets); if (series.SeriesInstanceUid == dataSources[0].SeriesInstanceUid) { int numberOfDisplaySets = numberOfSingleFrames > 0 ? 1 : 0; numberOfDisplaySets += numberOfMultiframes; Assert.AreEqual(numberOfDisplaySets, displaySets.Count, "There should be exactly {0} display sets", numberOfDisplaySets); if (numberOfSingleFrames > 0) { IDisplaySet singleFramesDisplaySet = displaySets[0]; Assert.AreEqual(numberOfSingleFrames, singleFramesDisplaySet.PresentationImages.Count, "#Presentation images should match #singe frames in series"); Assert.AreEqual(typeof(SingleImagesDisplaySetDescriptor), singleFramesDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); Assert.AreEqual(String.Format("{0}:SingleImages", series.SeriesInstanceUid), singleFramesDisplaySet.Uid); } int multiFramesStartIndex = numberOfSingleFrames > 0 ? 1 : 0; for (int i = multiFramesStartIndex; i < displaySets.Count; i++) { IDisplaySet multiFrameDisplaySet = displaySets[i]; int numberOfFrames = multiFramesNumberOfFrames[i - multiFramesStartIndex]; ImageSop multiFrame = ((IImageSopProvider)multiFrameDisplaySet.PresentationImages[0]).ImageSop; Assert.AreEqual(numberOfFrames, multiFrameDisplaySet.PresentationImages.Count, "#Presentation images should match #frames in multiframe"); Assert.AreEqual(typeof(MultiframeDisplaySetDescriptor), multiFrameDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); Assert.AreEqual(multiFrame.SopInstanceUid, multiFrameDisplaySet.Uid); } } else { Assert.AreEqual(0, displaySets.Count, "There should be no display sets"); } } finally { foreach (IDisplaySet displaySet in allDisplaySets) { displaySet.Dispose(); } studyTree.Dispose(); } } }