Example #1
0
        private void TraceAcquisitionTime(IEnumerable <IPresentationImage> images)
        {
            foreach (IPresentationImage image in images)
            {
                if (image is DicomGrayscalePresentationImage)
                {
                    DicomGrayscalePresentationImage dicomImage = (DicomGrayscalePresentationImage)image;

                    DateTime?acqDate = DateParser.Parse(dicomImage.ImageSop.Frames[1].AcquisitionDate);
                    DateTime?acqTime = TimeParser.Parse(dicomImage.ImageSop.Frames[1].AcquisitionTime);
                    if (acqDate != null)
                    {
                        acqDate = acqDate.Value.AddTicks(acqTime.Value.Ticks);
                    }
                    else
                    {
                        acqDate = DateTimeParser.Parse(dicomImage.ImageSop.Frames[1].AcquisitionDateTime);
                    }

                    string line = string.Format("StudyUID: {0}, Series: {1}, Acq.Date/Time: {2}, Instance: {3}, Frame: {4}",
                                                dicomImage.ImageSop.StudyInstanceUid,
                                                dicomImage.ImageSop.SeriesInstanceUid,
                                                acqDate.Value.ToString(DateTimeParser.DicomFullDateTimeFormat),
                                                dicomImage.ImageSop.InstanceNumber,
                                                dicomImage.Frame.FrameNumber);
                    Debug.WriteLine(line);
                }
                else
                {
                    Debug.WriteLine("** Non-Dicom Image **");
                }
            }
        }
Example #2
0
        private void TraceSliceLocation(IEnumerable <IPresentationImage> images)
        {
            foreach (IPresentationImage image in images)
            {
                if (image is DicomGrayscalePresentationImage)
                {
                    DicomGrayscalePresentationImage dicomImage = (DicomGrayscalePresentationImage)image;

                    Vector3D normal          = dicomImage.Frame.ImagePlaneHelper.GetNormalVector();
                    Vector3D positionPatient = dicomImage.Frame.ImagePlaneHelper.ConvertToPatient(
                        new PointF((dicomImage.Frame.Columns - 1) / 2F, (dicomImage.Frame.Rows - 1) / 2F));

                    Vector3D positionImagePlane = dicomImage.Frame.ImagePlaneHelper.ConvertToImagePlane(positionPatient, Vector3D.Null);
                    double   zImagePlane        = Math.Round(positionImagePlane.Z, 3, MidpointRounding.AwayFromZero);

                    string line = string.Format("StudyUID: {0}, Series: {1}, Normal: {2}, zPosition: {3}, Instance: {4}, Frame: {5}",
                                                dicomImage.ImageSop.StudyInstanceUid,
                                                dicomImage.ImageSop.SeriesInstanceUid,
                                                normal,
                                                zImagePlane,
                                                dicomImage.ImageSop.InstanceNumber,
                                                dicomImage.Frame.FrameNumber);
                    Debug.WriteLine(line);
                }
                else
                {
                    Debug.WriteLine("** Non-Dicom Image **");
                }
            }
        }
		protected AsyncDicomGrayscalePresentationImage(DicomGrayscalePresentationImage source, ICloningContext context)
			: base(source, context)
		{
			context.CloneFields(source, this);

			Initialize();
		}
        protected AsyncDicomGrayscalePresentationImage(DicomGrayscalePresentationImage source, ICloningContext context)
            : base(source, context)
        {
            context.CloneFields(source, this);

            Initialize();
        }
Example #5
0
        private void TestSortingDisplaySetsBySeriesNumber(bool reverse)
        {
            DisplaySetCollection orderedCollection    = new DisplaySetCollection();
            DisplaySetCollection nonOrderedCollection = new DisplaySetCollection();

            for (int i = 1; i <= 20; ++i)
            {
                string             id         = i.ToString();
                DisplaySet         displaySet = new DisplaySet(id, id);
                ImageSop           sop        = NewImageSop(id, id, i);
                IPresentationImage image      = new DicomGrayscalePresentationImage(sop.Frames[1]);
                sop.Dispose();
                IImageSopProvider         sopProvider = (IImageSopProvider)image;
                DicomMessageSopDataSource dataSource  = ((DicomMessageSopDataSource)sopProvider.ImageSop.DataSource);
                dataSource.SourceMessage.DataSet[DicomTags.SeriesNumber].SetInt32(0, i);

                displaySet.PresentationImages.Add(image);
                orderedCollection.Add(displaySet);
            }

            Randomize(orderedCollection, nonOrderedCollection);

            Debug.WriteLine("Before Sort\n------------------------\n");
            CollectionUtils.ForEach(nonOrderedCollection, delegate(IDisplaySet displaySet) { Debug.WriteLine(String.Format("name: {0}", displaySet.Name)); });

            nonOrderedCollection.Sort(new SeriesNumberComparer(reverse));

            Debug.WriteLine("\nAfter Sort\n------------------------\n");
            CollectionUtils.ForEach(nonOrderedCollection, delegate(IDisplaySet displaySet) { Debug.WriteLine(String.Format("name: {0}", displaySet.Name)); });

            int j = reverse ? 20 : 1;

            foreach (IDisplaySet set in nonOrderedCollection)
            {
                Assert.AreEqual(j.ToString(), set.Name);
                j += reverse ? -1 : 1;
            }

            foreach (DisplaySet set in nonOrderedCollection)
            {
                set.Dispose();
            }
            foreach (DisplaySet set in orderedCollection)
            {
                set.Dispose();
            }
        }
