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);
            }
        }
        public void GrabNearestPoint(bool allowMultigrab, double limit = 1.0)
        {
            var selectables = GetSceneSelectables();

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

            foreach (var t in selectables)
            {
                if (t.IsGrabbed && allowMultigrab)
                {
                    continue;
                }
                var candidateDistance =
                    (t.Position - _scene.Manipulator.Position).Length;
                if (candidateDistance >= closestDistance)
                {
                    continue;
                }
                closestSelectable = t;
                closestDistance   = candidateDistance;
            }

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

            if (allowMultigrab)
            {
                _scene.ToggleObjectGrab(closestSelectable);
            }
            else
            {
                _scene.SetObjectGrab(closestSelectable);
            }
        }