Пример #1
0
        private void InitializeRadarChart()
        {
            this.radChartView3.AreaType = ChartAreaType.Polar;
            this.radChartView3.Axes.Add(new PolarAxis());

            PolarArea area      = this.radChartView3.Area as PolarArea;
            PolarAxis polarAxis = area.Axes.Get <PolarAxis>()[0];

            polarAxis.Minimum    = 0d;
            polarAxis.Maximum    = 5d;
            polarAxis.TickLength = 5;
            area.ShowGrid        = true;
            PolarGrid grid = (PolarGrid)area.Grid;

            grid.DrawPolarFills  = false;
            grid.DrawRadialFills = false;
            grid.BackColor       = Color.LightGray;
            grid.BackColor2      = Color.LightGray;

            int valuesPerSeries                 = 8;
            List <RadarSeries> radarSeries      = new List <RadarSeries>();
            RadarLineSeries    radarLineSeries1 = new RadarLineSeries();

            radarLineSeries1.PolarAxis = polarAxis;

            RadarLineSeries radarLineSeries2 = new RadarLineSeries();

            radarLineSeries2.PolarAxis = polarAxis;

            RadarAreaSeries radarAreaSeries1 = new RadarAreaSeries();

            radarAreaSeries1.PolarAxis = polarAxis;

            radarSeries.Add(radarLineSeries1);
            radarSeries.Add(radarLineSeries2);
            radarSeries.Add(radarAreaSeries1);

            for (int i = 0; i < radarSeriesValues.Length; i++)
            {
                int seriesNumber = i / valuesPerSeries;
                radarSeries[seriesNumber].DataPoints.Add(new CategoricalDataPoint(radarSeriesValues[i]));
            }

            radarLineSeries1.PointSize = new SizeF(1f, 1f);
            radarLineSeries2.PointSize = new SizeF(1f, 1f);
            radarAreaSeries1.PointSize = new SizeF(1f, 1f);

            this.radChartView3.Series.Add(radarAreaSeries1);
            this.radChartView3.Series.Add(radarLineSeries2);
            this.radChartView3.Series.Add(radarLineSeries1);

            this.radChartView3.View.Margin = new Padding(20);
        }
Пример #2
0
        /// <summary>
        /// Arranges the elements in a panel
        /// </summary>
        /// <param name="finalSize">final size of the panel.</param>
        /// <returns>returns Size</returns>
        public Size Arrange(Size finalSize)
        {
            Rect clientRect = new Rect(0, 0, finalSize.Width, finalSize.Height);

            if (PolarAxis != null)
            {
                PolarAxis.ArrangeRect = clientRect;
                PolarAxis.Measure(new Size(clientRect.Width, clientRect.Height));
                PolarAxis.Arrange(clientRect);
                Canvas.SetLeft(PolarAxis, clientRect.Left);
                Canvas.SetTop(PolarAxis, clientRect.Top);
            }

            ChartAxis yAxis = this.CartesianAxis;

            if (yAxis != null)
            {
                Point center = ChartLayoutUtils.GetCenter(clientRect);
                CalculateCartesianArrangeRect(center, yAxis);

                Rect rect = new Rect(this.CartesianAxis.ArrangeRect.Left,
                                     this.CartesianAxis.ArrangeRect.Top,
                                     this.CartesianAxis.ComputedDesiredSize.Width,
                                     this.CartesianAxis.ComputedDesiredSize.Height);
                if (CartesianAxis.PolarAngle != ChartPolarAngle.Rotate90 &&
                    (!yAxis.OpposedPosition ||
                     CartesianAxis.PolarAngle == ChartPolarAngle.Rotate180))
                {
                    CartesianAxis.Measure(new Size(rect.Width, rect.Height));
                }
                else
                {
                    CartesianAxis.Measure(new Size(rect.Left, rect.Height));
                }
                CartesianAxis.Arrange(rect);
                Canvas.SetLeft(CartesianAxis, CartesianAxis.ArrangeRect.Left);
                Canvas.SetTop(CartesianAxis, CartesianAxis.ArrangeRect.Top);
                if (CartesianAxis.PolarAngle == ChartPolarAngle.Rotate90 ||
                    CartesianAxis.PolarAngle == ChartPolarAngle.Rotate180)
                {
                    Area.InternalSecondaryAxis.IsInversed = !Area.InternalSecondaryAxis.IsInversed;
                }
            }

            return(finalSize);
        }
