private void CreateAxisYElements4PolarChart(Double height, Double minAngleInDegree, Point point, Double angle, Double index, Point center) { AxisElementsContainer = new StackPanel() { Background = InternalBackground }; AxisElementsContainer.Orientation = Orientation.Horizontal; ApplyAxisProperties4CircularChart(); CreateAxisLine(0, height, (Double)LineThickness / 2, (Double)LineThickness / 2, (Double)LineThickness, height); RotateTransform transform = new RotateTransform(); Double rotationAngleIndegree = Visifire.Commons.CircularLabel.ResetMeanAngle(CalculateAngleByCoordinate(point, center)) * 180 / Math.PI; transform.Angle = rotationAngleIndegree + 90; Double axisLabelsWidth = 0; if (Math.Round(minAngleInDegree) == Math.Round(rotationAngleIndegree)) { AxisLabels.CreateVisualObject(); if (AxisLabels.Visual != null) { AxisElementsContainer.Children.Add(AxisLabels.Visual); if (!Double.IsNaN(AxisLabels.Visual.Width)) { axisLabelsWidth = AxisLabels.Visual.Width; } } } Double ticksWidth = 0; List <Ticks> ticks = Ticks.Reverse().ToList(); foreach (Ticks tick in ticks) { tick.SetParms(PlacementTypes.Left, Double.NaN, height); tick.CreateVisualObject(); if (tick.Visual != null) { AxisElementsContainer.Children.Add(tick.Visual); ticksWidth += tick.Visual.Width; } } if (AxisLine != null) { AxisElementsContainer.Children.Add(AxisLine); } AxisElementsContainer.SetValue(Canvas.LeftProperty, point.X - axisLabelsWidth - ticksWidth); AxisElementsContainer.SetValue(Canvas.TopProperty, point.Y); if (transform != null) { AxisElementsContainer.RenderTransformOrigin = new Point(1, 0); AxisElementsContainer.RenderTransform = transform; } CircularAxisVisual.Children.Add(AxisElementsContainer); }
/// <summary> /// Create AxisY elements for circular chart /// </summary> /// <param name="height"></param> /// <param name="point"></param> /// <param name="minAngle"></param> /// <param name="index"></param> /// <param name="center"></param> /// <param name="isAxisLabelsEnabled"></param> private void CreateAxisYElements4RadarChart(Double height, Point point, Double minAngle, Double index, Point center, Boolean isAxisLabelsEnabled) { AxisElementsContainer = new StackPanel() { Background = InternalBackground }; AxisElementsContainer.Orientation = Orientation.Horizontal; ApplyAxisProperties4CircularChart(); CreateAxisLine(0, height, (Double)LineThickness / 2, (Double)LineThickness / 2, (Double)LineThickness, height); RotateTransform transform = null; if (isAxisLabelsEnabled) { AxisLabels.CreateVisualObject(); if (AxisLabels.Visual != null) { AxisElementsContainer.Children.Add(AxisLabels.Visual); } } else { transform = new RotateTransform(); transform.Angle = minAngle * index; } Double ticksWidth = 0; List <Ticks> ticks = Ticks.Reverse().ToList(); foreach (Ticks tick in ticks) { tick.SetParms(PlacementTypes.Left, Double.NaN, height); tick.CreateVisualObject(); if (tick.Visual != null) { AxisElementsContainer.Children.Add(tick.Visual); ticksWidth += tick.Visual.Width; } } if (AxisLine != null) { AxisElementsContainer.Children.Add(AxisLine); } Double axisLabelsWidth = 0; if (isAxisLabelsEnabled) { if (AxisLabels.Visual != null) { if (!Double.IsNaN(AxisLabels.Visual.Width)) { axisLabelsWidth = AxisLabels.Visual.Width; } } } AxisElementsContainer.SetValue(Canvas.LeftProperty, point.X - axisLabelsWidth - ticksWidth); AxisElementsContainer.SetValue(Canvas.TopProperty, point.Y); if (!isAxisLabelsEnabled) { if (transform != null) { AxisElementsContainer.RenderTransformOrigin = new Point(0.75, 0); AxisElementsContainer.RenderTransform = transform; } } CircularAxisVisual.Children.Add(AxisElementsContainer); }
/// <summary> /// Applies axis settings for circular type axis /// </summary> private void ApplyAxisSettings4CircularChart() { if (AxisOrientation == AxisOrientation.Circular) { CircularPath = new Path(); // Set the parameters for the axis labels AxisLabels.Placement = PlacementTypes.Circular; AxisLabels.Width = Width; AxisLabels.Height = Height; // Generate the visual object for the required elements AxisLabels.CreateVisualObject(); if (AxisLabels.Visual != null) { CircularAxisVisual.Children.Add(AxisLabels.Visual); } ApplyCircularPathProperties(); if (CircularPlotDetails.ListOfPoints4CircularAxis.Count > 0) { CircularPath.Data = GetPathGeometry(CircularPlotDetails.ListOfPoints4CircularAxis); } CircularAxisVisual.Children.Add(CircularPath); } else { if (CircularPlotDetails.ListOfPoints4CircularAxis.Count == 0) { return; } Double height = Math.Max(CircularPlotDetails.Radius, 0); // Set the parameters for the axis labels AxisLabels.Placement = PlacementTypes.Left; AxisLabels.Height = height; for (Int32 i = 0; i < CircularPlotDetails.ListOfPoints4CircularAxis.Count; i++) { if (CircularPlotDetails.CircularChartType == RenderAs.Radar) { if (i == 0) { CreateAxisYElements4RadarChart(height, CircularPlotDetails.ListOfPoints4CircularAxis[i], CircularPlotDetails.MinAngleInDegree, i, CircularPlotDetails.Center, true); } else { CreateAxisYElements4RadarChart(height, CircularPlotDetails.ListOfPoints4CircularAxis[i], CircularPlotDetails.MinAngleInDegree, i, CircularPlotDetails.Center, false); } } else { Double newMinAngle = 0; if (CircularPlotDetails.MinAngleInDegree > 360) { Double tempMinAngle = 0; Int32 indexCount = Convert.ToInt32(Math.Floor(CircularPlotDetails.MinAngleInDegree / 360)); for (Int32 index = 1; index <= indexCount; index++) { tempMinAngle = Math.Max(tempMinAngle, index * 360); } newMinAngle = CircularPlotDetails.MinAngleInDegree - tempMinAngle; } else { newMinAngle = CircularPlotDetails.MinAngleInDegree; } CreateAxisYElements4PolarChart(height, newMinAngle, CircularPlotDetails.ListOfPoints4CircularAxis[i], CircularPlotDetails.AnglesInRadian[i], i, CircularPlotDetails.Center); } } CleanUpGrids(); foreach (ChartGrid grid in Grids) { grid.IsNotificationEnable = false; grid.Chart = Chart; grid.ApplyStyleFromTheme(Chart, "Grid"); if (grid.Visual == null) { grid.CreateVisualObject(Width, height, (Chart as Chart)._internalAnimationEnabled, ChartArea.GRID_ANIMATION_DURATION); if (grid.Visual != null) { CircularAxisVisual.Children.Add(grid.Visual); } } else { grid.CreateVisualObject(Width, height, (Chart as Chart)._internalAnimationEnabled, ChartArea.GRID_ANIMATION_DURATION); } if (grid.Visual != null) { grid.Visual.SetValue(Canvas.ZIndexProperty, (Int32)(-1000)); } grid.IsNotificationEnable = true; } } }