示例#1
0
        public void TranslateSceneWithMouse(Vector mouseMovement)
        {
            ActiveRenderer.Scene.Camera.Move(new Vector3D(mouseMovement.X / 50, 0, -mouseMovement.Y / 50));

            UpdateManipulatorInfo();
            ActiveRenderer.ForceRedraw();
        }
示例#2
0
        public void GrabUsingMouseRect(
            Rect screenSpaceGrabRect,
            bool allowMultigrab
            )
        {
            var selectables = GetSceneSelectables();

            if (selectables.Count == 0)
            {
                return;
            }

            foreach (var selectable in selectables)
            {
                var screenSpacePosition =
                    ActiveRenderer.GetStandardScreenSpacePosition(
                        selectable.WorldPosition
                        );
                if (!screenSpacePosition.HasValue)
                {
                    continue;
                }
                if (screenSpaceGrabRect.Contains(screenSpacePosition.Value))
                {
                    _scene.GrabObject(selectable);
                }
            }
        }
示例#3
0
        public void ScaleWithMouse(int delta)
        {
            ActiveRenderer.Scene.Camera.Zoom += delta * 0.002;

            UpdateManipulatorInfo();
            ActiveRenderer.ForceRedraw();
        }
示例#4
0
        private void LoadScene()
        {
            var result = MessageBox.Show(
                _ownerWindow,
                "Loading a scene will clear this one. Are you sure?",
                "New scene confirmation",
                MessageBoxButton.YesNo,
                MessageBoxImage.Question
                );

            if (result == MessageBoxResult.No)
            {
                return;
            }

            var ofd        = new OpenFileDialog();
            var fileResult = ofd.ShowDialog();

            if (fileResult == false)
            {
                return;
            }

            CreateNewScene();
            _scene.Import(ofd.FileName);
            ActiveRenderer.ForceRedraw();
        }
示例#5
0
        public void RotateSceneWithMouse(Vector mouseMovement)
        {
            var rotation = new Vector3D(-mouseMovement.Y / 50, -mouseMovement.X / 50, 0);

            ActiveRenderer.Scene.Camera.Rotate(rotation);

            UpdateManipulatorInfo();
            ActiveRenderer.ForceRedraw();
        }
示例#6
0
        private void UpdateManipulatorInfo()
        {
            var cursorScreenPos   = ActiveRenderer.GetStandardScreenSpacePosition(_scene.Manipulator.Position);
            var cursorViewPosInfo = cursorScreenPos.HasValue
                ? String.Format("Cursor screen position: ({0:0.##} ; {1:0.##})", cursorScreenPos.Value.X,
                                cursorScreenPos.Value.Y)
                : "Cursor screen position: <Clipped>";

            CursorReadableInfo = String.Format("Cursor world position: ({0:0.##} ; {1:0.##} ; {2:0.##}) {3}",
                                               _scene.Manipulator.Position.X, _scene.Manipulator.Position.Y, _scene.Manipulator.Position.Z,
                                               cursorViewPosInfo);
        }
示例#7
0
        public void MoveManipulator(double dx, double dy, double dz)
        {
            var shift = new Vector3D(dx, dy, dz);

            _scene.Manipulator.Translate(shift);
            foreach (var obj in _scene.GrabbedObjects)
            {
                obj.Translate(shift);
            }

            UpdateManipulatorInfo();
            ActiveRenderer.ForceRedraw();
        }
示例#8
0
        public void GrabUsingMouse(
            Point screenSpaceClick,
            bool allowMultigrab,
            double limit = 0.2
            )
        {
            var selectables = GetSceneSelectables();

            if (selectables.Count == 0)
            {
                return;
            }

            ISceneSelectable closestObject = null;
            var closestDistance            = double.MaxValue;

            foreach (var selectable in selectables)
            {
                var screenSpacePosition = ActiveRenderer
                                          .GetStandardScreenSpacePosition(selectable.WorldPosition);
                if (!screenSpacePosition.HasValue)
                {
                    continue;
                }
                var candidateLength =
                    (screenSpacePosition.Value - screenSpaceClick).Length;
                if (candidateLength >= closestDistance)
                {
                    continue;
                }
                closestObject   = selectable;
                closestDistance = candidateLength;
            }

            if (closestObject == null || closestDistance > limit)
            {
                return;
            }

            if (allowMultigrab)
            {
                _scene.ToggleObjectGrab(closestObject);
            }
            else
            {
                _scene.SetObjectGrab(closestObject);
            }
        }
示例#9
0
 private void SceneCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     ActiveRenderer.ForceRedraw();
 }
示例#10
0
 private void SceneChanged(object sender, PropertyChangedEventArgs e)
 {
     ActiveRenderer.ForceRedraw();
 }