UnityEditor.RectHandles.AngleAroundAxis C# (CSharp) Method

AngleAroundAxis() public static method

public static AngleAroundAxis ( Vector3 dirA, Vector3 dirB, Vector3 axis ) : float
dirA Vector3
dirB Vector3
axis Vector3
return float
        public static float AngleAroundAxis(Vector3 dirA, Vector3 dirB, Vector3 axis)
        {
            dirA = Vector3.ProjectOnPlane(dirA, axis);
            dirB = Vector3.ProjectOnPlane(dirB, axis);
            return (Vector3.Angle(dirA, dirB) * ((Vector3.Dot(axis, Vector3.Cross(dirA, dirB)) >= 0f) ? ((float) 1) : ((float) (-1))));
        }

Usage Example

示例#1
0
        public static float RotationSlider(int id, Vector3 cornerPos, float rotation, Vector3 pivot, Vector3 handleDir, Vector3 outwardsDir1, Vector3 outwardsDir2, float handleSize, Handles.DrawCapFunction drawFunc, Vector2 snap)
        {
            Vector3 b      = outwardsDir1 + outwardsDir2;
            Vector2 vector = HandleUtility.WorldToGUIPoint(cornerPos);
            Vector2 b2     = (HandleUtility.WorldToGUIPoint(cornerPos + b) - vector).normalized * 15f;

            RectHandles.RaycastGUIPointToWorldHit(vector + b2, new Plane(handleDir, cornerPos), out cornerPos);
            Event   current = Event.current;
            Vector3 a       = Handles.Slider2D(id, cornerPos, handleDir, outwardsDir1, outwardsDir2, handleSize, drawFunc, Vector2.zero);

            if (current.type == EventType.MouseMove)
            {
                RectHandles.DetectCursorChange(id);
            }
            if (current.type == EventType.Repaint && ((HandleUtility.nearestControl == id && GUIUtility.hotControl == 0) || GUIUtility.hotControl == id))
            {
                Rect position = new Rect(current.mousePosition.x - 100f, current.mousePosition.y - 100f, 200f, 200f);
                EditorGUIUtility.AddCursorRect(position, MouseCursor.RotateArrow);
            }
            return(rotation - RectHandles.AngleAroundAxis(a - pivot, cornerPos - pivot, handleDir));
        }