Exemplo n.º 1
0
            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();
            }
Exemplo n.º 2
0
		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();
                }
            }
        }
Exemplo n.º 4
0
            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();
            }