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