/SolarSystem.Wpf/MainWindow.xaml.cs
C# | 107 lines | 90 code | 17 blank | 0 comment | 3 complexity | 225f2f7e3ce161db0749f77383527a45 MD5 | raw file
Possible License(s): BSD-3-Clause
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using System.Windows;
- using SharpGL;
- using SharpGL.SceneGraph;
- using MathNet.Numerics.LinearAlgebra.Generic;
- using System.Threading;
- using System.Windows.Input;
- using System.Windows.Media.Media3D;
- using MathNet.Numerics.LinearAlgebra.Double;
- using SharpGL.SceneGraph.Assets;
- using System.IO;
-
- namespace SolarSystem.Wpf
- {
- public partial class MainWindow : Window
- {
- private Normalizer normalizer;
- private System system;
- private SystemController systemController;
- private OrbitsController orbitController;
- private CameraController cameraController;
- private Timer systemTickTimer;
- private Timer recordPositionTimer;
-
- public MainWindow()
- {
- InitializeComponent();
-
- normalizer = new Normalizer(1d / 6371d, 100d / 149598261d);
-
- var sun = SolarSystemBodyFactory.CreateSun();
- sun.Radius = 20d / normalizer.RadiusRatio;
-
- var bodies = new[] {
- sun,
- SolarSystemBodyFactory.CreateBody("Mercury", 2439d, 3.3022 * Math.Pow(10, 23), 57909100d, 0.205630d, 0.003026d),
- SolarSystemBodyFactory.CreateBody("Venus", 6051d, 4.8685 * Math.Pow(10, 24), 108208000d, 0.006756d, 0.00181d),
- SolarSystemBodyFactory.CreateBody("Earth", 6371d, 5.9736 * Math.Pow(10, 24), 149598261d, 0.01671123d, 0.4651d),
- SolarSystemBodyFactory.CreateBody("Mars", 3396d, 6.4185 * Math.Pow(10, 23), 227939100d, 0.093315d, 0.24117d),
- SolarSystemBodyFactory.CreateBody("Jupiter", 69911d, 1.8986 * Math.Pow(10, 27), 816520800d, 0.048775d, 12.6d),
- SolarSystemBodyFactory.CreateBody("Saturn", 60268d, 5.6846 * Math.Pow(10, 26), 1513325783d, 0.055723219d, 9.87d),
- SolarSystemBodyFactory.CreateBody("Uranus", 25559d, 8.6810 * Math.Pow(10, 25), 3004419704d, 0.044405586d, 2.59d),
- SolarSystemBodyFactory.CreateBody("Neptune", 24764d, 1.0243 * Math.Pow(10, 26), 4553946490d, 0.011214269d, 2.68d)
- };
-
- system = new System(bodies);
-
- systemController = new SystemController(system, normalizer);
- orbitController = new OrbitsController(system, normalizer);
- cameraController = new CameraController(system, normalizer, Height, Width);
-
- systemTickTimer = new Timer((s) => system.DoTicks(30000), null, 0, 25);
- recordPositionTimer = new Timer((s) => RecordPositionsTimer_Elapsed(), null, 0, 500);
- }
-
- private void RecordPositionsTimer_Elapsed()
- {
- if (orbitController.AllOrbitsComplete)
- recordPositionTimer.Dispose();
-
- orbitController.RecordPositions();
- }
-
- private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args)
- {
- OpenGL gl = openGLControl.OpenGL;
- gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
- gl.LoadIdentity();
-
- orbitController.Render(gl);
- systemController.Render(gl);
- cameraController.Render(gl);
- }
-
- private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
- {
- OpenGL gl = openGLControl.OpenGL;
- gl.Enable(OpenGL.GL_TEXTURE_2D);
- gl.ClearColor(0f, 0f, 0f, 0f);
- systemController.LoadBodyTextures(gl);
- }
-
- private void openGLControl_Resized(object sender, OpenGLEventArgs args)
- {
- cameraController.Render(openGLControl.OpenGL);
- }
-
- private void mainWindow_KeyDown(Object sender, KeyEventArgs e)
- {
- cameraController.KeyPress(e.Key);
- }
-
- private void mainWindow_MouseMove(Object sender, MouseEventArgs e)
- {
- var mousePosition = e.GetPosition(this);
- cameraController.MouseMove(mousePosition);
- }
-
- private void mainWindow_MouseDown(Object sender, MouseButtonEventArgs e)
- {
- if (e.RightButton == MouseButtonState.Pressed)
- cameraController.RightMouseButtonPressed();
- }
- }
- }