예제 #1
0
파일: CardModel.cs 프로젝트: whhub/Filming
        public void CreateFilmBoxList(PeerNode peer, Core.ICommunicationProxy proxy, List <CardModel> cardList)
        {
            try
            {
                Logger.LogFuncUp();
                var patient = new Patient();
                //Job Info Title
                CurrentPeer = peer;
                var cellModels = FilmPageModel.CellModels.ToList();
                patient.PatientAge  = string.Join(";", cellModels.Select(c => c.PatientAge).Where(s => !string.IsNullOrWhiteSpace(s)).Distinct());
                patient.PatientID   = string.Join(";", cellModels.Select(c => c.PatientId).Where(s => !string.IsNullOrWhiteSpace(s)).Distinct());
                patient.PatientName = string.Join(";", cellModels.Select(c => c.PatientsName).Where(s => !string.IsNullOrWhiteSpace(s)).Distinct());
                patient.PatientSex  = string.Join(";", cellModels.Select(c => c.PatientsSex).Where(s => !string.IsNullOrWhiteSpace(s)).Distinct());
                patient.StudyID     = string.Join(";", cellModels.Select(c => c.StudyId).Where(s => !string.IsNullOrWhiteSpace(s)).Distinct());
                CurrentPatient      = patient;

                //  var printSetting = new PrintSetting();

                PrintSetting.Copies               = uint.Parse(PrinterSettingInfoModel.CurrCopyCount);
                PrintSetting.FilmDestination      = this.PrinterSettingInfoModel.CurrFilmDestination;
                PrintSetting.FilmingDateTime      = DateTime.Now;
                PrintSetting.IfSaveElectronicFilm = bool.Parse(this.PrinterSettingInfoModel.IfSave);
                PrintSetting.MediaType            = this.PrinterSettingInfoModel.CurrMediumType;
                PrintSetting.Priority             = PRINT_PRIORITY.MEDIUM;
                PrintSetting.IfColorPrint         = bool.Parse(this.PrinterSettingInfoModel.IfColorPrint);
                var filmPageModel = FilmPageModel;

                var filmBox = new FilmingPrintJob.Types.FilmBox.Builder();

                var dicomFilePath       = Widget.CreatePrintImageFullPath(0, 0);
                var dicomConvertorProxy = McsfDicomConvertorProxyFactory.Instance().CreateDicomConvertorProxy();

                dicomConvertorProxy.SaveFile(filmPageModel.EFilmModel.DataHeaderForPrint, dicomFilePath, proxy);

                var imageBoxForPrint = new FilmingPrintJob.Types.ImageBox.Builder {
                    ImagePath = dicomFilePath
                };                                                                                              //{ ImagePath = filmPageModel.EFilmModel.EFilmFilePath };
                filmBox.AddImageBox(imageBoxForPrint);
                filmBox.FilmSize         = this.PrinterSettingInfoModel.CurrFilmSize;
                filmBox.Orientation      = this.PrinterSettingInfoModel.CurrOrientation == "0" ? FilmingPrintJob.Types.Orientation.PORTRAIT : FilmingPrintJob.Types.Orientation.LANDSCAPE;
                filmBox.Layout           = "STANDARD\\1,1";
                filmBox.PatientName      = filmPageModel.PageTitleInfoModel.PatientName;
                filmBox.StudyInstanceUid = string.Join(";", filmPageModel.CellModels.Select(c => c.StudyInstanceUid).Where(s => !string.IsNullOrWhiteSpace(s)).Distinct());

                //fill sopinstance list  for print status updating
                var sopInstanceUids = filmPageModel.CellModels.Select(c => c.SopUid).Distinct();

                foreach (var uid in sopInstanceUids)
                {
                    var imageBoxForPrintStatusUpdating = new FilmingPrintJob.Types.ImageBox.Builder {
                        OriginSOPInstanceUID = uid
                    };
                    filmBox.AddImageBox(imageBoxForPrintStatusUpdating);
                }

                //fill seriesUid list for print status updating
                var seriesUids = filmPageModel.CellModels.Select(c => c.SeriesUid).Distinct().Where(s => !string.IsNullOrWhiteSpace(s));
                filmBox.AddRangeSeriesInstanceUidList(seriesUids);

                filmBoxList.Add(filmBox);

                Logger.LogFuncDown();
            }
            catch (Exception ex)
            {
                Logger.LogFuncException(ex.Message + ex.StackTrace);
            }
        }
예제 #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);
        }