Completed
Last Updated: 07 Jul 2015 12:30 by ADMIN
How to reproduce: 
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.radChartView1.AreaType = ChartAreaType.Pie;
        PieSeries series = new PieSeries();
        series.DataPoints.Add(new PieDataPoint(0, "Germany"));
        series.DataPoints.Add(new PieDataPoint(0, "United States"));
        series.DataPoints.Add(new PieDataPoint(0, "France"));
        series.DataPoints.Add(new PieDataPoint(0, "United Kingdom"));
        series.ShowLabels = true;
        this.radChartView1.Series.Add(series);
        this.radChartView1.ShowSmartLabels = true;
    }
}

Workaround: 
this.radChartView1.ShowSmartLabels = false;
Completed
Last Updated: 07 Jul 2015 12:22 by Ian
By making IsVisibleInLegend = false at design time, get exception during compile (see attached) and also exceptions at run time

Aim:
I need to be able to hide certain chart text from legend

 
Completed
Last Updated: 26 Jun 2015 07:45 by ADMIN
To reproduce:
- Add line series with large point size and null points.
- Hover a near a point which is close to null point (the line break).

Workaround:
public class MyChartTooltipController : ChartTooltipController
{
    protected override ActionResult OnMouseMove(MouseEventArgs e)
    {
        for (int i = 0; i < this.Area.Series.Count; i++)
        {
            DataPoint point = this.Area.Series[i].HitTest(e.X, e.Y);
            DataPoint hoveredPoint = typeof(ChartTooltipController).GetField("hoveredPoint", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this) as DataPoint;
            ToolTip toolTip = typeof(ChartTooltipController).GetField("toolTip", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this) as ToolTip;
            if (point != null && hoveredPoint != point)
            {
                hoveredPoint = point;
                var result = typeof(CategoricalDataPoint).GetMethod("GetTooltipValue", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(hoveredPoint, null);
                
                if (result == null)
                {
                    return new ChartRefreshResult();
                }
            }
        }
        return base.OnMouseMove(e);
    }
}



 
Completed
Last Updated: 26 Jun 2015 07:34 by ADMIN
To reproduce:

Create a RadChartView with LineSeries. Subscribe to the CreatePointElement event and use the following code:

void Chart_CreatePointElement(object sender, ChartViewCreatePointElementEventArgs e)
{
    e.DataPointElement = new DataPointElement(e.DataPoint);
    e.DataPointElement.GradientStyle = GradientStyles.Solid;
    e.DataPointElement.GradientAngle = 270;
    e.DataPointElement.Shape = new DiamondShape();
    e.DataPointElement.BackColor = Color.Red;
    e.DataPointElement.BackColor2 = Color.Blue;
    e.DataPointElement.BackColor3 = Color.Blue;
    e.DataPointElement.BackColor4 = Color.Blue;
}

The elements paint when you use ChamferedRectShape.

Workaround 
class MyDiamondShape : ElementShape
{
    public override GraphicsPath CreatePath(Rectangle bounds)
    {
        GraphicsPath path = new GraphicsPath();
        
        path.AddPolygon(new PointF[]
        {
            new PointF(bounds.X + 0.5f * bounds.Width, bounds.Top),
            new PointF(bounds.Right, bounds.Y + 0.5f * bounds.Height),
            new PointF(bounds.X + 0.5f * bounds.Width, bounds.Bottom),
            new PointF(bounds.Left, bounds.Y + 0.5f * bounds.Height)
        });
    
        return path;
    }
}

class MyStarShape : ElementShape
{
    private int arms;
    private float innerRadiusRatio;
    
    public MyStarShape()
    {
        this.arms = 8;
        this.innerRadiusRatio = 0.2f;
    }
    
