示例#1
0
        private DicomNCreateResponse CreateFilmSession(DicomNCreateRequest request)
        {
            if (_filmSession != null)
            {
                this.Logger.Error("Attemted to create new basic film session on association with {0}", CallingAE);
                SendAbort(DicomAbortSource.ServiceProvider, DicomAbortReason.NotSpecified);
                return(new DicomNCreateResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            var pc = request.PresentationContext;

            bool isColor = pc != null && pc.AbstractSyntax == DicomUID.BasicColorPrintManagementMetaSOPClass;


            _filmSession = new FilmSession(request.SOPClassUID, request.SOPInstanceUID, request.Dataset, isColor);


            this.Logger.Info("Create new film session {0}", _filmSession.SOPInstanceUID.UID);
            if (request.SOPInstanceUID == null || request.SOPInstanceUID.UID == string.Empty)
            {
                request.Command.AddOrUpdate(DicomTag.AffectedSOPInstanceUID, _filmSession.SOPInstanceUID);
            }
            var response = new DicomNCreateResponse(request, DicomStatus.Success);

            return(response);
        }
示例#2
0
        private void PresentationLut_NoReferencedPresentationLutSequence_GetterReturnsNull()
        {
            var session = new FilmSession(DicomUID.BasicFilmSession);
            var box     = new FilmBox(session, null, DicomTransferSyntax.ImplicitVRLittleEndian);

            Assert.Null(box.PresentationLut);
        }
示例#3
0
        public static FilmSession Load(string filmSessionFile)
        {
            var file = DicomFile.Open(filmSessionFile);

            var filmSession = new FilmSession(file.FileMetaInfo.MediaStorageSOPClassUID, file.FileMetaInfo.MediaStorageSOPInstanceUID, file.Dataset);

            return(filmSession);
        }
示例#4
0
        public void ImageSequence_NoSequenceInImageBox_ReturnsNull(DicomUID sopClassUid)
        {
            var session  = new FilmSession(DicomUID.BasicFilmSession);
            var filmBox  = new FilmBox(session, null, DicomTransferSyntax.ImplicitVRLittleEndian);
            var imageBox = new ImageBox(filmBox, sopClassUid, null);

            Assert.Null(imageBox.ImageSequence);
        }
 public void Clean()
 {
     //delete the current active print job and film sessions
     lock (_synchRoot)
     {
         _filmSession = null;
         _printJobList.Clear();
     }
 }
示例#6
0
 public PrintJob(string jobLabel)
 {
     FilmSession = new FilmSession(DicomUID.BasicFilmSessionSOPClass)
     {
         FilmSessionLabel = jobLabel,
         MediumType = "PAPER",
         NumberOfCopies = 1
     };
 }
示例#7
0
        void OnQueryPageSettings(object sender, QueryPageSettingsEventArgs e)
        {
            OnStatusUpdate(string.Format("Printing film {0} of {1}", _currentPage + 1, FilmBoxFolderList.Count));
            var filmBoxFolder = string.Format("{0}\\{1}", FullPrintJobFolder, FilmBoxFolderList[_currentPage]);
            var filmSession   = FilmSession.Load(string.Format("{0}\\FilmSession.dcm", filmBoxFolder));

            _currentFilmBox = FilmBox.Load(filmSession, filmBoxFolder);

            e.PageSettings.Margins.Left   = 25;
            e.PageSettings.Margins.Right  = 25;
            e.PageSettings.Margins.Top    = 25;
            e.PageSettings.Margins.Bottom = 25;

            e.PageSettings.Landscape = _currentFilmBox.FilmOrienation == "LANDSCAPE";
        }
示例#8
0
        public void Save_BasicFilmBox_CreatesRelevantFilesAndFolders()
        {
            var path = @".\Test Data\Film Box Test 1";
            if (Directory.Exists(path)) Directory.Delete(path, true);
            Directory.CreateDirectory(path);

            var session = new FilmSession(DicomUID.BasicFilmSessionSOPClass);
            var box = new FilmBox(session, null, DicomTransferSyntax.ImplicitVRLittleEndian);
            box.BasicImageBoxes.Add(new ImageBox(box, DicomUID.BasicGrayscaleImageBoxSOPClass, null));
            box.Save(path);

            Assert.True(File.Exists(Path.Combine(path, "FilmBox.dcm")));
            Assert.True(File.Exists(Path.Combine(path, "FilmBox.txt")));
            Assert.True(Directory.Exists(Path.Combine(path, "Images")));
            Assert.True(Directory.GetFiles(Path.Combine(path, "Images")).Length > 0);
        }
示例#9
0
        private DicomNDeleteResponse DeleteFilmSession(DicomNDeleteRequest request)
        {
            if (_filmSession == null)
            {
                this.Logger.Error("Can't delete a basic film session doesnot exist for this association {0}", CallingAE);
                return(new DicomNDeleteResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            if (!request.SOPInstanceUID.Equals(_filmSession.SOPInstanceUID))
            {
                this.Logger.Error("Can't delete a basic film session with instace UID {0} doesnot exist for this association {1}",
                                  request.SOPInstanceUID.UID, CallingAE);
                return(new DicomNDeleteResponse(request, DicomStatus.NoSuchObjectInstance));
            }
            _filmSession = null;

            return(new DicomNDeleteResponse(request, DicomStatus.Success));
        }
示例#10
0
        public void Load_BasicFilmBox_ExpectedSopClassFound()
        {
            var path = @".\Test Data\Film Box Test 2";
            if (Directory.Exists(path)) Directory.Delete(path, true);
            Directory.CreateDirectory(path);

            var expected = DicomUID.Generate();

            var session = new FilmSession(DicomUID.BasicFilmSessionSOPClass);
            var box = new FilmBox(session, expected, DicomTransferSyntax.ImplicitVRLittleEndian);
            box.BasicImageBoxes.Add(new ImageBox(box, DicomUID.BasicGrayscaleImageBoxSOPClass, null));
            box.Save(path);

            var loaded = FilmBox.Load(session, path);
            var actual = loaded.SOPInstanceUID;
            Assert.Equal(expected, actual);
            Assert.True(loaded.BasicImageBoxes.Count > 0);
        }
示例#11
0
        /// <summary>
        /// Load a film box for a specific session from a specific folder.
        /// </summary>
        /// <param name="filmSession">Film session.</param>
        /// <param name="filmBoxFolder">Folder in which film box is stored.</param>
        /// <returns>Film box for the specified <paramref name="filmSession"/> located in the <paramref name="filmBoxFolder"/>.</returns>
        public static FilmBox Load(FilmSession filmSession, string filmBoxFolder)
        {
            var filmBoxFile = string.Format(@"{0}\FilmBox.dcm", filmBoxFolder);

            var file = DicomFile.Open(filmBoxFile);

            var filmBox = new FilmBox(filmSession, file.FileMetaInfo.MediaStorageSOPInstanceUID, file.Dataset);

            var imagesFolder = IOManager.CreateDirectoryReference(string.Format(@"{0}\Images", filmBoxFolder));

            foreach (var image in imagesFolder.EnumerateFileNames("*.dcm"))
            {
                var imageBox = ImageBox.Load(filmBox, image);

                filmBox.BasicImageBoxes.Add(imageBox);
            }
            return(filmBox);
        }
示例#12
0
文件: FilmBox.cs 项目: GMZ/fo-dicom
        /// <summary>
        /// Create baisc film box for specified film session
        /// </summary>
        /// <param name="filmSession">Film session instance</param>
        /// <param name="sopInstance">Basic film box SOP Instance UID</param>
        public FilmBox(FilmSession filmSession, DicomUID sopInstance, DicomTransferSyntax transferSyntax)
            : base()
        {
            this.InternalTransferSyntax = transferSyntax;
            _filmSession = filmSession;
            if (sopInstance == null || sopInstance.UID == string.Empty)
            {
                SOPInstanceUID = DicomUID.Generate();
            }
            else
            {
                SOPInstanceUID = sopInstance;
            }
            this.Add(DicomTag.SOPClassUID, SOPClassUID);
            this.Add(DicomTag.SOPInstanceUID, SOPInstanceUID);

            BasicImageBoxes = new List<ImageBox>();
        }
示例#13
0
        /// <summary>
        /// Create baisc film box for specified film session
        /// </summary>
        /// <param name="filmSession">Film session instance</param>
        /// <param name="sopInstance">Basic film box SOP Instance UID</param>
        /// <param name="transferSyntax">Requested internal transfer syntax.</param>
        public FilmBox(FilmSession filmSession, DicomUID sopInstance, DicomTransferSyntax transferSyntax)
        {
            this.InternalTransferSyntax = transferSyntax;
            _filmSession = filmSession;
            if (sopInstance == null || sopInstance.UID == string.Empty)
            {
                SOPInstanceUID = DicomUID.Generate();
            }
            else
            {
                SOPInstanceUID = sopInstance;
            }
            this.Add(DicomTag.SOPClassUID, SOPClassUID);
            this.Add(DicomTag.SOPInstanceUID, SOPInstanceUID);


            BasicImageBoxes = new List <ImageBox>();
        }
示例#14
0
        public void Save_BasicFilmBox_CreatesRelevantFilesAndFolders()
        {
            var path = @".\Test Data\Film Box Test 1";

            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }
            Directory.CreateDirectory(path);

            var session = new FilmSession(DicomUID.BasicFilmSession);
            var box     = new FilmBox(session, null, DicomTransferSyntax.ImplicitVRLittleEndian);

            box.BasicImageBoxes.Add(new ImageBox(box, DicomUID.BasicGrayscaleImageBox, null));
            box.Save(path);

            Assert.True(File.Exists(Path.Combine(path, "FilmBox.dcm")));
            Assert.True(File.Exists(Path.Combine(path, "FilmBox.txt")));
            Assert.True(Directory.Exists(Path.Combine(path, "Images")));
            Assert.True(Directory.GetFiles(Path.Combine(path, "Images")).Length > 0);
        }
示例#15
0
文件: PrintJob.cs 项目: GMZ/fo-dicom
        /// <summary>
        /// Construct new print job using specified SOP instance UID. If passed SOP instance UID is missing, new UID will
        /// be generated
        /// </summary>
        /// <param name="sopInstance">New print job SOP instance uID</param>
        /// <param name="printer">The printer.</param>
        /// <param name="originator">The originator.</param>
        /// <param name="log">The log.</param>
        /// <param name="session">The session.</param>
        /// <exception cref="System.ArgumentNullException">printer</exception>
        /// /
        public PrintJob(DicomUID sopInstance, Printer printer, string originator, Log.Logger log, FilmSession session)
        {
            if (printer == null)
            {
                throw new ArgumentNullException("printer");
            }

            Log = log;

            if (sopInstance == null || sopInstance.UID == string.Empty)
                SOPInstanceUID = DicomUID.Generate();
            else
                SOPInstanceUID = sopInstance;

            Add(DicomTag.SOPClassUID, SOPClassUID);
            Add(DicomTag.SOPInstanceUID, SOPInstanceUID);

            Printer = printer;

            Status = PrintJobStatus.Pending;

            PrinterName = Printer.PrinterAet;
            Session = session;

            Originator = originator;

            if (CreationDateTime == DateTime.MinValue)
            {
                CreationDateTime = DateTime.Now;
            }

            PrintJobFolder = SOPInstanceUID.UID;

            var receivingFolder = Environment.CurrentDirectory + @"\PrintJobs";

            FullPrintJobFolder = string.Format(@"{0}\{1}", receivingFolder.TrimEnd('\\'), PrintJobFolder);
            FilmBoxFolderList = new List<string>();
        }
示例#16
0
        public void Load_BasicFilmBox_ExpectedSopClassFound()
        {
            var path = @".\Test Data\Film Box Test 2";

            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }
            Directory.CreateDirectory(path);

            var expected = DicomUID.Generate();

            var session = new FilmSession(DicomUID.BasicFilmSession);
            var box     = new FilmBox(session, expected, DicomTransferSyntax.ImplicitVRLittleEndian);

            box.BasicImageBoxes.Add(new ImageBox(box, DicomUID.BasicGrayscaleImageBox, null));
            box.Save(path);

            var loaded = FilmBox.Load(session, path);
            var actual = loaded.SOPInstanceUID;

            Assert.Equal(expected, actual);
            Assert.True(loaded.BasicImageBoxes.Count > 0);
        }
示例#17
0
 public FilmBox(FilmSession filmSession, DicomUID sopInstance, DicomDataset dataset)
     : this(filmSession, sopInstance, dataset.InternalTransferSyntax)
 {
     dataset.CopyTo(this);
     this.InternalTransferSyntax = dataset.InternalTransferSyntax;
 }
示例#18
0
文件: FilmBox.cs 项目: aerik/fo-dicom
 public FilmBox(FilmSession filmSession, DicomUID sopInstance, DicomDataset dataset)
     : this(filmSession, sopInstance, dataset.InternalTransferSyntax)
 {
     dataset.CopyTo(this);
     this.InternalTransferSyntax = dataset.InternalTransferSyntax;
 }
示例#19
0
文件: FilmBox.cs 项目: aerik/fo-dicom
        /// <summary>
        /// Load a film box for a specific session from a specific folder.
        /// </summary>
        /// <param name="filmSession">Film session.</param>
        /// <param name="filmBoxFolder">Folder in which film box is stored.</param>
        /// <returns>Film box for the specified <paramref name="filmSession"/> located in the <paramref name="filmBoxFolder"/>.</returns>
        public static FilmBox Load(FilmSession filmSession, string filmBoxFolder)
        {
            var filmBoxFile = string.Format(@"{0}\FilmBox.dcm", filmBoxFolder);

            var file = DicomFile.Open(filmBoxFile);

            var filmBox = new FilmBox(filmSession, file.FileMetaInfo.MediaStorageSOPInstanceUID, file.Dataset);

            var imagesFolder = IOManager.CreateDirectoryReference(string.Format(@"{0}\Images", filmBoxFolder));
            foreach (var image in imagesFolder.EnumerateFileNames("*.dcm"))
            {
                var imageBox = ImageBox.Load(filmBox, image);

                filmBox.BasicImageBoxes.Add(imageBox);
            }
            return filmBox;
        }
示例#20
0
        private DicomNDeleteResponse DeleteFilmSession(DicomNDeleteRequest request)
        {
            if (_filmSession == null)
            {
                this.Logger.Error("Can't delete a basic film session doesnot exist for this association {0}", CallingAE);
                return new DicomNDeleteResponse(request, DicomStatus.NoSuchObjectInstance);
            }

            if (!request.SOPInstanceUID.Equals(_filmSession.SOPInstanceUID))
            {
                this.Logger.Error("Can't delete a basic film session with instace UID {0} doesnot exist for this association {1}",
                    request.SOPInstanceUID.UID, CallingAE);
                return new DicomNDeleteResponse(request, DicomStatus.NoSuchObjectInstance);
            }
            _filmSession = null;

            return new DicomNDeleteResponse(request, DicomStatus.Success);
        }
示例#21
0
        private DicomNCreateResponse CreateFilmSession(DicomNCreateRequest request)
        {
            if (_filmSession != null)
            {
                this.Logger.Error("Attemted to create new basic film session on association with {0}", CallingAE);
                SendAbort(DicomAbortSource.ServiceProvider, DicomAbortReason.NotSpecified);
                return new DicomNCreateResponse(request, DicomStatus.NoSuchObjectInstance);
            }

            var pc = request.PresentationContext;

            bool isColor = pc != null && pc.AbstractSyntax == DicomUID.BasicColorPrintManagementMetaSOPClass;


            _filmSession = new FilmSession(request.SOPClassUID, request.SOPInstanceUID, request.Dataset, isColor);


            this.Logger.Info("Create new film session {0}", _filmSession.SOPInstanceUID.UID);

            var response = new DicomNCreateResponse(request, DicomStatus.Success);
            response.Command.Add(DicomTag.AffectedSOPInstanceUID, _filmSession.SOPInstanceUID);
            return response;
        }
示例#22
0
 public PrintClient()
 {
     _files = new List<string>();
     FilmSession = new FilmSession(DicomUID.BasicFilmSessionSOPClass);
     FilmSession.PresentationLuts.Add(new PresentationLut { PresentationLutShape = "IDENTITY" });
 }
示例#23
0
 public void Clean()
 {
     //delete the current active print job and film sessions
     lock (_synchRoot)
     {
         if (_filmSession != null)
         {
             _filmSession = null;
         }
         _printJobList.Clear();
     }
 }
示例#24
0
        public static FilmSession Load(string filmSessionFile)
        {
            var file = DicomFile.Open(filmSessionFile);

            var filmSession = new FilmSession(
                file.FileMetaInfo.MediaStorageSOPClassUID,
                file.FileMetaInfo.MediaStorageSOPInstanceUID,
                file.Dataset);
            return filmSession;
        }