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; } }
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); }