internal static RectangleF GetRect(FlexChart flexChart, IAnnotationBase anno)
        {
            var    annotaion = anno as AnnotationBase;
            PointF point     = PointF.Empty;
            _Size  size;
            SizeF  sz;

            if (annotaion is Line)
            {
                return(GetRect(flexChart, annotaion as Line));
            }
            else if (annotaion is Polygon)
            {
                return(GetRect(flexChart, annotaion as Polygon));
            }
            else
            {
                size = anno.GetSize();
                sz   = new SizeF((float)size.Width, (float)size.Height);
                if (annotaion is Text)
                {
                    sz = TextRenderer.MeasureText(((Text)annotaion).Content, ((Text)annotaion).ContentStyle.Font);
                }
                PointF loc = AnnoPointToCoords(flexChart, annotaion, annotaion.Location);
                point.X = (float)(loc.X - size.Width / 2);
                point.Y = (float)(loc.Y - size.Height / 2);
            }
            return(new RectangleF(point.X, point.Y, sz.Width, sz.Height));
        }
        public static PointF CoordsToAnnoPoint(FlexChart flexChart, IAnnotationBase annotation, PointF point)
        {
            PointF pt = PointF.Empty;

            switch (annotation.Attachment)
            {
            case AnnotationAttachment.Absolute:
                pt = point;
                break;

            case AnnotationAttachment.Relative:
                pt = new PointF
                {
                    X = point.X / flexChart.PlotRect.Width,
                    Y = point.Y / flexChart.PlotRect.Height
                };
                break;

            case AnnotationAttachment.DataCoordinate:
                double x      = point.X;
                double y      = point.Y;
                var    xValue = (float)flexChart.AxisX.ConvertBack(x);
                var    yValue = (float)flexChart.AxisY.ConvertBack(y);
                pt = new PointF(xValue, yValue);
                break;
            }
            return(pt);
        }
        public static PointF AnnoPointToCoords(FlexChart flexChart, IAnnotationBase annotation, PointF point)
        {
            PointF pt = PointF.Empty;

            switch (annotation.Attachment)
            {
            case AnnotationAttachment.Absolute:
                pt = point;
                break;

            case AnnotationAttachment.Relative:
                pt = new PointF
                {
                    X = flexChart.PlotRect.Width * point.X,
                    Y = flexChart.PlotRect.Height * point.Y,
                };
                break;

            case AnnotationAttachment.DataCoordinate:
                pt = new PointF
                {
                    X = (float)flexChart.AxisX.Convert(point.X),
                    Y = (float)flexChart.AxisY.Convert(point.Y),
                };
                break;
            }
            return(pt);
        }
        internal static Rect GetRect(C1FlexChart flexChart, IAnnotationBase anno)
        {
            var   annotaion = anno as AnnotationBase;
            Point point     = new Point();
            _Size size;
            Size  sz;

            if (annotaion is Line)
            {
                return(GetRect(flexChart, annotaion as Line));
            }
            else if (annotaion is Polygon)
            {
                return(GetRect(flexChart, annotaion as Polygon));
            }
            else
            {
                size = anno.GetSize();
                sz   = new Size((float)size.Width, (float)size.Height);
                if (annotaion is Text)
                {
                    TextBlock txtBlock = new TextBlock();
                    txtBlock.FontStyle = (((Text)annotaion).Style.FontStyle);
                    txtBlock.Text      = ((Text)annotaion).Content;
                    txtBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

                    sz = txtBlock.DesiredSize;
                }
                Point loc = AnnoPointToCoords(flexChart, annotaion, annotaion.Location);
                point.X = (float)(loc.X - size.Width / 2);
                point.Y = (float)(loc.Y - size.Height / 2);
            }
            return(new Rect(point.X, point.Y, sz.Width, sz.Height));
        }