    /// <summary>
    /// Creates Star like shape. Overrides CreatePath method in the base class
    /// ElementShape.
    /// </summary>
    public override GraphicsPath CreatePath(Rectangle bounds)
    {
        GraphicsPath path = new GraphicsPath();
        
        double angle = Math.PI / arms;
        double offset = Math.PI / 2d;
        PointF center = new PointF(bounds.X + bounds.Width / 2f, bounds.Y + bounds.Height / 2f);
        PointF[] points = new PointF[arms * 2];
        
        for (int i = 0; i < 2 * arms; i++)
        {
            float r = (i & 1) == 0 ? bounds.Width / 2f : bounds.Width / 2f * innerRadiusRatio;
            
            float currX = center.X + (float)Math.Cos(i * angle - offset) * r;
            float currY = center.Y + (float)Math.Sin(i * angle - offset) * r;
        
            points[i] = new PointF(currX, currY);
        }
        
        path.AddPolygon(points);
        return path;
    }
}

class MyHeartShape : ElementShape
{
    public override GraphicsPath CreatePath(Rectangle bounds)
    {
        GraphicsPath path = new GraphicsPath();
        
        path.AddArc(new Rectangle(bounds.X, bounds.Y, bounds.Width / 2, bounds.Height / 2), 150, 210);
        path.AddArc(new Rectangle(bounds.X + bounds.Width / 2, bounds.Y, bounds.Width / 2, bounds.Height / 2), 180, 210);
        path.AddLine(path.GetLastPoint(), new Point(bounds.X + bounds.Width / 2, bounds.Bottom));
        path.CloseFigure();
    
        return path;
    }
    
}
Completed
Last Updated: 25 Jun 2015 13:17 by ADMIN
To reproduce:
- Enable the Trackball.
- Add 2 series to the chart.
- Remove and add back the first one.
- Move the mouse over the chart.

Workaround:
class MyChartTrackballController : ChartTrackballController
{
    protected override string GetPointText(DataPoint point)
    {
        if (point.Presenter != null)
        {
            return base.GetPointText(point);
        }
        else
        {
            CategoricalDataPoint p = point as CategoricalDataPoint;
            if (p!= null)
            {
                return p.Value.ToString();
            }
        }
        return "";
    }
} 
Completed
Last Updated: 25 Jun 2015 12:54 by ADMIN
To reproduce:

public Form1()
{
    InitializeComponent();

    this.radChartView1.ShowPanZoom = true;
    Random rand = new Random();
    this.radChartView1.AreaType = ChartAreaType.Polar;
    for (int i = 0; i < 85; i++)
    {
        RadarLineSeries radarPointSeries = new RadarLineSeries();
        for (int j = 0; j < 8; j++)
        {
            radarPointSeries.DataPoints.Add(new CategoricalDataPoint(rand.Next(1, 100), "X" + j));
        }
        this.radChartView1.Series.Add(radarPointSeries);
    }
}

Workaround: set the ShowPanZoom property after the chart is populated with data.
Completed
Last Updated: 03 Jun 2015 10:01 by ADMIN
To reproduce
- Add step-line series with two data points.

Workaround:
public class CustomCartesianRenderer : CartesianRenderer
{
    public CustomCartesianRenderer(CartesianArea area) : base(area)
    {
    }

