UnityEditor.Tools.GetRectAxisForViewDir C# (CSharp) Method

GetRectAxisForViewDir() private static method

private static GetRectAxisForViewDir ( Bounds bounds, Quaternion rotation, Vector3 viewDir ) : int
bounds UnityEngine.Bounds
rotation UnityEngine.Quaternion
viewDir Vector3
return int
        private static int GetRectAxisForViewDir(Bounds bounds, Quaternion rotation, Vector3 viewDir)
        {
            if (s_LockHandleRectAxisActive)
            {
                return s_LockHandleRectAxis;
            }
            if (viewDir == Vector3.zero)
            {
                return 2;
            }
            if (bounds.size == Vector3.zero)
            {
                bounds.size = Vector3.one;
            }
            int num2 = -1;
            float num3 = -1f;
            for (int i = 0; i < 3; i++)
            {
                Vector3 zero = Vector3.zero;
                Vector3 vector2 = Vector3.zero;
                int num5 = (i + 1) % 3;
                int num6 = (i + 2) % 3;
                zero[num5] = bounds.size[num5];
                vector2[num6] = bounds.size[num6];
                float magnitude = Vector3.Cross(Vector3.ProjectOnPlane((Vector3) (rotation * zero), viewDir), Vector3.ProjectOnPlane((Vector3) (rotation * vector2), viewDir)).magnitude;
                if (magnitude > num3)
                {
                    num3 = magnitude;
                    num2 = i;
                }
            }
            return num2;
        }

Usage Example

示例#1
0
        internal static void LockHandleRectRotation()
        {
            Bounds bounds = InternalEditorUtility.CalculateSelectionBoundsInSpace(Tools.handlePosition, Tools.handleRotation, Tools.rectBlueprintMode);

            Tools.s_LockHandleRectAxis       = Tools.GetRectAxisForViewDir(bounds, Tools.handleRotation, SceneView.currentDrawingSceneView.camera.transform.forward);
            Tools.s_LockHandleRectAxisActive = true;
        }