Example #6
0
		private IImageSet CreateImageSet(string patientId, string description)
		{
			string studyInstanceUid = DicomUid.GenerateUid().UID;
			string seriesInstanceUid = DicomUid.GenerateUid().UID;
			string sopInstanceUid = DicomUid.GenerateUid().UID;

			ImageSop sop = CreateImageSop(patientId, studyInstanceUid, seriesInstanceUid, sopInstanceUid);
			DicomGrayscalePresentationImage img = new DicomGrayscalePresentationImage(sop.Frames[1]);
			sop.Dispose();

			DisplaySet displaySet = new DisplaySet(patientId, seriesInstanceUid);
			displaySet.PresentationImages.Add(img);
			ImageSet imageSet = new ImageSet();
			imageSet.PatientInfo = description;
			imageSet.DisplaySets.Add(displaySet);

			return imageSet;
		}
Example #7
0
        private bool VerifyOrdered(
            PresentationImageCollection orderedCollection,
            PresentationImageCollection nonOrderedCollection)
        {
            Assert.AreEqual(orderedCollection.Count, nonOrderedCollection.Count);

            int index = 0;

            foreach (PresentationImage orderedImage in orderedCollection)
            {
                IPresentationImage nonOrderedImage = nonOrderedCollection[index];

                if (!(orderedImage is DicomGrayscalePresentationImage) && !(nonOrderedImage is DicomGrayscalePresentationImage))
                {
                    ++index;
                    continue;
                }

                if (!(orderedImage is DicomGrayscalePresentationImage) && (nonOrderedImage is DicomGrayscalePresentationImage))
                {
                    return(false);
                }

                if ((orderedImage is DicomGrayscalePresentationImage) && !(nonOrderedImage is DicomGrayscalePresentationImage))
                {
                    return(false);
                }

                DicomGrayscalePresentationImage dicomOrdered    = orderedImage as DicomGrayscalePresentationImage;
                DicomGrayscalePresentationImage dicomNonOrdered = nonOrderedImage as DicomGrayscalePresentationImage;

                if (dicomOrdered.ImageSop.StudyInstanceUid != dicomNonOrdered.ImageSop.StudyInstanceUid ||
                    dicomOrdered.ImageSop.SeriesInstanceUid != dicomNonOrdered.ImageSop.SeriesInstanceUid ||
                    dicomOrdered.ImageSop.InstanceNumber != dicomNonOrdered.ImageSop.InstanceNumber)
                {
                    return(false);
                }

                ++index;
            }

            return(true);
        }
Example #8
0
 private void TraceInstanceAndFrameNumbers(IEnumerable <IPresentationImage> collection)
 {
     foreach (IPresentationImage image in collection)
     {
         if (image is DicomGrayscalePresentationImage)
         {
             DicomGrayscalePresentationImage dicomImage = (DicomGrayscalePresentationImage)image;
             string line = string.Format("StudyUID: {0}, Series: {1}, Instance: {2}, Frame: {3}", dicomImage.ImageSop.StudyInstanceUid,
                                         dicomImage.ImageSop.SeriesInstanceUid,
                                         dicomImage.ImageSop.InstanceNumber,
                                         dicomImage.Frame.FrameNumber);
             Debug.WriteLine(line);
         }
         else
         {
             Debug.WriteLine("** Non-Dicom Image **");
         }
     }
 }
