public DisplaySetFactory(IModalityDisplaySetCreationOptions creationOptions) { _creationOptions = creationOptions; PresentationState defaultPresentationState = new DicomPresentationState { ShowGrayscaleInverted = creationOptions.ShowGrayscaleInverted }; var imageFactory = (PresentationImageFactory)PresentationImageFactory; imageFactory.DefaultPresentationState = defaultPresentationState; _basicFactory = new BasicDisplaySetFactory(imageFactory) { CreateSingleImageDisplaySets = _creationOptions.CreateSingleImageDisplaySets }; if (creationOptions.SplitMultiEchoSeries) { _echoFactory = new MREchoDisplaySetFactory(imageFactory); } if (creationOptions.SplitMultiStackSeries) { _multiFrameStackFactory = new MultiFrameStackDisplaySetFactory(imageFactory); } if (_creationOptions.SplitMixedMultiframes) { _mixedMultiFrameFactory = new MixedMultiFrameDisplaySetFactory(imageFactory); } var externalFactories = new List <IDisplaySetFactory>(); foreach (IDisplaySetFactoryProvider provider in new DisplaySetFactoryProviderExtensionPoint().CreateExtensions()) { externalFactories.AddRange(provider.CreateDisplaySetFactories(imageFactory)); } _externalFactories = externalFactories.AsReadOnly(); _placeholderDisplaySetFactory = new PlaceholderDisplaySetFactory(); }
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(); } } }
public DisplaySetFactory(IModalityDisplaySetCreationOptions creationOptions) { _creationOptions = creationOptions; PresentationState defaultPresentationState = new DicomPresentationState { ShowGrayscaleInverted = creationOptions.ShowGrayscaleInverted }; var imageFactory = (PresentationImageFactory)PresentationImageFactory; imageFactory.DefaultPresentationState = defaultPresentationState; _basicFactory = new BasicDisplaySetFactory(imageFactory) { CreateSingleImageDisplaySets = _creationOptions.CreateSingleImageDisplaySets }; if (creationOptions.SplitMultiEchoSeries) _echoFactory = new MREchoDisplaySetFactory(imageFactory); if (_creationOptions.SplitMixedMultiframes) _mixedMultiFrameFactory = new MixedMultiFrameDisplaySetFactory(imageFactory); var externalFactories = new List<IDisplaySetFactory>(); foreach (IDisplaySetFactoryProvider provider in new DisplaySetFactoryProviderExtensionPoint().CreateExtensions()) externalFactories.AddRange(provider.CreateDisplaySetFactories(imageFactory)); _externalFactories = externalFactories.AsReadOnly(); _placeholderDisplaySetFactory = new PlaceholderDisplaySetFactory(); }