    protected override void Initialize()
    {
        base.Initialize();

        for (int i = 0; i < this.DrawParts.Count; i++)
        {
            SteplineDrawPart linePart = this.DrawParts[i] as SteplineDrawPart;
            if (linePart != null)
            {
                this.DrawParts[i] = new CustomDrawPart((SteplineSeries)linePart.Element, this);
            }
        }
    }
}

public class CustomDrawPart : SteplineDrawPart
{
    public CustomDrawPart(LineSeriesBase series, IChartRenderer renderer)
        : base(series, renderer)
    {
    }
    protected override System.Drawing.Drawing2D.GraphicsPath GetLinePaths(PointF[] points)
    {
        //return base.GetLinePaths(points);
        GraphicsPath path = new GraphicsPath();

         if (points.Length > 1)
        {
            if (this.Element is LineSeries && ((LineSeries)this.Element).Spline)
            {
                path.AddCurve(points, ((LineSeries)this.Element).SplineTension);
            }
            else
            {
                bool isVertical = this.Element.View.GetArea<CartesianArea>().Orientation == System.Windows.Forms.Orientation.Vertical;

                for (int i = 1; i < points.Length; i++)
                {
                    PointF x = points[i - 1];
                    PointF y = points[i];

                    if (isVertical)
                    {
                        path.AddLine(x.X, x.Y, y.X, x.Y);
                        path.AddLine(y.X, x.Y, y.X, y.Y);
                    }
                    else
                    {
                        path.AddLine(x.X, x.Y, x.X, y.Y);
                        path.AddLine(x.X, y.Y, y.X, y.Y);
                    }
                }
            }
        }
        else
        {
            return null;
        }

        return path;
    }
}
//change like this
void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
{
    e.Renderer = new CustomCartesianRenderer((CartesianArea)e.Area);
}
 
Completed
Last Updated: 01 Jun 2015 08:19 by ADMIN
public Form1()
{
    InitializeComponent();

    AreaSeries areaSeries = new AreaSeries();
    areaSeries.DataPoints.Add(new CategoricalDataPoint(13, "Jan"));
    areaSeries.DataPoints.Add(new CategoricalDataPoint(20, "Apr"));
    areaSeries.DataPoints.Add(new CategoricalDataPoint(15, "Jul"));
    areaSeries.DataPoints.Add(new CategoricalDataPoint(16, "Oct"));
    this.radChartView1.Series.Add(areaSeries);

    AreaSeries areaSeries2 = new AreaSeries(); 
    areaSeries2.DataPoints.Add(new CategoricalDataPoint(15, "Jan"));
    areaSeries2.DataPoints.Add(new CategoricalDataPoint(25, "Apr"));
    areaSeries2.DataPoints.Add(new CategoricalDataPoint(27, "Jul"));
    areaSeries2.DataPoints.Add(new CategoricalDataPoint(18, "Oct"));
    this.radChartView1.Series.Add(areaSeries2);

    this.radChartView1.ShowTrackBall = true;
    this.radChartView1.Series.First().IsVisible = false;
}

Please refer to the attached sample video.

Workaround 1: remove the series instead of hiding it.

Workaround 2:

private void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
{
     e.Renderer = new CustomCartesianRenderer(e.Area as CartesianArea);
}

public class CustomCartesianRenderer : CartesianRenderer
{
    public CustomCartesianRenderer(CartesianArea area) : base(area)
    {
    }

    private int renderPass = 0;

    public override void Draw(object context)
    {
        if (renderPass < 2)
        {
            if (this.Area.View.Owner.Control.Site == null)
            {
                for (int i = 0; i < this.Area.Series.Count; i++)
                {
                    if (this.Area.Series[i].IsVisible && !this.Area.Series[i].Model.IsArrangeValid)
                    {
                        this.Area.View.Layout();
                        renderPass++;
                        return;
                    }
                }
            }
        }
        FieldInfo fi = typeof(ChartRenderer).GetField("surface", BindingFlags.Instance | BindingFlags.NonPublic);
        if (context != null)
        {
            fi.SetValue(this, context);
        }
        Initialize();

        for (int i = 0; i < this.DrawParts.Count; i++)
        {
            this.DrawParts[i].Draw();
        }
    }
}

Completed
Last Updated: 01 Jun 2015 08:15 by ADMIN
To reproduce:
Enable the smart labels and export the chart using custom size:
 this.radChartView1.ExportToImage(@"C:\df.png", new Size(1100,1100), System.Drawing.Imaging.ImageFormat.Png);

Workaround:
class MyPieRenderer : PieRenderer
{
    
    public MyPieRenderer(PieArea area) : base(area)
    {
    }

