/** * Draws selected pin constraints in the scene view. */ public void OnSceneGUI() { if (!editMode || spline.controlPoints.Count < spline.MinPoints) { return; } ResizeCPArrays(); HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); // Sceneview GUI: Handles.BeginGUI(); GUI.skin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Scene); GUILayout.Window(1, new Rect(10, 28, 0, 0), DrawUIWindow, "Curve editor"); Handles.EndGUI(); // During edit mode, allow to add/remove control points. if (addControlPointsMode) { AddControlPointsMode(); } Matrix4x4 prevMatrix = Handles.matrix; Handles.matrix = spline.transform.localToWorldMatrix; DrawControlPoints(spline.controlPoints); // Control point selection handle: if (ObiSplineHandles.SplineCPSelector(spline.controlPoints, selectedStatus)) { Repaint(); } // Draw cp tool handles: SplineCPTools(spline.controlPoints); Handles.matrix = prevMatrix; }
/** * Draws selected pin constraints in the scene view. */ public void OnSceneGUI() { ResizeCPArrays(); if (spline.controlPoints.Count < 4) { return; } // World space control points: Vector3[] controlPoints = new Vector3[spline.controlPoints.Count]; for (int i = 0; i < controlPoints.Length; ++i) { controlPoints[i] = spline.transform.TransformPoint(spline.controlPoints[i]); } if (Event.current.type == EventType.Repaint) { Matrix4x4 prevMatrix = Handles.matrix; Handles.color = Color.white; Handles.matrix = spline.transform.localToWorldMatrix; // Draw tangents: Handles.color = Color.blue; for (int i = 0; i < controlPoints.Length; i += 3) { int prev = Mathf.Max(0, i - 1); int next = Mathf.Min(i + 1, controlPoints.Length - 1); Handles.DrawDottedLine(spline.controlPoints[prev], spline.controlPoints[i], 2); Handles.DrawDottedLine(spline.controlPoints[i], spline.controlPoints[next], 2); } Handles.matrix = prevMatrix; // Draw control points: for (int i = 0; i < controlPoints.Length; ++i) { Handles.color = i % 3 == 0 ? Color.white : Color.blue; if (spline.Closed && (i == 0 || i == controlPoints.Length - 1)) { if (selectedStatus[0] || selectedStatus[controlPoints.Length - 1]) { Handles.color = Color.red; } } else if (selectedStatus[i]) { Handles.color = Color.red; } float size = HandleUtility.GetHandleSize(controlPoints[i]) * 0.1f; if (i % 3 == 0) { Handles.SphereHandleCap(0, controlPoints[i], Quaternion.identity, size, EventType.Repaint); } else { Handles.DotHandleCap(0, controlPoints[i], Quaternion.identity, size * 0.25f, EventType.Repaint); } } } // Control point selection handle: if (ObiSplineHandles.SplineCPSelector(controlPoints, selectedStatus)) { Repaint(); } // Draw cp tool handles: SplineCPTools(controlPoints); }