private void UpdateLabels(RadSize availableSize) { RadRect availableRect = new RadRect(availableSize.Width, availableSize.Height); RadRect ellipseRect = RadRect.ToSquare(availableRect, false); ellipseRect = RadRect.CenterRect(ellipseRect, availableRect); double radius = ellipseRect.Width / 2; RadPoint center = ellipseRect.Center; RadPoint arcPosition; foreach (AxisLabelModel label in this.owner.labels) { if (!label.isVisible) { continue; } double angle = this.owner.IsInverse ? 360 - (double)label.normalizedPosition * 360 : (double)label.normalizedPosition * 360; arcPosition = RadMath.GetArcPoint(angle, center, radius); this.UpdateMargins(ellipseRect, label.desiredSize, arcPosition); } double offset = this.owner.LineThickness + this.owner.MajorTickLength; this.margins.Left += offset; this.margins.Top += offset; this.margins.Right += offset; this.margins.Bottom += offset; }
protected override RadRect ArrangeAxes(RadRect rect) { IRadialAxis angleAxis = this.primarySecondAxis as IRadialAxis; if (angleAxis == null) { throw new InvalidOperationException("AngleAxis of a polar chart area must be radial."); } RadRect ellipseRect = RadRect.ToSquare(rect, false); ellipseRect = RadRect.CenterRect(ellipseRect, rect); RadSize ellipseSize = new RadSize(ellipseRect.Width, ellipseRect.Height); RadRect remaining = ellipseRect; // Measure the second (radial) axis first; it will inflate the plot area this.primarySecondAxis.Measure(ellipseSize); this.primarySecondAxis.Arrange(ellipseRect); RadThickness margins = this.primarySecondAxis.desiredMargin; remaining.X += margins.Left; remaining.Y += margins.Top; remaining.Width -= margins.Left + margins.Right; remaining.Height -= margins.Top + margins.Bottom; remaining = RadRect.ToSquare(remaining, false); remaining = RadRect.CenterRect(remaining, ellipseRect); this.primaryFirstAxis.Measure(ellipseSize); this.primaryFirstAxis.Arrange(remaining); return(remaining); }