Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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;
                }
            }
        }