/// <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); }
/// <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); }