예제 #1
0
        public static void DrawLine(Vector3 from, Vector3 to, DrawLineConfig config)
        {
            switch (config)
            {
            case DrawLineConfig.Shown:
                Handles.DrawLine(from, to); break;

            case DrawLineConfig.SymmetricShown:
                Handles.DrawLine(2 * from - to, to); break;

            case DrawLineConfig.ShownDotted:
                Handles.DrawDottedLine(from, to, 3f); break;

            case DrawLineConfig.SymmetricShownDotted:
                Handles.DrawDottedLine(2 * from - to, to, 3f); break;
            }
        }
예제 #2
0
        public static float DistanceDragHandle(float distance, Vector3 position, Vector3 direction, int controlID, GUIContent label, float size = 0.15f, float snap = 0, GUIStyle labelStyle = null, DrawLineConfig lineConfigWhenNear = DrawLineConfig.Shown, DrawLineConfig lineConfigWhenNotNear = DrawLineConfig.ShownDotted)
        {
            var handlePos = position + direction * distance; // TODO: normalize direction?

            switch (Event.current.type)
            {
            case EventType.Repaint:
                if (HandleUtility.nearestControl == controlID)
                {
                    DrawLine(position, handlePos, lineConfigWhenNear);
                }
                else
                {
                    DrawLine(position, handlePos, lineConfigWhenNotNear);
                }

                if (label != null)
                {
                    if (labelStyle == null)
                    {
                        labelStyle = GetDefaultHandleLabelStyle();
                    }
                    if (HandleUtility.nearestControl == controlID)
                    {
                        Handles.Label(handlePos - new Vector3(size, size * 1.25f, 0), label, labelStyle);
                    }
                }
                break;
            }
            var newHandle = Handles.FreeMoveHandle(controlID, handlePos, Quaternion.identity, size, new Vector3(snap, snap, snap), Handles.CubeHandleCap);

            GUI.changed = false;
            if (newHandle != handlePos)
            {
                var newDif = newHandle - position;
                // var oldDif = handlePos - position;
                // newHandle =  * direction + position;
                GUI.changed = true;
                var newDis = Vector3.Dot(newDif, direction); // ?
                return(newDis);
            }
            return(distance);
        }