public static DicomDataset Write(DicomRTContourImageItem contour) { var ds = new DicomDataset(); ds.Add(DicomTag.ReferencedSOPClassUID, contour.ReferencedSOPClassUID); ds.Add(DicomTag.ReferencedSOPInstanceUID, contour.ReferencedSOPInstanceUID); return(ds); }
public static DicomDataset Write(DicomRTReferencedSeries series) { var ds = new DicomDataset(); ds.Add(DicomTag.SeriesInstanceUID, series.SeriesInstanceUID); var listOfContour = new List <DicomDataset>(); foreach (var contour in series.ContourImages) { var newDS = DicomRTContourImageItem.Write(contour); listOfContour.Add(newDS); } ds.Add(new DicomSequence(DicomTag.ContourImageSequence, listOfContour.ToArray())); return(ds); }
public static DicomRTReferencedSeries Read(DicomDataset ds) { var seriesInstanceUID = ds.GetStringOrEmpty(DicomTag.SeriesInstanceUID); var contourImages = new List <DicomRTContourImageItem>(); if (ds.Contains(DicomTag.ContourImageSequence)) { // Changed for new OSS fo-dicom-desktop var seq = ds.GetSequence(DicomTag.ContourImageSequence); //var seq = ds.Get<DicomSequence>(DicomTag.ContourImageSequence); foreach (var item in seq) { var contourImageItem = DicomRTContourImageItem.Read(item); contourImages.Add(contourImageItem); } } return(new DicomRTReferencedSeries(seriesInstanceUID, contourImages)); }
/// <summary> /// Constructs a new DicomDataSet representing the given DicomRTContourItem /// </summary> /// <param name="contourItem"></param> /// <returns></returns> public static DicomDataset Write(DicomRTContourItem contourItem) { var newDS = new DicomDataset(); // The contour data is in Dicom Patient Coordinates (always mm units) // rounding to 0.001 gives us 1 micron accuracy and should not blow the 16 char limit in DICOM // for DS value representations. var roundedData = contourItem.Data.Select(d => d.ToString("F3", CultureInfo.InvariantCulture)).ToArray(); newDS.Add(DicomTag.ContourData, roundedData); newDS.Add(DicomTag.NumberOfContourPoints, contourItem.NumberOfPoints); newDS.Add(DicomTag.ContourGeometricType, contourItem.GeometricType); var imageDataSets = new List <DicomDataset>(); foreach (var imageSeq in contourItem.ImageSeq) { imageDataSets.Add(DicomRTContourImageItem.Write(imageSeq)); } newDS.Add(new DicomSequence(DicomTag.ContourImageSequence, imageDataSets.ToArray())); return(newDS); }
/// <summary> /// Read an RT Contour Item from the given dataset. /// </summary> /// <param name="ds"></param> /// <returns></returns> public static DicomRTContourItem Read(DicomDataset ds) { // Changed for new OSS fo-dicom-desktop var numberOfPoints = ds.GetSingleValue <int>(DicomTag.NumberOfContourPoints); // fo-dicom internally parses strings to decimal using InvariantCulture and then converts to double var data = ds.GetValues <double>(DicomTag.ContourData); //var numberOfPoints = ds.Get<int>(DicomTag.NumberOfContourPoints); //// fo-dicom internally parses strings to decimal using InvariantCulture and then converts to double //var data = ds.Get<double[]>(DicomTag.ContourData); var geometricType = ds.GetTrimmedStringOrEmpty(DicomTag.ContourGeometricType); List <DicomRTContourImageItem> listImages = new List <DicomRTContourImageItem>(); if (ds.Contains(DicomTag.ContourImageSequence)) { // Changed for new OSS fo-dicom-desktop var seqImages = ds.GetSequence(DicomTag.ContourImageSequence); //var seqImages = ds.Get<DicomSequence>(DicomTag.ContourImageSequence); foreach (var item in seqImages) { listImages.Add(DicomRTContourImageItem.Read(item)); } } return(new DicomRTContourItem(data, numberOfPoints, geometricType, listImages)); }
public static DicomRTFrameOFReference CreateReferencedFrames(IReadOnlyList <DicomIdentifiers> identifiers) { // Check all identifiers have the same SeriesInstanceUid var firstIdentifier = identifiers.First(); if (identifiers.Any(x => x.Series.SeriesInstanceUid != firstIdentifier.Series.SeriesInstanceUid)) { throw new InvalidOperationException("the list of slices are not for the same series"); } if (identifiers.Any(x => x.Study.StudyInstanceUid != firstIdentifier.Study.StudyInstanceUid)) { throw new InvalidOperationException("the list of slices are not for the same study"); } if (identifiers.Any(x => x.FrameOfReference.FrameOfReferenceUid != firstIdentifier.FrameOfReference.FrameOfReferenceUid)) { throw new InvalidOperationException("the list of slices are not from the same frame of reference"); } var frameOfReference = new DicomRTFrameOFReference(firstIdentifier.FrameOfReference.FrameOfReferenceUid, new List <DicomRTReferencedStudy>() { new DicomRTReferencedStudy(DicomRTReferencedStudy.StudyComponentManagementSopClass, firstIdentifier.Study.StudyInstanceUid, new List <DicomRTReferencedSeries>() { new DicomRTReferencedSeries(firstIdentifier.Series.SeriesInstanceUid, identifiers.Select(x => DicomRTContourImageItem.Reference(x.Image.SopCommon)).ToList()) }) }); return(frameOfReference); }