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)); }