PageRenderTime 34ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/Main/src/Xbap/DynamicDataDisplay.Xbap.Samples/Demos/v03/Isolines/Isolines.xaml.cs

#
C# | 113 lines | 94 code | 13 blank | 6 comment | 10 complexity | 5ca0f58beef1a28f1d124498505227a8 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.IO;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Documents;
  8. using Microsoft.Research.DynamicDataDisplay.Common.Auxiliary;
  9. using Microsoft.Research.DynamicDataDisplay.DataSources.MultiDimensional;
  10. using System.Reflection;
  11. namespace Microsoft.Research.DynamicDataDisplay.Samples.Demos.v03.Isolines
  12. {
  13. /// <summary>
  14. /// Interaction logic for Isolines.xaml
  15. /// </summary>
  16. public partial class Isolines : Page
  17. {
  18. public Isolines()
  19. {
  20. InitializeComponent();
  21. Loaded += new RoutedEventHandler(Window1_Loaded);
  22. }
  23. private void Window1_Loaded(object sender, RoutedEventArgs e)
  24. {
  25. LoadField();
  26. }
  27. private static string[] ParseDataString(string str)
  28. {
  29. str = str.TrimEnd(' ');
  30. return str.Split(' ');
  31. }
  32. private static string[] ParseGridString(string str)
  33. {
  34. return str.TrimEnd(' ').
  35. Substring(0, str.Length - 3).
  36. TrimStart('{').
  37. Split(new string[] { " } {" }, StringSplitOptions.None);
  38. }
  39. private void LoadField()
  40. {
  41. var assembly = Assembly.GetExecutingAssembly();
  42. List<string> strings = new List<string>();
  43. using (Stream stream = assembly.GetManifestResourceStream("Microsoft.Research.DynamicDataDisplay.Xbap.Samples.Demos.v03.Isolines.SampleData.txt"))
  44. {
  45. using (StreamReader reader = new StreamReader(stream))
  46. {
  47. while (!reader.EndOfStream)
  48. {
  49. string str = reader.ReadLine();
  50. if (str == "Data:")
  51. {
  52. // do nothing
  53. }
  54. else if (str == "Grid:")
  55. {
  56. // do nothing too
  57. }
  58. else
  59. {
  60. strings.Add(str);
  61. }
  62. }
  63. }
  64. }
  65. // data
  66. string[] nums = ParseDataString(strings[0]);
  67. int width = nums.Length;
  68. int height = strings.Count / 2;
  69. CultureInfo culture = new CultureInfo("ru-RU");
  70. double[,] data = new double[width, height];
  71. for (int row = 0; row < height; row++)
  72. {
  73. nums = ParseDataString(strings[row]);
  74. for (int column = 0; column < width; column++)
  75. {
  76. double d = Double.Parse(nums[column], culture);
  77. data[column, row] = d;
  78. }
  79. }
  80. Point[,] gridData = new Point[width, height];
  81. for (int row = 0; row < height; row++)
  82. {
  83. string str = strings[row + height];
  84. nums = ParseGridString(str);
  85. for (int column = 0; column < width; column++)
  86. {
  87. string[] vecStrs = nums[column].Split(new string[] { "; " }, StringSplitOptions.None);
  88. gridData[column, row] = new Point(
  89. Double.Parse(vecStrs[0], culture),
  90. Double.Parse(vecStrs[1], culture));
  91. }
  92. }
  93. WarpedDataSource2D<double> dataSource = new WarpedDataSource2D<double>(data, gridData);
  94. isolineGraph.DataSource = dataSource;
  95. trackingGraph.DataSource = dataSource;
  96. var visible = dataSource.GetGridBounds();
  97. plotter.Viewport.Visible = visible;
  98. }
  99. }
  100. }