    protected override void Initialize()
    {
        base.Initialize();

        var area = this.View;

        SmartLabelsController smartController = null;
        for (int i = 0; i < area.View.Controllers.Count; i++)
        {
            smartController = area.View.Controllers[i] as SmartLabelsController;

            if (smartController != null)
            {
                RadRect viewport = area.View.Viewport;
                viewport.X -= area.View.Margin.Left;
                viewport.Y -= area.View.Margin.Top;
                viewport.Width += area.View.Margin.Horizontal;
                viewport.Height += area.View.Margin.Vertical;

                Rectangle plotArea = new Rectangle((int)viewport.X, (int)viewport.Y, (int)viewport.Width, (int)viewport.Height);
                smartController.CalculateLabelsPositions(area.View.Series, plotArea);

                break;
            }
        }
    }
}
// change like this 
void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
{
    e.Renderer = new MyPieRenderer((PieArea)e.Area);
}
Completed
Last Updated: 22 May 2015 14:35 by ADMIN
To reproduce:
 protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            radChartView1 = new RadChartView();
            radChartView1.Parent = this;

            this.radChartView1.AreaType = ChartAreaType.Pie;
            PieSeries series = new PieSeries();
            series.DataPoints.Add(new PieDataPoint(50, "Germany"));
            series.DataPoints.Add(new PieDataPoint(70, "United States"));
            series.DataPoints.Add(new PieDataPoint(40, "France"));
            series.DataPoints.Add(new PieDataPoint(25, "United Kingdom"));
            series.ShowLabels = true;
            this.radChartView1.Series.Add(series);

            (series.Children[0] as PiePointElement).RadiusAspectRatio = 1.2f;
      }

Workaround:

  protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            radChartView1 = new RadChartView();
            radChartView1.Parent = this;

            this.radChartView1.AreaType = ChartAreaType.Pie;
            PieSeries series = new PieSeries();
            series.DataPoints.Add(new PieDataPoint(50, "Germany"));
            series.DataPoints.Add(new PieDataPoint(70, "United States"));
            series.DataPoints.Add(new PieDataPoint(40, "France"));
            series.DataPoints.Add(new PieDataPoint(25, "United Kingdom"));
            series.ShowLabels = true;
            this.radChartView1.Series.Add(series);

            (series.Children[0] as PiePointElement).RadiusAspectRatio = 1.2f;

            this.radChartView1.CreateRenderer += new ChartViewCreateRendererEventHandler(radChartView1_CreateRenderer);
        }

        void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
        {
            e.Renderer = new CustomPieRenderer(e.Area as PieArea);
        }

        public class CustomPieRenderer : PieRenderer
        {
            public CustomPieRenderer(PieArea area)
                : base(area)
            { }

            protected override void Initialize()
            {
                base.Initialize();

                for (int i = 0; i < this.DrawParts.Count; i++)
                {
                    PieSeriesDrawPart piePart = this.DrawParts[i] as PieSeriesDrawPart;
                    if (piePart != null)
                    {
                        this.DrawParts[i] = new CustomPieSeriesDrawPart((PieSeries)piePart.Element, this);
                    }
                }
            }

        }

        class CustomPieSeriesDrawPart : PieSeriesDrawPart
        {
            public CustomPieSeriesDrawPart(PieSeries series, IChartRenderer renderer)
                : base(series, renderer)
            {

            }

            public override void DrawSeriesParts()
            {
                //base.DrawSeriesParts();

                PieSeriesModel model = this.Element.Model as PieSeriesModel;
                float diameter = CalculateDiameter();

                if (diameter > 0)
                {
                    DrawPieSegments(model, diameter);
                }
            }

            private float CalculateDiameter()
            {
                PieSeriesModel model = this.Element.Model as PieSeriesModel;
                double diameter = Math.Min((float)model.LayoutSlot.Width, (float)model.LayoutSlot.Height) * ((PieSeries)Element).RadiusFactor;

                return (float)diameter;
            }

            private void DrawPieSegments(PieSeriesModel model, float diameter)
            {
                Graphics gr = ((PieRenderer)this.Renderer).Graphics;
                RadGdiGraphics radGraphics = new RadGdiGraphics(gr);

                for (int i = 0; i < model.DataPoints.Count; i++)
                {
                    PiePointElement childElement = (PiePointElement)this.Element.Children[i];
                    PieDataPoint piePoint = (PieDataPoint)childElement.DataPoint;

                    float finalDiameter = diameter * childElement.RadiusAspectRatio;
                    GraphicsPath path = ConstructGraphicsPath(piePoint, model.LayoutSlot, finalDiameter);
                    UpdatePointPaths(piePoint, path);
                    System.Drawing.RectangleF rect = GetPieSectionRect(piePoint, model.LayoutSlot, finalDiameter);

                    childElement.GradientAngle = (float)(piePoint.StartAngle + piePoint.SweepAngle / 2);
                    FillPrimitiveImpl fill = new FillPrimitiveImpl(childElement, null);
                    fill.PaintFill(radGraphics, path, rect);

                    BorderPrimitiveImpl border = new BorderPrimitiveImpl(childElement, null);
                    border.PaintBorder(radGraphics, null, path, rect);
                }
            }

            protected System.Drawing.RectangleF GetPieSectionRect(PieDataPoint point, RadRect modelLayoutSlot, float diameter)
            {
                System.Drawing.RectangleF result;

                float x = (float)(modelLayoutSlot.X + (modelLayoutSlot.Width - diameter) / 2);
                float y = (float)(modelLayoutSlot.Y + (modelLayoutSlot.Height - diameter) / 2);

                result = new System.Drawing.RectangleF(x, y, Math.Max(diameter, 1f), Math.Max(diameter, 1f));

                if (point.OffsetFromCenter > 0)
                {
                    System.Drawing.PointF offset = GetOffset(point.StartAngle + (point.SweepAngle / 2), (diameter / 2) * (point.OffsetFromCenter));
                    result.X += offset.X;
                    result.Y += offset.Y;
                }

                return result;
            }

            private System.Drawing.PointF GetOffset(double angle, double radius)
            {
                double angleInRad = angle * RadMath.DegToRadFactor;

                double x = (Math.Cos(angleInRad) * radius);
                double y = (Math.Sin(angleInRad) * radius);

                return new System.Drawing.PointF((float)x, (float)y);
            }
        }
