protected virtual void ProcessEventInCanvas(CanvasContext canvasCtx) { canvasCtx.m_curLocalPosition = canvasCtx.GetLocalPos(canvasCtx.m_curMouseNormalizePosition, canvasCtx.GetRealSize(width, height - toolBarHeight)); //鼠标中键拖动视图 if (Event.current.type == EventType.MouseDrag && Event.current.button == 2) { canvasCtx.m_offset += Event.current.delta; Repaint(); } //鼠标滚轮缩放视图 if (Event.current.type == EventType.ScrollWheel) { canvasCtx.scale += Event.current.delta.y * -0.01f; Repaint(); } //选择和移动逻辑 //按下鼠标左键 if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { var clickElement = canvasCtx.TestPoint(canvasCtx.m_curLocalPosition); canvasCtx.m_dragStartPosition = canvasCtx.m_curLocalPosition; if (clickElement == null) { //开始绘制选区 canvasCtx.ClearAllSelected(); canvasCtx.m_isDrawSelection = true; Repaint(); } else { if (!canvasCtx.IsSelected(clickElement)) { canvasCtx.ClearAllSelected(); canvasCtx.AddSelected(clickElement); } //开始拖动物体 canvasCtx.m_isDragElement = true; foreach (var element in canvasCtx.m_selectedElements) { if (element.canDrag) { element.m_dragStartPosition = element.position; } } Repaint(); } } //鼠标左键拖动 if (Event.current.type == EventType.MouseDrag && Event.current.button == 0) { if (canvasCtx.m_isDragElement) { foreach (var element in canvasCtx.m_selectedElements) { if (element.canDrag) { element.position = element.m_dragStartPosition + (canvasCtx.m_curLocalPosition - canvasCtx.m_dragStartPosition); } } Repaint(); } } //松开鼠标左键 if (Event.current.type == EventType.MouseUp && Event.current.button == 0) { //结束绘制选区,根据画出的选取选择对象 if (canvasCtx.m_isDrawSelection == true) { canvasCtx.m_isDrawSelection = false; var selections = canvasCtx.TestRect(canvasCtx.m_dragStartPosition, canvasCtx.m_curLocalPosition); canvasCtx.ClearAllSelected(); canvasCtx.AddSelected(selections); Repaint(); } else if (canvasCtx.m_isDragElement) { canvasCtx.m_isDragElement = false; } } }
protected override void ProcessEventInCanvas(CanvasContext canvasCtx) { base.ProcessEventInCanvas(canvasCtx); if (m_mode == WayPointsEMode.None) { if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { //双击边改变方向 var element = canvasCtx.TestPoint(canvasCtx.m_curLocalPosition); if (element != null) { if (element is Edge && element == m_lastClickElement) { if (m_frameCount - m_lastClickFrame < 40) { m_lastClickFrame = m_frameCount; (element as Edge).ChangeDir(); } } m_lastClickFrame = m_frameCount; Debug.Log(m_lastClickFrame); m_lastClickElement = element; } //添加点 if (Event.current.control) { m_wayPointsData.AddPoint(canvasCtx.m_curLocalPosition); } } if (Event.current.type == EventType.MouseDown && Event.current.button == 1) { //在点上点击鼠标右键开始添加边 var element = canvasCtx.TestPoint(canvasCtx.m_curLocalPosition); if (element != null && element is Point) { m_edgeStart = element as Point; m_mode = WayPointsEMode.AddEdge; } } //删除所选 if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Delete) { TryDelete(canvasCtx); } } else if (m_mode == WayPointsEMode.AddEdge) { var element = canvasCtx.TestPoint(canvasCtx.m_curLocalPosition); bool canAddEdge = element != null && element is Point && element != m_edgeStart && !m_wayPointsData.ContainEdge(m_edgeStart, element as Point); if (canAddEdge) { m_addEdgeColor = Color.green; } else { m_addEdgeColor = Color.red; } //松开鼠标右键添加边 if (Event.current.type == EventType.MouseUp && Event.current.button == 1) { if (canAddEdge) { m_wayPointsData.AddEdge(m_edgeStart as Point, element as Point); } m_mode = WayPointsEMode.None; } else if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { //添加点自动连成边,并继续添加边 var node = m_wayPointsData.AddPoint(canvasCtx.m_curLocalPosition); m_wayPointsData.AddEdge(m_edgeStart as Point, node); m_edgeStart = node; } } }