Esempio n. 1
0
            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);
            }
Esempio 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();
                }
            }
        }