PageRenderTime 40ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/SolarSystem.Wpf/MainWindow.xaml.cs

https://bitbucket.org/efouts/solarsystem
C# | 107 lines | 90 code | 17 blank | 0 comment | 3 complexity | 225f2f7e3ce161db0749f77383527a45 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Windows;
  5. using SharpGL;
  6. using SharpGL.SceneGraph;
  7. using MathNet.Numerics.LinearAlgebra.Generic;
  8. using System.Threading;
  9. using System.Windows.Input;
  10. using System.Windows.Media.Media3D;
  11. using MathNet.Numerics.LinearAlgebra.Double;
  12. using SharpGL.SceneGraph.Assets;
  13. using System.IO;
  14. namespace SolarSystem.Wpf
  15. {
  16. public partial class MainWindow : Window
  17. {
  18. private Normalizer normalizer;
  19. private System system;
  20. private SystemController systemController;
  21. private OrbitsController orbitController;
  22. private CameraController cameraController;
  23. private Timer systemTickTimer;
  24. private Timer recordPositionTimer;
  25. public MainWindow()
  26. {
  27. InitializeComponent();
  28. normalizer = new Normalizer(1d / 6371d, 100d / 149598261d);
  29. var sun = SolarSystemBodyFactory.CreateSun();
  30. sun.Radius = 20d / normalizer.RadiusRatio;
  31. var bodies = new[] {
  32. sun,
  33. SolarSystemBodyFactory.CreateBody("Mercury", 2439d, 3.3022 * Math.Pow(10, 23), 57909100d, 0.205630d, 0.003026d),
  34. SolarSystemBodyFactory.CreateBody("Venus", 6051d, 4.8685 * Math.Pow(10, 24), 108208000d, 0.006756d, 0.00181d),
  35. SolarSystemBodyFactory.CreateBody("Earth", 6371d, 5.9736 * Math.Pow(10, 24), 149598261d, 0.01671123d, 0.4651d),
  36. SolarSystemBodyFactory.CreateBody("Mars", 3396d, 6.4185 * Math.Pow(10, 23), 227939100d, 0.093315d, 0.24117d),
  37. SolarSystemBodyFactory.CreateBody("Jupiter", 69911d, 1.8986 * Math.Pow(10, 27), 816520800d, 0.048775d, 12.6d),
  38. SolarSystemBodyFactory.CreateBody("Saturn", 60268d, 5.6846 * Math.Pow(10, 26), 1513325783d, 0.055723219d, 9.87d),
  39. SolarSystemBodyFactory.CreateBody("Uranus", 25559d, 8.6810 * Math.Pow(10, 25), 3004419704d, 0.044405586d, 2.59d),
  40. SolarSystemBodyFactory.CreateBody("Neptune", 24764d, 1.0243 * Math.Pow(10, 26), 4553946490d, 0.011214269d, 2.68d)
  41. };
  42. system = new System(bodies);
  43. systemController = new SystemController(system, normalizer);
  44. orbitController = new OrbitsController(system, normalizer);
  45. cameraController = new CameraController(system, normalizer, Height, Width);
  46. systemTickTimer = new Timer((s) => system.DoTicks(30000), null, 0, 25);
  47. recordPositionTimer = new Timer((s) => RecordPositionsTimer_Elapsed(), null, 0, 500);
  48. }
  49. private void RecordPositionsTimer_Elapsed()
  50. {
  51. if (orbitController.AllOrbitsComplete)
  52. recordPositionTimer.Dispose();
  53. orbitController.RecordPositions();
  54. }
  55. private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
  56. {
  57. OpenGL gl = openGLControl.OpenGL;
  58. gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
  59. gl.LoadIdentity();
  60. orbitController.Render(gl);
  61. systemController.Render(gl);
  62. cameraController.Render(gl);
  63. }
  64. private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
  65. {
  66. OpenGL gl = openGLControl.OpenGL;
  67. gl.Enable(OpenGL.GL_TEXTURE_2D);
  68. gl.ClearColor(0f, 0f, 0f, 0f);
  69. systemController.LoadBodyTextures(gl);
  70. }
  71. private void openGLControl_Resized(object sender, OpenGLEventArgs args)
  72. {
  73. cameraController.Render(openGLControl.OpenGL);
  74. }
  75. private void mainWindow_KeyDown(Object sender, KeyEventArgs e)
  76. {
  77. cameraController.KeyPress(e.Key);
  78. }
  79. private void mainWindow_MouseMove(Object sender, MouseEventArgs e)
  80. {
  81. var mousePosition = e.GetPosition(this);
  82. cameraController.MouseMove(mousePosition);
  83. }
  84. private void mainWindow_MouseDown(Object sender, MouseButtonEventArgs e)
  85. {
  86. if (e.RightButton == MouseButtonState.Pressed)
  87. cameraController.RightMouseButtonPressed();
  88. }
  89. }
  90. }