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); }
/// <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); }
/// <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); }
public ReferenceRatio(int pixel, float polar, PolarAxis axis) { this.pixel = pixel; this.polar = polar; this.axis = axis; }
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); }