Ejemplo n.º 1
0
        /// <summary>
        /// after call Set* methods init instance, then call this
        /// function to create a ProtoBuffer serialized object
        /// </summary>
        /// <returns>
        /// a serialized filming job instance
        /// if there is an exception, return null
        /// </returns>
        byte[] CreateFilmingJobInstance()
        {
            byte[] serializedJob = null;
            try
            {
                Logger.LogFuncUp();

                FilmingPrintJob         filmingPrintJob        = new FilmingPrintJob();
                FilmingPrintJob.Builder filmingPrintJobBuilder = new FilmingPrintJob.Builder();

                //set printer
                filmingPrintJobBuilder.SetPrinterAE(Peer.PeerAE);
                filmingPrintJobBuilder.SetOurAE(Printers.Instance.OurAE);
                filmingPrintJobBuilder.SetPrinterIP(Peer.PeerIP);
                filmingPrintJobBuilder.SetPort(Peer.PeerPort);

                //set print settign
                filmingPrintJobBuilder.SetPrintPriority((FilmingPrintJob.Types.PrintPriority)PrintSetting.Priority);
                filmingPrintJobBuilder.SetPrintTiming(FilmingPrintJob.Types.PrintTiming.IMMEDIATELY);
                filmingPrintJobBuilder.SetCopies((int)PrintSetting.Copies);
                filmingPrintJobBuilder.SetFilmingDate(PrintSetting.FilmingDateTime.ToShortDateString());
                filmingPrintJobBuilder.SetFilmingTime(PrintSetting.FilmingDateTime.ToShortTimeString());
                filmingPrintJobBuilder.SetIfSaveEFilm(PrintSetting.IfSaveElectronicFilm);

                //set patient
                filmingPrintJobBuilder.SetPatientId(Patient.PatientID);
                filmingPrintJobBuilder.SetPatientName(Patient.PatientName);
                filmingPrintJobBuilder.SetPatientSex(Patient.PatientSex);
                filmingPrintJobBuilder.SetPatientAge(Patient.PatientAge);
                filmingPrintJobBuilder.SetOperatorName(Patient.OperatorName);
                filmingPrintJobBuilder.SetAccessionNo(Patient.AccessionNo);
                filmingPrintJobBuilder.SetStudyId(Patient.StudyID);

                //2014-05-04 for xiongke hospital
                filmingPrintJobBuilder.SetMediaType(PrintSetting.MediaType);
                filmingPrintJobBuilder.SetFilmDestination(PrintSetting.FilmDestination);
                filmingPrintJobBuilder.SetIfColorPrint(PrintSetting.IfColorPrint);
                //filmingPrintJobBuilder.SetFilmSessionLabel("");
                //filmingPrintJobBuilder.SetPriority("");
                //filmingPrintJobBuilder.SetOwnerId("");
                filmingPrintJobBuilder.SetSeriesInstanceUid(string.IsNullOrEmpty(ArchivedSeriesInstanceUid) ? string.Empty : ArchivedSeriesInstanceUid);
                //2014-05-04 for xiongke hospital

                foreach (FilmingPrintJob.Types.FilmBox.Builder filmBoxBuilder
                         in FilmBoxList)
                {
                    filmingPrintJobBuilder.AddFilmBox(filmBoxBuilder);
                }

                filmingPrintJob = filmingPrintJobBuilder.Build();

                serializedJob = filmingPrintJob.ToByteArray();

                Logger.LogFuncDown();
            }
            catch (System.Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
                serializedJob = null;
            }
            return(serializedJob);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// after call Set* methods init instance, then call this
        /// function to create a ProtoBuffer serialized object
        /// </summary>
        /// <returns>
        /// a serialized filming job instance
        /// if there is an exception, return null
        /// </returns>
        byte[] CreateFilmingJobInstance(bool withAnnotations)
        {
            Logger.LogFuncUp();
            byte[] serializedJob = null;
            try
            {
                Logger.LogFuncUp("Is AutoFilming : " + withAnnotations.ToString());

                FilmingPrintJob         filmingPrintJob        = new FilmingPrintJob();
                FilmingPrintJob.Builder filmingPrintJobBuilder = new FilmingPrintJob.Builder();

                filmingPrintJobBuilder.SetPrinterAE(_printerAE);
                filmingPrintJobBuilder.SetOurAE(_ourAE);
                filmingPrintJobBuilder.SetPrinterIP(_printerIP);
                filmingPrintJobBuilder.SetPort(_printerPort);

                filmingPrintJobBuilder.SetPrintPriority((FilmingPrintJob.Types.PrintPriority)_printPriority);
                filmingPrintJobBuilder.SetPrintTiming(FilmingPrintJob.Types.PrintTiming.IMMEDIATELY);

                filmingPrintJobBuilder.SetPatientId(_patientID);
                filmingPrintJobBuilder.SetPatientName(_patientName);
                filmingPrintJobBuilder.SetPatientSex(_patientSex);
                filmingPrintJobBuilder.SetPatientAge(_patientAge);
                filmingPrintJobBuilder.SetOperatorName(_operatorName);
                filmingPrintJobBuilder.SetAccessionNo(_accessionNo);
                filmingPrintJobBuilder.SetStudyId(_studyID);

                filmingPrintJobBuilder.SetCopies((int)_copies);

                filmingPrintJobBuilder.SetFilmingDate(DateTime.Now.ToShortDateString());
                filmingPrintJobBuilder.SetFilmingTime(DateTime.Now.ToShortTimeString());

                {//DR Filming : Set Medium Type,  FilmDestination
                    var peerNodes = Printers.Instance.PeerNodes;
                    var peerNode  = peerNodes.FirstOrDefault(node => node.PeerAE == _printerAE);
                    if (peerNode != null)
                    {
                        var mediumType = peerNode.SupportMediumTypeList.FirstOrDefault(m => !string.IsNullOrWhiteSpace(m.ToString()));
                        if (mediumType != null)
                        {
                            filmingPrintJobBuilder.SetMediaType(mediumType.ToString());
                            Logger.Instance.LogDevInfo("[XR Print Parameter][MediumType]" + mediumType.ToString());
                        }

                        var filmDestination =
                            peerNode.SupportFilmDestinationList.FirstOrDefault(
                                m => !string.IsNullOrWhiteSpace(m.ToString()));
                        if (filmDestination != null)
                        {
                            filmingPrintJobBuilder.SetFilmDestination(filmDestination.ToString());
                            Logger.Instance.LogDevInfo("[XR Print Parameter][FilmDestination]" + filmDestination.ToString());
                        }
                    }
                }

                //the total image of per sheet
                int iSheetCount = 0;
                //the total image of this print job
                int iTotalImage = _dicomFilePathList.Count;

                iSheetCount = (int)Math.Ceiling((0.0 + iTotalImage) / _sheetImageCount);

                for (int i = 0, iCurrentIndex = 0; i < iSheetCount; i++)
                {
                    FilmingPrintJob.Types.FilmBox.Builder filmBoxBuilder = new FilmingPrintJob.Types.FilmBox.Builder();
                    if (FilmSize != null)
                    {
                        filmBoxBuilder.SetFilmSize(FilmSize);
                    }

                    if (withAnnotations)
                    {
                        filmBoxBuilder.Orientation = (FilmingPrintJob.Types.Orientation)Printers.Instance.GetDefaultOrientation(_printerAE);
                        var defaultFilmSize = Printers.Instance.GetDefaultFilmSizeOf(_printerAE);
                        if (defaultFilmSize != null)
                        {
                            filmBoxBuilder.SetFilmSize(defaultFilmSize);
                            FilmSize = defaultFilmSize;
                        }

                        //----------------------------new code begin------------------------------------
                        filmImageList.Clear();
                        for (int j = 0; j < _sheetImageCount && iCurrentIndex < iTotalImage; j++, iCurrentIndex++)
                        {
                            filmImageList.Add(_dicomFilePathList[iCurrentIndex]);
                        }

                        _efilmFullPath = Printers.Instance.PrintObjectStoragePath + "/" + DateTime.Now.Millisecond + ".dcm";

                        _dpi  = Printers.Instance.GetMaxDensityOf(_printerAE);
                        _size = ConvertFilmSizeFrom(FilmSize, _dpi);
                        if (_staThread == null)
                        {
                            _staThread = new Thread(new ThreadStart(new Action(() => SaveEFilm(_proxy, _ifSaveEFilm))));
                            _staThread.SetApartmentState(ApartmentState.STA);
                            _staThread.Start();
                        }

                        windowLockEvent.Set();
                        //Console.WriteLine("window lock set");

                        //Console.WriteLine("job lock: wait image burnt");
                        Logger.LogWarning("Waiting for film burning (milliseconds): " + _timeOfWaitingForFilmBurning);
                        lockEvent.WaitOne(millisecondsTimeout: _timeOfWaitingForFilmBurning);                             //first time: 7000, waiting for dll loaded
                        _timeOfWaitingForFilmBurning = MiscellaneousConfigureReader.Instance.TimeOfWaitingForFilmBurning; //later: 3000
                        lockEvent.Reset();
                        //t.Abort();
                        //Console.WriteLine("Job lock reset");

                        //Console.WriteLine("begin print");

                        filmBoxBuilder.SetLayout("STANDARD\\1,1");
                        filmBoxBuilder.SetOrientation((FilmingPrintJob.Types.Orientation)Orientation);

                        FilmingPrintJob.Types.ImageBox.Builder imageBoxBuilder = new FilmingPrintJob.Types.ImageBox.Builder();
                        if (_efilmOriginalSopInstanceUID == string.Empty)
                        {
                            Logger.LogError("can't get sopinstanceUID of image to be print, may be print failed");
                        }
                        imageBoxBuilder.SetOriginSOPInstanceUID(_efilmOriginalSopInstanceUID);
                        imageBoxBuilder.SetImagePath(_efilmFullPath);
                        filmBoxBuilder.AddImageBox(imageBoxBuilder);
                        _studyInstanceUid = _efilmOriginalStudyInstanceUid;
                        //----------------------------new code end------------------------------------
                    }
                    else
                    {
                        //------------------------------------old code begin---------------------------------
                        filmBoxBuilder.SetLayout(_layout);
                        filmBoxBuilder.SetLutFilePath(_lutFile);
                        filmBoxBuilder.SetOrientation((FilmingPrintJob.Types.Orientation)Orientation);

                        for (int j = 0; j < _sheetImageCount && iCurrentIndex < iTotalImage; j++, iCurrentIndex++)
                        {
                            FilmingPrintJob.Types.ImageBox.Builder imageBoxBuilder = new FilmingPrintJob.Types.ImageBox.Builder();
                            imageBoxBuilder.SetImagePath(_dicomFilePathList[iCurrentIndex]);
                            filmBoxBuilder.AddImageBox(imageBoxBuilder);
                        }
                        //------------------------------------old code end---------------------------------
                    }


                    //for update image print status

                    filmBoxBuilder.StudyInstanceUid = _studyInstanceUid;

                    foreach (var imageUID in _originalImageUIDList)
                    {
                        if (string.IsNullOrEmpty(imageUID))
                        {
                            continue;
                        }
                        var originalImageBox = new FilmingPrintJob.Types.ImageBox.Builder();
                        originalImageBox.OriginSOPInstanceUID = imageUID;

                        filmBoxBuilder.AddImageBox(originalImageBox);
                    }

                    filmingPrintJobBuilder.AddFilmBox(filmBoxBuilder);
                }

                FilmingJobStatus.Builder filmingJobStatusBuilder = new FilmingJobStatus.Builder();
                filmingJobStatusBuilder.SetJobStatus(JobStatus.PENDING);
                filmingPrintJobBuilder.SetJobStatus(filmingJobStatusBuilder);

                filmingPrintJob = filmingPrintJobBuilder.Build();

                serializedJob = filmingPrintJob.ToByteArray();

                Logger.LogFuncDown();
            }
            catch (System.Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
                serializedJob = null;
                throw;
            }

            return(serializedJob);
        }