Пример #1
0
        private int GetIndexOfHoveredDragHandle()
        {
            Vector2 devicePos;

            if (!InputDevice.Instance.GetPosition(out devicePos))
            {
                return(-1);
            }

            List <BoxFace> allBoxFaces = BoxFaces.GetAll();

            foreach (BoxFace face in allBoxFaces)
            {
                DragHandle dragHandle = _dragHandles[(int)face];

                if (!_axesVisibilityMask[(int)dragHandle.Axis])
                {
                    continue;
                }
                if (dragHandle.ScreenRect.Contains(devicePos, true))
                {
                    return((int)face);
                }
            }

            return(-1);
        }
Пример #2
0
        private void UpdateDragHandles()
        {
            if (_targetOOBB == null)
            {
                return;
            }
            float halfHandleScreenSize = _dragHandleSizeInPixels * 0.5f;

            Camera         camera          = EditorCamera.Instance.Camera;
            Plane          cameraNearPlane = camera.GetNearPlane();
            List <BoxFace> allBoxFaces     = BoxFaces.GetAll();

            foreach (BoxFace face in allBoxFaces)
            {
                Vector3 boxFaceCenter    = _targetOOBB.GetBoxFaceCenter(face);
                Vector2 screenFaceCenter = camera.WorldToScreenPoint(boxFaceCenter);
                _dragHandles[(int)face].ScreenRect = new Rect(screenFaceCenter.x - halfHandleScreenSize, screenFaceCenter.y - halfHandleScreenSize, _dragHandleSizeInPixels, _dragHandleSizeInPixels);

                _dragHandles[(int)face].IsVisible = true;
                if (cameraNearPlane.GetDistanceToPoint(boxFaceCenter) < 0.0f)
                {
                    _dragHandles[(int)face].IsVisible = false;
                }
            }
        }