Пример #3
0
        /// <summary>
        /// Measures the elements in the panel
        /// </summary>
        /// <param name="availableSize">Available Size of the panel</param>
        /// <returns></returns>
        public Size Measure(Size availableSize)
        {
            isRadiusCalculating = true;
            if (PolarAxis != null)
            {
                PolarAxis.ComputeDesiredSize(availableSize);
                if (PolarAxis.EnableScrollBar)
                {
                    PolarAxis.DisableScrollbar = true;
                    PolarAxis.EnableScrollBar  = !PolarAxis.DisableScrollbar;
                }
            }
            if (CartesianAxis != null)
            {
                if (CartesianAxis.EnableScrollBar)
                {
                    CartesianAxis.DisableScrollbar = true;
                    CartesianAxis.EnableScrollBar  = !CartesianAxis.DisableScrollbar;
                }

                CalculateSeriesRect(availableSize);

                //Based on StartAngle cartesian axis has been measured
                if (CartesianAxis.PolarAngle == ChartPolarAngle.Rotate0 ||
                    CartesianAxis.PolarAngle == ChartPolarAngle.Rotate180)
                {
                    CartesianAxis.ComputeDesiredSize(new Size
                                                         ((Math.Min(Area.SeriesClipRect.Width, Area.SeriesClipRect.Height) / 2),
                                                         Area.SeriesClipRect.Height));
                }
                else
                {
                    CartesianAxis.ComputeDesiredSize(new Size(Area.SeriesClipRect.Width,
                                                              Math.Min(Area.SeriesClipRect.Width, Area.SeriesClipRect.Height) / 2));
                }
            }

            isRadiusCalculating = false;
            desiredSize         = availableSize;
            return(availableSize);
        }
Пример #4
0
 public ReferenceRatio(int pixel, float polar, PolarAxis axis)
 {
     this.pixel = pixel;
     this.polar = polar;
     this.axis  = axis;
 }
Пример #5
0
        private async Task <List <ReferenceRatio> > ocrImage(byte[] bytes)
        {
            // Analyze image to recognize text
            VisionServiceClient client  = new VisionServiceClient(VISION_API_KEY, VISION_API_ENDPOINT);
            OcrResults          results = null;

            try
            {
                results = await client.RecognizeTextAsync(new MemoryStream(bytes), LANGUAGE, false /* detectRotation */);
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Error analyzing image: {ex.Message}");
                return(null); // Abort
            }

            // Print recognized text to the console
            Debug.WriteLine($"Got {results.Regions?.Count()} results");
            List <ReferenceRatio> references = new List <ReferenceRatio>();

            foreach (var region in results.Regions)
            {
                // Flatten lines of words into a list of words
                List <Word> words = region.Lines.ToList().SelectMany(line => line.Words).ToList();
                Debug.WriteLine($"Words: {words.Select(word => word.Text).Aggregate((word1, word2) => word1 + " " + word2)}");

                // Look for latitude or longitude reference text
                for (int i = 0; i < words.Count; ++i)
                {
                    if (words[i].Text.ToLower() == "latitude" || words[i].Text.ToLower() == "longitude")
                    {
                        // Parse axis
                        PolarAxis axis = words[i].Text.ToLower() == "latitude" ? PolarAxis.Latitude : PolarAxis.Longitude;

                        // Parse pixel value
                        int pixel;
                        try
                        {
                            pixel = int.Parse(words[i + 1].Text);
                        }
                        catch
                        {
                            Debug.WriteLine($"Failed to parse pixel value: {words[i + 1].Text}");
                            continue;
                        }

                        // Parse polar value
                        float polar;
                        try
                        {
                            polar = float.Parse(words[i + 2].Text);
                        }
                        catch
                        {
                            Debug.WriteLine($"Failed to parse polar value: {words[i + 2].Text}");
                            continue;
                        }

                        // Create reference ratio from detected values
                        var reference = new ReferenceRatio(pixel, polar, axis);
                        Debug.WriteLine($"Created reference: {reference}");
                        references.Add(reference);
                    }
                }
            }

            return(references);
        }