Ejemplo n.º 1
0
        /**
         * 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;
        }
Ejemplo n.º 2
0
        /**
         * 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);
        }