private List <IDisplaySet> DoCreateSingleImageDisplaySets(Series series) { List <IDisplaySet> displaySets = new List <IDisplaySet>(); int position = 0; foreach (Sop sop in series.Sops) { List <IPresentationImage> images = PresentationImageFactory.CreateImages(sop); if (images.Count == 0) { continue; } if (sop.IsImage) { ImageSop imageSop = (ImageSop)sop; DicomDisplaySetDescriptor descriptor; if (imageSop.NumberOfFrames == 1) { descriptor = new SingleImageDisplaySetDescriptor(series.GetIdentifier(), imageSop, position++); } else { descriptor = new MultiframeDisplaySetDescriptor(series.GetIdentifier(), sop.SopInstanceUid, sop.InstanceNumber); } DisplaySet displaySet = new DisplaySet(descriptor); foreach (IPresentationImage image in images) { displaySet.PresentationImages.Add(image); } displaySets.Add(displaySet); } else { //The sop is actually a container for other referenced sops, like key images. foreach (IPresentationImage image in images) { DisplaySetDescriptor descriptor = null; if (image is IImageSopProvider) { IImageSopProvider provider = (IImageSopProvider)image; if (provider.ImageSop.NumberOfFrames == 1) { descriptor = new SingleImageDisplaySetDescriptor(series.GetIdentifier(), provider.ImageSop, position++); } else { descriptor = new SingleFrameDisplaySetDescriptor(series.GetIdentifier(), provider.Frame, position++); } } else { //TODO (CR Jan 2010): this because the design here is funny... the factory here should actually know something about the key object series it is building for ISeriesIdentifier sourceSeries = series.GetIdentifier(); descriptor = new BasicDisplaySetDescriptor(); descriptor.Description = sourceSeries.SeriesDescription; descriptor.Name = string.Format("{0}: {1}", sourceSeries.SeriesNumber, sourceSeries.SeriesDescription); descriptor.Number = sourceSeries.SeriesNumber.GetValueOrDefault(0); descriptor.Uid = sourceSeries.SeriesInstanceUid; } DisplaySet displaySet = new DisplaySet(descriptor); displaySet.PresentationImages.Add(image); displaySets.Add(displaySet); } } } if (displaySets.Count == 1) { //Degenerate case; single image series, which we're not supposed to create. displaySets[0].Dispose(); displaySets.Clear(); } return(displaySets); }
protected SingleFrameDisplaySetDescriptor(SingleFrameDisplaySetDescriptor source, ICloningContext context) : base(source, context) { context.CloneFields(source, this); }