Beispiel #1
0
        public void SelectPoint(int i, SelectionType type)
        {
            switch (type)
            {
            case SelectionType.Additive:
                m_ShapeEditor.activePoint = i;
                m_SelectedPoints.Add(i);
                break;

            case SelectionType.Subtractive:
                m_ShapeEditor.activePoint = i > 0 ? i - 1 : 0;
                m_SelectedPoints.Remove(i);
                break;

            case SelectionType.Normal:
                m_SelectedPoints.Clear();
                m_ShapeEditor.activePoint = i;
                m_SelectedPoints.Add(i);
                break;

            default:
                m_ShapeEditor.activePoint = i; break;
            }
            m_ShapeEditor.Repaint();
        }
Beispiel #2
0
        public void RectSelect(Rect rect, SelectionType type)
        {
            if (type == SelectionType.Normal)
            {
                m_SelectedPoints.Clear();
                m_ShapeEditor.activePoint = -1;
                type = SelectionType.Additive;
            }

            for (int i = 0; i < m_ShapeEditor.GetPointsCount(); i++)
            {
                var p0 = m_ShapeEditor.GetPointPosition(i);
                if (rect.Contains(p0))
                {
                    SelectPoint(i, type);
                }
            }
            m_ShapeEditor.Repaint();
        }
Beispiel #3
0
        public void OnGUI()
        {
            Event evt = Event.current;

            Handles.BeginGUI();

            Vector2 mousePos = evt.mousePosition;
            int     id       = m_RectSelectionID;

            switch (evt.GetTypeForControl(id))
            {
            case EventType.Layout:
                if (!Tools.viewToolActive)
                {
                    HandleUtility.AddDefaultControl(id);
                }
                break;

            case EventType.MouseDown:
                if (HandleUtility.nearestControl == id && evt.button == 0)
                {
                    guiUtility.hotControl = id;
                    m_SelectStartPoint    = mousePos;
                }
                break;

            case EventType.MouseDrag:
                if (guiUtility.hotControl == id)
                {
                    if (!m_RectSelecting && (mousePos - m_SelectStartPoint).magnitude > k_MinSelectionSize)
                    {
                        m_RectSelecting = true;
                    }
                    if (m_RectSelecting)
                    {
                        m_SelectMousePoint = mousePos;

                        SelectionType type = SelectionType.Normal;
                        if (Event.current.control)
                        {
                            type = SelectionType.Subtractive;
                        }
                        else if (Event.current.shift)
                        {
                            type = SelectionType.Additive;
                        }
                        RectSelect(EditorGUIExt.FromToRect(m_SelectStartPoint, m_SelectMousePoint), type);
                    }
                    evt.Use();
                }
                break;

            case EventType.Repaint:
                if (guiUtility.hotControl == id && m_RectSelecting)
                {
                    EditorStyles.selectionRect.Draw(EditorGUIExt.FromToRect(m_SelectStartPoint, m_SelectMousePoint), GUIContent.none,
                                                    false, false, false, false);
                }
                break;

            case EventType.MouseUp:
                if (guiUtility.hotControl == id && evt.button == 0)
                {
                    guiUtility.hotControl      = 0;
                    guiUtility.keyboardControl = 0;
                    if (m_RectSelecting)
                    {
                        m_SelectMousePoint = new Vector2(mousePos.x, mousePos.y);

                        SelectionType type = SelectionType.Normal;
                        if (Event.current.control)
                        {
                            type = SelectionType.Subtractive;
                        }
                        else if (Event.current.shift)
                        {
                            type = SelectionType.Additive;
                        }

                        RectSelect(EditorGUIExt.FromToRect(m_SelectStartPoint, m_SelectMousePoint), type);

                        m_RectSelecting = false;
                    }
                    else
                    {
                        ClearSelection();
                    }
                    evt.Use();
                }
                break;
            }

            Handles.EndGUI();
        }