Completed
Last Updated: 04 May 2015 07:53 by ADMIN
To reproduce: 
Add horizontal bar series bind to the following data:

myList = new BindingList<MyCustomObject>();
myList.Add(new MyCustomObject(1, "Outdoor"));
myList.Add(new MyCustomObject(0, "Hardware"));
myList.Add(new MyCustomObject(0, "Tools"));
myList.Add(new MyCustomObject(1, "Books"));
myList.Add(new MyCustomObject(1, "Appliances"));

Workaround:
LinearAxis verticalAxis = new LinearAxis();
verticalAxis.LabelFitMode = AxisLabelFitMode.Rotate;
verticalAxis.LabelRotationAngle = 0.1;
verticalAxis.Minimum = 0;
verticalAxis.Maximum = 2;
Completed
Last Updated: 21 Mar 2015 08:43 by ADMIN
Steps to reproduce:

1. Add a chart with bar series to a form

2. Set the border of the bars to be larger than 2px

You will see that bars are taller/longer with the border applied than they are without a border.
Completed
Last Updated: 20 Mar 2015 14:41 by ADMIN
Steps to reproduce:
1. Add a pie series to a chart 
2. add three data points with values 19,20 and 61
3. Set the series LabelsOffsetFromCenter property to 0.2d
4. Run the project and start reducing the size of the chart. At some point you will see that the position of the label 20% will be incorrect.

