private void StartComposing ( CompositeInstanceDataSet dicomInstances, IDicomMediaProfileProcessor profileProcessor, DirectoryInfo mediaDirectory ) { __MediaDirectory = mediaDirectory; profileProcessor.CopyDirectory += new EventHandler <CopyEventArgs> (profileProcessor_CopyDirectory); profileProcessor.CopyFile += new EventHandler <CopyEventArgs> (profileProcessor_CopyFile); try { long size; size = CreateDicomDirectory(dicomInstances, __MediaDirectory, profileProcessor); if (size > profileProcessor.GetProfileMediaSize( ) || profileProcessor.CalculateRemainingDataSize(size) < 0) { MediaObject.ExecutionStatus.ExecutionStatus = ExecutionStatus.Failure; MediaObject.ExecutionStatus.ExecutionStatusInfo = ExecutionStatusInfo.SET_OVERSIZED; throw new InvalidOperationException("Not enough media size to complete the request."); } if (null == MediaObject.IncludeDisplayApplication || MediaObject.IncludeDisplayApplication.Value == YesNo.Undefined || MediaObject.IncludeDisplayApplication.Value == YesNo.Yes) { profileProcessor.IncludeDisplayApplication( ); } if (null == MediaObject.AllowNonDicomObjects || MediaObject.AllowNonDicomObjects.Value == IncludeNonDicomObjects.Undefined) { profileProcessor.IncludeNonDicomObjects(IncludeNonDicomObjects.Undefined); } else if (MediaObject.AllowNonDicomObjects.Value != IncludeNonDicomObjects.No) { profileProcessor.IncludeNonDicomObjects(MediaObject.AllowNonDicomObjects.Value); } } finally { profileProcessor.CopyDirectory -= new EventHandler <CopyEventArgs> (profileProcessor_CopyDirectory); profileProcessor.CopyFile -= new EventHandler <CopyEventArgs> (profileProcessor_CopyFile); __MediaDirectory = null; } }
private long CreateDicomDirectory ( CompositeInstanceDataSet dicomInstances, DirectoryInfo mediaDirectory, IDicomMediaProfileProcessor profileProcessor ) { using (DicomDir dicomDir = new DicomDir(mediaDirectory.FullName)) { List <string> createdFiles; createdFiles = ProcessDicomDir(mediaDirectory, dicomInstances, dicomDir, profileProcessor); dicomDir.SetFileSetId(mediaDirectory.Name); if (!string.IsNullOrEmpty(DescriptorFile)) { string descriptorFile; descriptorFile = CopyDescriptorFile(mediaDirectory.FullName); dicomDir.SetDescriptorFile(descriptorFile, DescriptorFileCharacterSet); createdFiles.Add(descriptorFile); } profileProcessor.OnDicomDirCompleted(dicomDir.DataSet); dicomDir.Save( ); createdFiles.Add(Path.Combine(mediaDirectory.FullName, "DICOMDIR")); return(GetFilesSize(createdFiles)); } }
private List <string> ProcessDicomDir ( DirectoryInfo mediaDirectory, CompositeInstanceDataSet dicomInstances, DicomDir dicomDir, IDicomMediaProfileProcessor profileProcessor ) { string rootKey; List <string> createdFiles; int patientIndex; bool allowLossyCompression; rootKey = "DICOM"; createdFiles = new List <string> (dicomInstances.Instance.Count); patientIndex = 0; allowLossyCompression = (MediaObject.AllowLossyCompression == null || MediaObject.AllowLossyCompression.Value != YesNo.No); foreach (CompositeInstanceDataSet.PatientRow patient in dicomInstances.Patient) { string patientKey; int studyIndex; patientIndex++; patientKey = "PATIENT" + patientIndex.ToString( ); studyIndex = 0; foreach (CompositeInstanceDataSet.StudyRow study in patient.GetStudyRows( )) { string studyKey; int seriesIndex; studyIndex++; studyKey = "STUDY" + studyIndex.ToString( ); seriesIndex = 0; foreach (CompositeInstanceDataSet.SeriesRow series in study.GetSeriesRows( )) { string seriesKey; int instanceIndex; seriesIndex++; seriesKey = "SERIES" + seriesIndex.ToString( ); instanceIndex = 0; foreach (CompositeInstanceDataSet.InstanceRow instance in series.GetInstanceRows( )) { string instanceKey; string instancePath; instanceIndex++; instanceKey = instanceIndex.ToString( ); instancePath = GetInstancePath(mediaDirectory, rootKey, patientKey, studyKey, seriesKey, instanceKey); if (!Directory.Exists(Path.GetDirectoryName(instancePath))) { Directory.CreateDirectory(Path.GetDirectoryName(instancePath)); } File.Copy(instance.ReferencedFile, instancePath, true); profileProcessor.BeforeAddingToDicomDir(instancePath, instance, allowLossyCompression); dicomDir.InsertFile(instancePath); profileProcessor.AfterAddingToDicomDir(instancePath, instance, dicomDir.DataSet); createdFiles.Add(instancePath); } } } } return(createdFiles); }