private static IMarkup DoGraphicToIMarkup(IGraphic graphic)
        {
            if (graphic == null || graphic.ParentPresentationImage == null)
                return null;

            IMarkup markup = null;
            var roiGraphic = graphic as RoiGraphic;
            if (roiGraphic != null)
            {
                if (roiGraphic.Roi is EllipticalRoi)
                {
                    var ellipse = roiGraphic.Roi as EllipticalRoi;

                    markup = new MarkupEllipse
                    {
                        TopLeft = new PointF(ellipse.BoundingBox.Left, ellipse.BoundingBox.Top),
                        BottomRight = new PointF(ellipse.BoundingBox.Right, ellipse.BoundingBox.Bottom),
                        Name = graphic.Name,
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                else if (roiGraphic.Roi is PolygonalRoi)
                {
                    var polygon = roiGraphic.Roi as PolygonalRoi;

                    markup = new MarkupPolygonal
                    {
                        Name = graphic.Name,
                        Vertices = polygon.Polygon.Vertices == null ? null : new List<PointF>(polygon.Polygon.Vertices),
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                else if (roiGraphic.Roi is RectangularRoi)
                {
                    var rectangularRoi = roiGraphic.Roi as RectangularRoi;

                    markup = new MarkupRectangle
                    {
                        TopLeft = new PointF(rectangularRoi.BoundingBox.Left, rectangularRoi.BoundingBox.Top),
                        BottomRight = new PointF(rectangularRoi.BoundingBox.Right, rectangularRoi.BoundingBox.Bottom),
                        Name = graphic.Name,
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                else if (roiGraphic.Roi is ProtractorRoi)
                {
                    var protractorRoi = roiGraphic.Roi as ProtractorRoi;

                    markup = new MarkupProtractor
                    {
                        TopLeft = new PointF(protractorRoi.BoundingBox.Left, protractorRoi.BoundingBox.Top),
                        BottomRight = new PointF(protractorRoi.BoundingBox.Right, protractorRoi.BoundingBox.Bottom),
                        Name = graphic.Name,
                        Points = protractorRoi.Points == null ? null : new List<PointF>(protractorRoi.Points),
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }
                else if (roiGraphic.Roi is LinearRoi)
                {
                    var linearRoi = roiGraphic.Roi as LinearRoi;

                    markup = new MarkupLinear
                    {
                        Vertices = linearRoi.Points == null ? null : new List<PointF>(linearRoi.Points),
                        Name = graphic.Name,
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                if (markup != null)
                    markup.CaptionText = roiGraphic.Roi.GetType().Name + Environment.NewLine + roiGraphic.Callout.Text;
            }
            else if (graphic is UserCalloutGraphic)
            {
                var userCalloutGraphic = graphic as UserCalloutGraphic;
                markup = new MarkupPoint
                {
                    Name = graphic.Name,
                    CaptionText = userCalloutGraphic.Text,
                    CalloutText = userCalloutGraphic.Text,
                    CalloutLocation = userCalloutGraphic.TextLocation,
                    Point = userCalloutGraphic.AnchorPoint,
                    GraphicHashcode = graphic.GetHashCode()
                };
            }
            else if (graphic is CrosshairCalloutGraphic)
            {
                var userCalloutGraphic = graphic as CrosshairCalloutGraphic;
                markup = new MarkupPoint
                {
                    Name = graphic.Name,
                    CaptionText = userCalloutGraphic.Text,
                    CalloutText = userCalloutGraphic.Text,
                    CalloutLocation = userCalloutGraphic.TextLocation,
                    Point = userCalloutGraphic.AnchorPoint,
                    UseCrosshair = true,
                    GraphicHashcode = graphic.GetHashCode()
                };
            }
            else if (graphic is InvariantTextPrimitive)
            {
                var textGraphic = (InvariantTextPrimitive)graphic;
                markup = new MarkupPoint
                {
                    Name = graphic.Name,
                    CaptionText = textGraphic.Text,
                    CalloutText = textGraphic.Text,
                    CalloutLocation = textGraphic.Location,
                    Point = textGraphic.Location,
                    UseCrosshair = false,
                    GraphicHashcode = graphic.GetHashCode()
                };
            }
            else if (graphic is ContextMenuControlGraphic)
            {
                markup = DoGraphicToIMarkup(((ContextMenuControlGraphic)graphic).Subject);
            }
            else if (graphic is AimGraphic)
            {
                markup = DoGraphicToIMarkup(((AimGraphic)graphic).Graphic);
                // Fix name - not all composite graphics may have the Name set correctly
                if (markup != null)
                    markup.Name = ((AimGraphic)graphic).Graphic.Name;
            }
            else if (graphic is StandardStatefulGraphic)
            {
                markup = DoGraphicToIMarkup(((StandardStatefulGraphic)graphic).Subject);
            }
            else if (graphic is SegFrameImageGraphic)
            {
                // NO-OP
                // TODO: implement IMarkup for this type of graphic if we ever need to have segmentation graphic in the TemplateTree
            }
            else
                System.Diagnostics.Debug.Assert(false, "Could not create Markup from " + graphic.GetType().Name);

            return markup;
        }
コード例 #2
0
        private static IMarkup DoGraphicToIMarkup(IGraphic graphic)
        {
            if (graphic == null || graphic.ParentPresentationImage == null)
            {
                return(null);
            }

            IMarkup markup     = null;
            var     roiGraphic = graphic as RoiGraphic;

            if (roiGraphic != null)
            {
                if (roiGraphic.Roi is EllipticalRoi)
                {
                    var ellipse = roiGraphic.Roi as EllipticalRoi;

                    markup = new MarkupEllipse
                    {
                        TopLeft         = new PointF(ellipse.BoundingBox.Left, ellipse.BoundingBox.Top),
                        BottomRight     = new PointF(ellipse.BoundingBox.Right, ellipse.BoundingBox.Bottom),
                        Name            = graphic.Name,
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                else if (roiGraphic.Roi is PolygonalRoi)
                {
                    var polygon = roiGraphic.Roi as PolygonalRoi;

                    markup = new MarkupPolygonal
                    {
                        Name            = graphic.Name,
                        Vertices        = polygon.Polygon.Vertices == null ? null : new List <PointF>(polygon.Polygon.Vertices),
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                else if (roiGraphic.Roi is RectangularRoi)
                {
                    var rectangularRoi = roiGraphic.Roi as RectangularRoi;

                    markup = new MarkupRectangle
                    {
                        TopLeft         = new PointF(rectangularRoi.BoundingBox.Left, rectangularRoi.BoundingBox.Top),
                        BottomRight     = new PointF(rectangularRoi.BoundingBox.Right, rectangularRoi.BoundingBox.Bottom),
                        Name            = graphic.Name,
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                else if (roiGraphic.Roi is ProtractorRoi)
                {
                    var protractorRoi = roiGraphic.Roi as ProtractorRoi;

                    markup = new MarkupProtractor
                    {
                        TopLeft         = new PointF(protractorRoi.BoundingBox.Left, protractorRoi.BoundingBox.Top),
                        BottomRight     = new PointF(protractorRoi.BoundingBox.Right, protractorRoi.BoundingBox.Bottom),
                        Name            = graphic.Name,
                        Points          = protractorRoi.Points == null ? null : new List <PointF>(protractorRoi.Points),
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }
                else if (roiGraphic.Roi is LinearRoi)
                {
                    var linearRoi = roiGraphic.Roi as LinearRoi;

                    markup = new MarkupLinear
                    {
                        Vertices        = linearRoi.Points == null ? null : new List <PointF>(linearRoi.Points),
                        Name            = graphic.Name,
                        GraphicHashcode = graphic.GetHashCode(),
                        CalloutLocation = roiGraphic.Callout.TextLocation
                    };
                }

                if (markup != null)
                {
                    markup.CaptionText = roiGraphic.Roi.GetType().Name + Environment.NewLine + roiGraphic.Callout.Text;
                }
            }
            else if (graphic is UserCalloutGraphic)
            {
                var userCalloutGraphic = graphic as UserCalloutGraphic;
                markup = new MarkupPoint
                {
                    Name            = graphic.Name,
                    CaptionText     = userCalloutGraphic.Text,
                    CalloutText     = userCalloutGraphic.Text,
                    CalloutLocation = userCalloutGraphic.TextLocation,
                    Point           = userCalloutGraphic.AnchorPoint,
                    GraphicHashcode = graphic.GetHashCode()
                };
            }
            else if (graphic is CrosshairCalloutGraphic)
            {
                var userCalloutGraphic = graphic as CrosshairCalloutGraphic;
                markup = new MarkupPoint
                {
                    Name            = graphic.Name,
                    CaptionText     = userCalloutGraphic.Text,
                    CalloutText     = userCalloutGraphic.Text,
                    CalloutLocation = userCalloutGraphic.TextLocation,
                    Point           = userCalloutGraphic.AnchorPoint,
                    UseCrosshair    = true,
                    GraphicHashcode = graphic.GetHashCode()
                };
            }
            else if (graphic is InvariantTextPrimitive)
            {
                var textGraphic = (InvariantTextPrimitive)graphic;
                markup = new MarkupPoint
                {
                    Name            = graphic.Name,
                    CaptionText     = textGraphic.Text,
                    CalloutText     = textGraphic.Text,
                    CalloutLocation = textGraphic.Location,
                    Point           = textGraphic.Location,
                    UseCrosshair    = false,
                    GraphicHashcode = graphic.GetHashCode()
                };
            }
            else if (graphic is ContextMenuControlGraphic)
            {
                markup = DoGraphicToIMarkup(((ContextMenuControlGraphic)graphic).Subject);
            }
            else if (graphic is AimGraphic)
            {
                markup = DoGraphicToIMarkup(((AimGraphic)graphic).Graphic);
                // Fix name - not all composite graphics may have the Name set correctly
                if (markup != null)
                {
                    markup.Name = ((AimGraphic)graphic).Graphic.Name;
                }
            }
            else if (graphic is StandardStatefulGraphic)
            {
                markup = DoGraphicToIMarkup(((StandardStatefulGraphic)graphic).Subject);
            }
            else if (graphic is SegFrameImageGraphic)
            {
                // NO-OP
                // TODO: implement IMarkup for this type of graphic if we ever need to have segmentation graphic in the TemplateTree
            }
            else
            {
                System.Diagnostics.Debug.Assert(false, "Could not create Markup from " + graphic.GetType().Name);
            }

            return(markup);
        }