/// <summary>
        /// 始点が存在するとき
        ///   マウスがホバーしたら
        ///     一時的エッジを描画。
        /// </summary>
        private void CanvasMouseMove(MouseEventArgs e)
        {
            var posExact = e.GetPosition(mCanvas);
            var pos      = PointProc.SnapToGrid(posExact.X, posExact.Y, mDP.mGridSz);

            if (e.LeftButton == MouseButtonState.Released)
            {
                switch (mMode)
                {
                case Mode.ModeSetFirstPoint:
                    mPP.SetFirstPointMouseMove(pos);
                    break;

                case Mode.ModeAddEdge:
                    TmpEdgeRedrawMouseMove(pos);
                    break;

                case Mode.ModeDeletePointEdge:
                    DeletePointEdgeMouseMove(pos);
                    break;
                }
            }
            else
            {
                // マウスが左ドラッグ。
            }
        }
        private void CanvasMouseDownRight(MouseButtonEventArgs e)
        {
            var posExact = e.GetPosition(mCanvas);
            var pos      = PointProc.SnapToGrid(posExact.X, posExact.Y, mDP.mGridSz);

            switch (mMode)
            {
            case Mode.ModeAddEdge:
                PointAddRightClicked(pos);
                break;
            }
        }
        private void CanvasMouseDownLeft(MouseButtonEventArgs e)
        {
            var posExact = e.GetPosition(mCanvas);
            var pos      = PointProc.SnapToGrid(posExact.X, posExact.Y, mDP.mGridSz);

            switch (mMode)
            {
            case Mode.ModeSetFirstPoint:
                SetFirstPointLeftClicked(pos);
                break;

            case Mode.ModeAddEdge:
                PointAddLeftClicked(pos);
                break;

            case Mode.ModeDeletePointEdge:
                DeletePointEdgeLeftClicked(pos);
                break;
            }
        }