/// <summary> /// エッジの描画物を作り、キャンバスに登録。 /// 描画物が無い状態で呼んで下さい。 /// </summary> public void EdgeDrawablesCreate(Edge edge, Brush brush) { System.Diagnostics.Debug.Assert(edge.line == null); System.Diagnostics.Debug.Assert(edge.arrow == null); var p1 = mPP.FindPointByIdx(edge.fromPointIdx, PointProc.FindPointMode.FindAll); var p2 = mPP.FindPointByIdx(edge.toPointIdx, PointProc.FindPointMode.FindAll); edge.line = DrawUtil.NewLine(p1.xy, p2.xy, brush); edge.arrow = NewArrowPoly(p1.xy, p2.xy, brush); Canvas.SetZIndex(edge.line, mDP.Z_Edge); Canvas.SetZIndex(edge.arrow, mDP.Z_Edge); mDP.mCanvas.Children.Add(edge.line); mDP.mCanvas.Children.Add(edge.arrow); // 文字を出す。 var xy = WWVectorD2.Add(p1.xy, p2.xy).Scale(0.5); edge.tbIdx = new TextBlock(); edge.tbIdx.Padding = new Thickness(2); edge.tbIdx.Text = EdgeDescriptionText(edge.EdgeIdx, edge.C, edge.B); edge.tbIdx.Foreground = mDP.mEdgeTextFgBrush; edge.tbIdx.Background = mDP.mEdgeTextBgBrush; edge.tbIdx.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var tbWH = edge.tbIdx.DesiredSize; Canvas.SetLeft(edge.tbIdx, xy.X - tbWH.Width / 2); Canvas.SetTop(edge.tbIdx, xy.Y - tbWH.Height / 2); Canvas.SetZIndex(edge.tbIdx, mDP.Z_Edge + 1); mDP.mCanvas.Children.Add(edge.tbIdx); }
/// <summary> /// 一時的ポイント移動を反映しエッジ描画更新。 /// </summary> public void RedrawEdge(PointInf removedPoint, PointInf addedPoint) { foreach (var e in mEdgeList) { PointInf p1 = null; if (e.fromPointIdx == removedPoint.Idx) { p1 = addedPoint; } else { p1 = mPP.FindPointByIdx(e.fromPointIdx, PointProc.FindPointMode.FindAll); } PointInf p2 = null; if (e.toPointIdx == removedPoint.Idx) { p2 = addedPoint; } else { p2 = mPP.FindPointByIdx(e.toPointIdx, PointProc.FindPointMode.FindAll); } mDP.mCanvas.Children.Remove(e.line); e.line = null; mDP.mCanvas.Children.Remove(e.arrow); e.arrow = null; var l = DrawUtil.NewLine(p1.xy, p2.xy, mDP.mBrush); e.line = l; var poly = NewArrowPoly(p1.xy, p2.xy, mDP.mBrush); e.arrow = poly; mDP.mCanvas.Children.Add(l); mDP.mCanvas.Children.Add(poly); } }
/// <summary> /// すべてのエッジを再描画する。 /// �@既存エッジをキャンバスから削除。 /// �A新しいエッジを作成。 /// �B新エッジをキャンバスに追加。 /// </summary> public void RedrawAllEdges() { foreach (var e in mEdgeList) { var p1 = mPP.FindPointByIdx(e.fromPointIdx, PointProc.FindPointMode.FindAll); var p2 = mPP.FindPointByIdx(e.toPointIdx, PointProc.FindPointMode.FindAll); mDP.mCanvas.Children.Remove(e.line); e.line = null; mDP.mCanvas.Children.Remove(e.arrow); e.arrow = null; var l = DrawUtil.NewLine(p1.xy, p2.xy, mDP.mBrush); e.line = l; var poly = NewArrowPoly(p1.xy, p2.xy, mDP.mBrush); e.arrow = poly; mDP.mCanvas.Children.Add(l); mDP.mCanvas.Children.Add(poly); } }
private void RedrawGrid() { foreach (var p in mGridLines) { mCanvas.Children.Remove(p); } mGridLines.Clear(); for (int x = 0; x < mCanvas.ActualWidth; x += mDP.mGridSz) { var p = DrawUtil.NewLine(new WWVectorD2(x, 0), new WWVectorD2(x, mCanvas.ActualHeight), mDP.mGridBrush); Canvas.SetZIndex(p, mDP.Z_Grid); mCanvas.Children.Add(p); mGridLines.Add(p); } for (int y = 0; y < mCanvas.ActualHeight; y += mDP.mGridSz) { var p = DrawUtil.NewLine(new WWVectorD2(0, y), new WWVectorD2(mCanvas.ActualWidth, y), mDP.mGridBrush); Canvas.SetZIndex(p, mDP.Z_Grid); mCanvas.Children.Add(p); mGridLines.Add(p); } }