public void AddReferencedImage(string sopClassUID, string SOPIntanceUID) { SopInstanceReference sopRef = new SopInstanceReference(); sopRef.ReferencedSopClassUid = sopClassUID; sopRef.ReferencedSopInstanceUid = SOPIntanceUID; if (ReferencedSeriesSequence[0].ReferencedImageSequence == null) { ReferencedSeriesSequence[0].ReferencedImageSequence = new List <SopInstanceReference>(); } ReferencedSeriesSequence[0].ReferencedImageSequence.Add(sopRef); }
public static StudyLayout ToStudyLayout(this DicomDataSet ds) { StructuredDisplayImageBoxModuleEx ibModule = new StructuredDisplayImageBoxModuleEx(); StudyLayout layout = null; Dictionary <string, string> mappedSeries = new Dictionary <string, string>(); ds.Get(ibModule); if (ibModule != null) { var studyIntanceUID = ds.GetValue <string>(DicomTag.StudyInstanceUID, string.Empty); layout = new StudyLayout(); DateTime dateTime = DateTime.Parse(ds.GetValue <string>(DicomTag.SeriesDate, string.Empty) + " " + ds.GetValue <string>(DicomTag.SeriesTime, string.Empty)); layout.Name = dateTime.ToString("G"); if (!string.IsNullOrEmpty(ibModule.ImageDisplayFormat)) { string data = ibModule.ImageDisplayFormat.Replace(@"STANDARD\", ""); string[] info = data.Split(','); if (info.Count() >= 2) { layout.Columns = Convert.ToInt32(info[0]); layout.Rows = Convert.ToInt32(info[1]); } } foreach (ExtendedReferenceSeries series in ibModule.ReferencedSeriesSequence) { SeriesInfo info = new SeriesInfo(); if (series.ImageBoxNumber.HasValue) { info.ImageBoxNumber = series.ImageBoxNumber.Value; } info.SeriesInstanceUID = series.SeriesInstanceUID; info.StudyInstanceUID = ds.GetValue <string>(DicomTag.StudyInstanceUID, string.Empty); layout.Series.Add(info); } foreach (OtherStudyReference studyReference in ibModule.StudyContainingOtherReferences) { OtherStudies study = new OtherStudies(); study.StudyInstanceUID = studyReference.StudyInstanceUID; foreach (ExtendedReferenceSeries series in studyReference.ReferencedSeriesSequence) { SeriesInfo info = new SeriesInfo(); if (series.ImageBoxNumber.HasValue) { info.ImageBoxNumber = series.ImageBoxNumber.Value; } info.SeriesInstanceUID = series.SeriesInstanceUID; info.StudyInstanceUID = studyReference.StudyInstanceUID; study.Series.Add(info); } layout.OtherStudies.Add(study); } if (ibModule.StructuredDisplayImageBoxSequence.Count > 0 && ibModule.StructuredDisplayImageBoxSequence != null && ibModule.StructuredDisplayImageBoxSequence.Count > 0) { if (!(ibModule.StructuredDisplayImageBoxSequence.Count == 1 && ibModule.StructuredDisplayImageBoxSequence[0].DisplayEnvironmentSpatialPosition == null)) { ibModule.StructuredDisplayImageBoxSequence.Reverse(); foreach (ExtendedSDImageBox box in ibModule.StructuredDisplayImageBoxSequence) { if (box.DisplayEnvironmentSpatialPosition != null && box.DisplayEnvironmentSpatialPosition.Count == 4) { string referencedSOPInstanceUID = (box.ReferencedImageSequence != null && box.ReferencedImageSequence.Count > 0) ? box.ReferencedImageSequence[0].ImageSopInstanceReference.ReferencedSopInstanceUid : string.Empty; DataContracts.ImageBox imageBox = new DataContracts.ImageBox(referencedSOPInstanceUID); // // Top and bottom coordinates need to be switched. In DICOM the lower left is 0,0 in our viewer the lower left is 1,1 // imageBox.Position.leftTop = new LeadPointD(box.DisplayEnvironmentSpatialPosition[0], 1 - box.DisplayEnvironmentSpatialPosition[1]); imageBox.Position.rightBottom = new LeadPointD(box.DisplayEnvironmentSpatialPosition[2], 1 - box.DisplayEnvironmentSpatialPosition[3]); if (box.ImageBoxLayoutType.HasValue) { imageBox.ImageBoxLayoutType = box.ImageBoxLayoutType.Value; } if (box.ImageBoxNumber.HasValue) { imageBox.ImageBoxNumber = box.ImageBoxNumber.Value; } if (box.ReferencedFirstFrameSequence != null && box.ReferencedFirstFrameSequence.Count > 0) { ImageSopInstanceReference imgSopRef = box.ReferencedFirstFrameSequence[0]; imageBox.FirstFrame = new FirstFrame(); imageBox.FirstFrame.SOPClassUID = imgSopRef.ReferencedSopClassUid; imageBox.FirstFrame.SOPInstanceUID = imgSopRef.ReferencedSopInstanceUid; if (imgSopRef.ReferencedFrameNumber != null && imgSopRef.ReferencedFrameNumber.Count > 0) { imageBox.FirstFrame.FrameNumber = imgSopRef.ReferencedFrameNumber[0]; } } if (!string.IsNullOrEmpty(box.ImageDisplayFormat)) { string data = box.ImageDisplayFormat.Replace(@"STANDARD\", ""); string[] info = data.Split(','); if (info.Count() >= 2) { imageBox.ColumnPosition = Convert.ToInt32(info[0]); imageBox.RowPosition = Convert.ToInt32(info[1]); imageBox.NumberOfRows = box.Rows.Value; imageBox.NumberOfColumns = box.Columns.Value; } } if (box.ReferencedPresentationStateSequence != null && box.ReferencedPresentationStateSequence.Count > 0) { SopInstanceReference refPS = box.ReferencedPresentationStateSequence[0]; imageBox.ReferencedPresentationStateSOP = refPS.ReferencedSopInstanceUid; } if (box.DisplaySetHorizontalJustification.HasValue) { imageBox.HorizontalJustification = box.DisplaySetHorizontalJustification.Value; } if (box.DisplaySetVerticalJustification.HasValue) { imageBox.VerticalJustification = box.DisplaySetVerticalJustification.Value; } if (box.ImageBoxTileHorizontalDimension.HasValue) { imageBox.ImageBoxTileHorizontalDimension = box.ImageBoxTileHorizontalDimension.Value; } if (box.ImageBoxTileVerticalDimension.HasValue) { imageBox.ImageBoxTileVerticalDimension = box.ImageBoxTileVerticalDimension.Value; } layout.Boxes.Add(imageBox); } } } } } return(layout); }