Second scenario:
Add a pie chart and populate it with PieDataPoints, one of which is with value 0:

        Me.RadChartView1.AreaType = ChartAreaType.Pie
        Dim series As New PieSeries()
        series.DataPoints.Add(New PieDataPoint(50, "Germany"))
        series.DataPoints.Add(New PieDataPoint(70, "United States"))
        series.DataPoints.Add(New PieDataPoint(40, "France"))
        series.DataPoints.Add(New PieDataPoint(25, "United Kingdom"))
        series.DataPoints.Add(New PieDataPoint(0, "Italy"))
        series.ShowLabels = True
        Me.RadChartView1.Series.Add(series)
Completed
Last Updated: 20 Mar 2015 14:25 by ADMIN
To reproduce:
BarSeries barSeries = new BarSeries("Performance", "RepresentativeName");
barSeries.Name = "Q1";
barSeries.DataPoints.Add(new CategoricalDataPoint(1000000, "Harley Harley Harley Harley Smith"));
barSeries.DataPoints.Add(new CategoricalDataPoint(2000000, "White"));
barSeries.DataPoints.Add(new CategoricalDataPoint(3000000, "Smith Smith Smith Smith Smith mith Smith Harley"));
barSeries.DataPoints.Add(new CategoricalDataPoint(4000000, "Jones"));
barSeries.DataPoints.Add(new CategoricalDataPoint(5000000, "Marshall"));
this.radChartView1.Series.Add(barSeries);

this.radChartView1.GetArea<CartesianArea>().Orientation = Orientation.Horizontal;

LinearAxis horizontalAxis = radChartView1.Axes.Get<LinearAxis>(1);
horizontalAxis.ClipLabels = false;


Workaround:
void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
{
    e.Renderer = new CustomCartesianRenderer(e.Area as CartesianArea);
}
//
public class CustomCartesianRenderer : CartesianRenderer
{
    public CustomCartesianRenderer(CartesianArea area)
        : base(area)
    { }

    protected override void Initialize()
    {
        base.Initialize();

        for (int i = 0; i < this.DrawParts.Count; i++)
        {
            AxisLabelDrawPart part = this.DrawParts[i] as AxisLabelDrawPart;
            if (part != null)
            {
                this.DrawParts[i] = new CustomDrawPart((Axis)part.Element, this);
            }
        }
    }
}
public class CustomDrawPart : AxisLabelDrawPart
{
    public CustomDrawPart(Axis axis, IChartRenderer renderer) :base( axis,  renderer)
    {}
    protected override void DrawNoneAndMultiLineLabelElements()
    {
        //base.DrawNoneAndMultiLineLabelElements();
        if (!this.Element.ShowLabels || this.Element.Children.Count == 0)
        {
            return;
        }

        Graphics graphics = this.Renderer.Surface as Graphics;
        RadGdiGraphics radGraphics = new RadGdiGraphics(graphics);

        RadRect plotRect = this.Element.Model.LayoutSlot;
        plotRect.X += this.ViewportOffsetX;
        plotRect.Y += this.ViewportOffsetY;

        CartesianAxis axis = this.Element as CartesianAxis;
        SizeF offset = SizeF.Empty;

        if (axis != null)
        {
            offset = ((CartesianRenderer)this.Renderer).GetAxisOffset(axis);

            if (axis.ClipLabels)
            {
                SizeF size = graphics.MeasureString("W", this.Element.Font);

                RectangleF clipRect = ChartRenderer.ToRectangleF(plotRect);
                clipRect.Y -= size.Height / 2f;
                clipRect.Height += size.Height;
                clipRect.X -= size.Width;
                clipRect.Width += size.Width * 2f;
                clipRect.Offset(offset.ToPointF());

                graphics.SetClip(clipRect);
            }
        }

        using (SolidBrush brush = new SolidBrush(Color.Empty))
        {
            foreach (UIChartElement element in this.Element.Children)
            {
                AxisLabelElement labelElement = element as AxisLabelElement;

                if (labelElement == null || !labelElement.IsVisible)
                {
                    continue;
                }

                string text = labelElement.Text;

                if (string.IsNullOrEmpty(text))
                {
                    continue;
                }

                labelElement.OnAxisLabelFormatting(new ChartAxisLabelFormattingEventArgs(labelElement));
                RadRect slot = labelElement.GetLayoutSlot();

                if (this.Element is CartesianAxis)
                {
                    slot.X += this.ViewportOffsetX;
                    slot.Y += this.ViewportOffsetY;
                }

                if (this.Element.AxisType == AxisType.First)
                {
                    slot.X += (float)((IChartView)this.Element.View).PlotOriginX;
                }
                else
                {
                    slot.Y += (float)((IChartView)this.Element.View).PlotOriginY;
                }

                RectangleF rect = ChartRenderer.ToRectangleF(slot);

                if (axis != null)
                {
                    rect.Offset(offset.ToPointF());
                }

                if (labelElement.BackgroundShape != null)
                {
                    labelElement.BackgroundShape.Paint((Graphics)radGraphics.UnderlayGraphics, rect);
                }

                FillPrimitiveImpl fill = new FillPrimitiveImpl(labelElement, null);
                fill.PaintFill(radGraphics, 0, Size.Empty, rect);

                BorderPrimitiveImpl border = new BorderPrimitiveImpl(labelElement, null);
                border.PaintBorder(radGraphics, 0, Size.Empty, rect);

                if (brush.Color != labelElement.ForeColor)
                {
                    brush.Color = labelElement.ForeColor;
                }

                StringFormat sf = StringFormat.GenericTypographic;
                sf.Alignment = StringAlignment.Near;

                graphics.DrawString(text, labelElement.Font, Brushes.Black, rect.Location, sf);
            }
        }
    }
}
Completed
Last Updated: 17 Mar 2015 16:27 by ADMIN
Workaround:

