public InterfaceControlViewModel(ProblemViewModel problemViewModel, CameraViewModel cameraViewModel)
        {
            _problemViewModel = problemViewModel;
            _cameraViewModel  = cameraViewModel;

            ElementManagementViewModel  = new ElementManagementViewModel(_problemViewModel);
            ForceManagementViewModel    = new ForceManagementViewModel(_problemViewModel);
            NodeManagementViewModel     = new NodeManagementViewModel(_problemViewModel);
            MaterialManagementViewModel = new MaterialManagementViewModel(_problemViewModel);

            KeyboardCameraControlViewModel = new KeyboardCameraControlViewModel(_cameraViewModel);
            MouseCameraControlViewModel    = new MouseCameraControlViewModel(_cameraViewModel);

            problemViewModel.PropertyChanged += ProblemViewModel_PropertyChanged;

            Application.Current.Dispatcher.InvokeAsync(UpdateCamera);
        }
        public void UpdateCamera_NoPressedKeys_ExpectNoMovementOrRotation()
        {
            //Arrange
            var cameraViewModel = new FakeCameraViewModel();

            var testSubject = new KeyboardCameraControlViewModel(cameraViewModel);

            //Act
            testSubject.UpdateCamera();

            //Assert
            Assert.That(cameraViewModel.LookAtPoint, Is.EqualTo(new Point3D()));
            Assert.That(cameraViewModel.MovePoint, Is.EqualTo(new Point3D()));
            Assert.That(cameraViewModel.MoveVector, Is.EqualTo(new Vector3D()));
            Assert.That(cameraViewModel.RotationX, Is.EqualTo(0));
            Assert.That(cameraViewModel.RotationY, Is.EqualTo(0));
            Assert.That(cameraViewModel.RotationZ, Is.EqualTo(0));
        }
        public void UpdateCamera_RotationKeyPressedAndSpecialKeyPressed_ExpectNoMovementAndRotation(Key pressedKey)
        {
            //Arrange
            var cameraViewModel = new FakeCameraViewModel();

            var testSubject = new KeyboardCameraControlViewModel(cameraViewModel);

            testSubject.ReactToKeyboardKeyDown(pressedKey);
            testSubject.ReactToKeyboardKeyDown(Key.LeftShift);

            //Act
            testSubject.UpdateCamera();

            //Assert
            Assert.That(cameraViewModel.LookAtPoint, Is.EqualTo(new Point3D()));
            Assert.That(cameraViewModel.MovePoint, Is.EqualTo(new Point3D()));
            Assert.That(cameraViewModel.MoveVector, Is.EqualTo(new Vector3D()));
            Assert.That(cameraViewModel.Rotation, Is.Not.EqualTo(0));
        }