private void DeletePointEdgeMouseMove(WWVectorD2 pos)
        {
            // 選択状態色を一旦通常色に戻します。
            DeletePointEdgeCancel();

            var e = mEP.FindNearestEdge(pos);
            var p = mPP.TestHit(pos, mDP.mPointSz);

            if (e != null)
            {
                if (p != null)
                {
                    // 近いほうがヒット。
                    if (mEP.EdgeDistanceFromPos(e, pos, 1.0, PointProc.FindPointMode.FindFromPointList)
                        < WWVectorD2.Distance(p.xy, pos))
                    {
                        // eのほうが近い。
                        mEP.EdgeChangeColor(e, mDP.mBrightBrush);
                        mEP.mTmpEdge = e;
                    }
                    else
                    {
                        // pのほうが近い。
                        mPP.PointChangeColor(p, mDP.mBrightBrush);
                        mPP.mFromPoint = p;
                    }
                }
                else
                {
                    // エッジ。
                    mEP.EdgeChangeColor(e, mDP.mBrightBrush);
                    mEP.mTmpEdge = e;
                }
            }
            else if (p != null)
            {
                // p。
                mPP.PointChangeColor(p, mDP.mBrightBrush);
                mPP.mFromPoint = p;
            }
        }
예제 #2
0
        // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
        // イベント。

        public void MouseMoveUpdateTmpEdge(WWVectorD2 pos)
        {
            if (mPP.mFromPoint == null)
            {
                // 始点が無い。
                Console.WriteLine("MME FP none");
                return;
            }

            // 始点mFromPoint有り。
            Console.WriteLine("MME ({0:0.0} {0:0.0})", pos.X, pos.Y);

            // TmpEdgeの始点p1と終点p2
            PointInf p1 = null;
            PointInf p2 = null;

            if (mTmpEdge != null)
            {
                p1 = mPP.FindPointByIdx(mTmpEdge.fromPointIdx, PointProc.FindPointMode.FindAll);
                p2 = mPP.FindPointByIdx(mTmpEdge.toPointIdx, PointProc.FindPointMode.FindAll);
            }

            // マウスポインタ位置に確定の終点toPointがあるか。
            var toPoint = mPP.TestHit(pos, mDP.mPointSz);

            if (toPoint == null)
            {
                // マウスポインタ位置に確定の終点が無い。
                // この場合、確定のエッジは無い。
                if (mPP.mToPoint != null && WWVectorD2.Distance(mPP.mToPoint.xy, pos) < 1)
                {
                    // マウスポインタ位置に仮の終点mToPointが存在する。
                    Console.WriteLine("MME already toPoint");

                    if (p1 == mPP.mFromPoint && p2 == mPP.mToPoint)
                    {
                        // mFromPoint → mToPoint
                        // 仮のエッジが既に引かれている。
                        return;
                    }

                    // mFromPoint → mToPointのエッジを引く必要がある。
                    p1 = mPP.mFromPoint;
                    p2 = mPP.mToPoint;
                }
                else
                {
                    // マウスポインタ位置に確定の終点も仮の終点も無い。
                    // 画面外にマウスが行った場合?
                    // 仮のエッジがあれば消す。
                    EdgeDrawablesRemove(mTmpEdge);
                    return;
                }
            }
            else
            {
                // 確定の終点toPointがある。
                if (null != FindEdge(mPP.mFromPoint.Idx, toPoint.Idx, FEOption.SamePosition))
                {
                    // 確定のエッジが既に引かれている。
                    // 仮のエッジがあれば消す。
                    EdgeDrawablesRemove(mTmpEdge);
                    return;
                }

                if (p1 == mPP.mFromPoint && p2 == toPoint)
                {
                    // mFromPoint → toPoint
                    // 仮のエッジが既に引かれている。
                    return;
                }

                // mFromPoint → toPointのエッジを引く必要がある。
                p1 = mPP.mFromPoint;
                p2 = toPoint;
            }

            // Edgeを作り直す。
            EdgeDrawablesRemove(mTmpEdge);
            mTmpEdge = NewEdge(p1, p2, mDP.mBrightBrush);
            Console.WriteLine("MME created edge");
            return;
        }