public class CustomLassoZoomController : LassoZoomController
{
    protected override ActionResult OnMouseUp(MouseEventArgs e)
    {
        if (this.MouseDownLocation == Point.Empty || this.MouseMoveLocation == Point.Empty)
        {
            return Controller.Empty;
        }

        return base.OnMouseUp(e);
    }
}

public Form1()
{
    InitializeComponent();

    BarSeries barSeries = new BarSeries("Performance", "RepresentativeName");
    barSeries.Name = "Q1";
    barSeries.DataPoints.Add(new CategoricalDataPoint(177, "Harley"));
    barSeries.DataPoints.Add(new CategoricalDataPoint(128, "White"));
    barSeries.DataPoints.Add(new CategoricalDataPoint(143, "Smith"));
    barSeries.DataPoints.Add(new CategoricalDataPoint(111, "Jones"));
    barSeries.DataPoints.Add(new CategoricalDataPoint(118, "Marshall")); 
    this.radChartView1.Series.Add(barSeries);

    BarSeries barSeries2 = new BarSeries("Performance", "RepresentativeName");
    barSeries2.Name = "Q2";
    barSeries2.DataPoints.Add(new CategoricalDataPoint(153, "Harley"));
    barSeries2.DataPoints.Add(new CategoricalDataPoint(141, "White"));
    barSeries2.DataPoints.Add(new CategoricalDataPoint(130, "Smith"));
    barSeries2.DataPoints.Add(new CategoricalDataPoint(88, "Jones"));
    barSeries2.DataPoints.Add(new CategoricalDataPoint(109, "Marshall"));
    this.radChartView1.Series.Add(barSeries2);

    CustomLassoZoomController lassoZoomController = new CustomLassoZoomController();
    radChartView1.Controllers.Add(lassoZoomController);
}
Completed
Last Updated: 17 Mar 2015 16:09 by ADMIN
If one adds a RadChartView to a form and set its Visibility property to false or creates a chart in memory and tries to export it to an image the result would not look as expected.
Completed
Last Updated: 09 Mar 2015 10:54 by ADMIN
To reproduce:
- Add 3 series to an array and add them to the chart.
- Clear the chart series and add them back.
- All labels are removed from the chart.

