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; } }
// ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // イベント。 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; }