Example #9
0
        private IImageSet CreateImageSet(string patientId, string description)
        {
            string studyInstanceUid  = DicomUid.GenerateUid().UID;
            string seriesInstanceUid = DicomUid.GenerateUid().UID;
            string sopInstanceUid    = DicomUid.GenerateUid().UID;

            ImageSop sop = CreateImageSop(patientId, studyInstanceUid, seriesInstanceUid, sopInstanceUid);
            DicomGrayscalePresentationImage img = new DicomGrayscalePresentationImage(sop.Frames[1]);

            sop.Dispose();

            DisplaySet displaySet = new DisplaySet(patientId, seriesInstanceUid);

            displaySet.PresentationImages.Add(img);
            ImageSet imageSet = new ImageSet();

            imageSet.PatientInfo = description;
            imageSet.DisplaySets.Add(displaySet);

            return(imageSet);
        }
Example #10
0
        private void TestSortingImageSetsByStudyDate(bool reverse, bool useSops, bool testLayoutManagerSort)
        {
            ImageSetCollection orderedCollection    = new ImageSetCollection();
            ImageSetCollection nonOrderedCollection = new ImageSetCollection();
            StudyTree          studyTree            = new StudyTree();

            for (int i = 0; i <= 20; ++i)
            {
                string   id       = i.ToString();
                ImageSet imageSet = new ImageSet();
                imageSet.Name = id;

                string studyDate;
                if (i == 0)
                {
                    studyDate = "";
                }
                else
                {
                    studyDate = String.Format("200801{0}", i.ToString("00"));
                }

                if (useSops)
                {
                    DisplaySet displaySet = new DisplaySet(id, id);
                    ImageSop   sop        = NewImageSop(id, id, i);
                    imageSet.Uid = sop.StudyInstanceUid;
                    studyTree.AddSop(sop);

                    IPresentationImage image       = new DicomGrayscalePresentationImage(sop.Frames[1]);
                    IImageSopProvider  sopProvider = (IImageSopProvider)image;

                    DicomMessageSopDataSource dataSource = ((DicomMessageSopDataSource)sopProvider.ImageSop.DataSource);
                    dataSource.SourceMessage.DataSet[DicomTags.StudyDate].SetString(0, studyDate);
                    imageSet.DisplaySets.Add(displaySet);
                    displaySet.PresentationImages.Add(image);
                }
                else
                {
                    StudyRootStudyIdentifier identifier = new StudyRootStudyIdentifier();
                    identifier.StudyDate        = studyDate;
                    identifier.StudyInstanceUid = id;
                    ImageSetDescriptor descriptor = new DicomImageSetDescriptor(identifier);
                    imageSet.Descriptor = descriptor;
                }

                orderedCollection.Add(imageSet);
            }

            if (reverse)
            {
                List <IImageSet> temp = new List <IImageSet>();
                temp.AddRange(orderedCollection);
                temp.Reverse();
                orderedCollection.Clear();
                foreach (IImageSet imageSet in temp)
                {
                    orderedCollection.Add(imageSet);
                }
            }

            Randomize(orderedCollection, nonOrderedCollection);

            Debug.WriteLine("Before Sort\n------------------------\n");
            CollectionUtils.ForEach(nonOrderedCollection,
                                    imageSet => Debug.WriteLine(String.Format("name: {0}, date: {1}", imageSet.Name,
                                                                              ((IImageSopProvider)(imageSet.DisplaySets[0].PresentationImages[0])).
                                                                              ImageSop.StudyDate)));

            if (testLayoutManagerSort)
            {
                LayoutManager.SortImageSets(nonOrderedCollection, GetStudies(orderedCollection, studyTree));
            }
            else
            {
                nonOrderedCollection.Sort(new StudyDateComparer(reverse));
            }

            Debug.WriteLine("\nAfter Sort\n------------------------\n");
            CollectionUtils.ForEach(nonOrderedCollection,
                                    imageSet => Debug.WriteLine(String.Format("name: {0}, date: {1}", imageSet.Name,
                                                                              ((IImageSopProvider)(imageSet.DisplaySets[0].PresentationImages[0])).
                                                                              ImageSop.StudyDate)));

            if (reverse)
            {
                nonOrderedCollection.RemoveAt(20);
            }
            else
            {
                nonOrderedCollection.RemoveAt(0);
            }

            int j = reverse ? 20 : 1;

            foreach (IImageSet set in nonOrderedCollection)
            {
                Assert.AreEqual(j.ToString(), set.Name);
                j += reverse ? -1 : 1;
            }

            foreach (IImageSet set in nonOrderedCollection)
            {
                set.Dispose();
            }
            foreach (IImageSet set in orderedCollection)
            {
                set.Dispose();
            }

            studyTree.Dispose();
        }