Workaround:
- Create new series.
Completed
Last Updated: 12 Feb 2015 13:36 by ADMIN
Steps to reproduce:
1. Add chart to a form.
2. Add two bar series with CombineMode set to Stack100
3. Add two data points to the series with values 0.0 and identical category
4. Run the project an you will see an exception.
Completed
Last Updated: 10 Feb 2015 13:25 by ADMIN
The lasso controller does not zoom properly the vertical axis - the interval is not correct. 

Workaround: 
public class Lasso : LassoZoomController
{
    protected override ActionResult OnMouseUp(MouseEventArgs e)
    {
        if (e.Button != MouseButtons.Left)
        {
            return base.OnMouseUp(e);
        }

        if (MouseDownLocation != MouseMoveLocation)
        {
            Point point = (Point)typeof(LassoZoomController).GetMethod("ClipLocation", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(this, new object[] { e.Location });
            this.MouseMoveLocation = point;
            SizeF areaSize = SizeF.Empty;
            CartesianArea area = this.Area.View.GetArea<CartesianArea>();

            if (area != null)
            {
                IChartView chartView = this.Area.View;
                var temp = area.GetType().GetMethod("GetCartesianClipRect", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(area, null);
                areaSize = ((RectangleF)temp).Size;
                double delta = this.Area.View.Viewport.Width - areaSize.Width + this.Area.View.Viewport.X;
                double start = ((this.MouseDownLocation.X - chartView.PlotOriginX - delta) / areaSize.Width / chartView.ZoomWidth) * 100;
                double end = (MouseMoveLocation.X - chartView.PlotOriginX - delta) / areaSize.Width / chartView.ZoomWidth * 100;
                double zoomFactor = 100d / Math.Abs(start - end);

                double deltaHeight = this.Area.View.Viewport.Height - areaSize.Height + this.Area.View.Viewport.Y;
                double startH = ((this.MouseDownLocation.Y - chartView.PlotOriginY - deltaHeight) / areaSize.Height / chartView.ZoomHeight) * 100;
                double endH = (MouseMoveLocation.Y - chartView.PlotOriginY - deltaHeight) / areaSize.Height / chartView.ZoomHeight * 100;
                double zoomFactorH = 100d / Math.Abs(startH - end);

                if (zoomFactor < 1d)
                {
                    zoomFactor = 1d;
                }

                if (zoomFactor > 100d)
                {
                    zoomFactor = 100d;
                }

                if (zoomFactorH < 1d)
                {
                    zoomFactorH = 1d;
                }

                if (zoomFactorH > 100d)
                {
                    zoomFactorH = 100d;
                }

                double pan = (((areaSize.Width - 1) * zoomFactor) / 100) * Math.Min(start, end);
                double panH = (((areaSize.Height - 1) * zoomFactorH) / 100) * Math.Min(startH, endH);

                this.Area.View.Zoom(zoomFactor, zoomFactorH);
                this.Area.View.Pan(-pan, -panH);
            }
        }

        ViewResult result = typeof(LassoZoomController).GetField("result", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this) as ViewResult;
        result.ShouldInvalidate = true;


        return new ViewResult() { ShouldInvalidate = true };
    }
}
Completed
Last Updated: 09 Feb 2015 07:29 by ADMIN
To reproduce:

BarSeries barSeries = new BarSeries("Performance", "RepresentativeName");
barSeries.Name = "Q1";
barSeries.DataPoints.Add(new CategoricalDataPoint(177, "Harley"));
barSeries.DataPoints.Add(new CategoricalDataPoint(128, "White"));
barSeries.DataPoints.Add(new CategoricalDataPoint(143, "Smith"));
barSeries.DataPoints.Add(new CategoricalDataPoint(111, "Jones"));
barSeries.DataPoints.Add(new CategoricalDataPoint(118, "Marshall"));
this.radChartView1.Series.Add(barSeries);
this.radChartView1.GetArea<CartesianArea>().Orientation = Orientation.Horizontal;