|
@@ -1,18 +1,19 @@
|
|
|
-using Microsoft.Win32;
|
|
|
-using System;
|
|
|
+using System;
|
|
|
+using System.IO;
|
|
|
using System.Windows;
|
|
|
using System.Windows.Controls;
|
|
|
using System.Windows.Input;
|
|
|
using System.Windows.Media;
|
|
|
using System.Windows.Media.Imaging;
|
|
|
using System.Windows.Shapes;
|
|
|
+using Microsoft.Win32;
|
|
|
|
|
|
namespace GraphDrawer
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// Interaction logic for GraphByClick.xaml
|
|
|
/// </summary>
|
|
|
- public partial class GraphByClick : Window
|
|
|
+ public partial class GraphByClick
|
|
|
{
|
|
|
public GraphByClick()
|
|
|
{
|
|
@@ -21,6 +22,7 @@ namespace GraphDrawer
|
|
|
VertexArray.vertexCount = 0;
|
|
|
}
|
|
|
|
|
|
+ readonly Random _rand = new Random();
|
|
|
public GraphByClick(int[,] matrix, bool state)
|
|
|
{
|
|
|
InitializeComponent();
|
|
@@ -29,10 +31,9 @@ namespace GraphDrawer
|
|
|
ClearCanvas();
|
|
|
if (state)
|
|
|
{
|
|
|
- MessageBox.Show("asd");
|
|
|
- int length = (int)Math.Sqrt(matrix.Length);
|
|
|
+ int length = matrix.GetLength(0);
|
|
|
for(int i = 0; i < length; i++)
|
|
|
- VertexArray.AddVertex(canvas, rand.Next(1, 600), rand.Next(1, 300));
|
|
|
+ VertexArray.AddVertex(canvas, _rand.Next(1, 600), _rand.Next(1, 300));
|
|
|
|
|
|
for(int i = 0; i < length; i++)
|
|
|
{
|
|
@@ -40,12 +41,12 @@ namespace GraphDrawer
|
|
|
for(int j = 0; j < length; j++)
|
|
|
{
|
|
|
var vertex2 = VertexArray.vertex[j];
|
|
|
- if (matrix[i, j] == 1)
|
|
|
+ if (matrix[i, j] >= 1)
|
|
|
{
|
|
|
EdgeArray.edgeCount++;
|
|
|
Array.Resize(ref EdgeArray.edge, EdgeArray.edgeCount);
|
|
|
Array.Resize(ref EdgeArray.line, EdgeArray.edgeCount);
|
|
|
- EdgeArray.line[EdgeArray.edgeCount - 1] = new Line()
|
|
|
+ EdgeArray.line[EdgeArray.edgeCount - 1] = new Line
|
|
|
{
|
|
|
Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0)),
|
|
|
StrokeThickness = 2,
|
|
@@ -56,7 +57,10 @@ namespace GraphDrawer
|
|
|
};
|
|
|
|
|
|
canvas.Children.Add(EdgeArray.line[EdgeArray.edgeCount - 1]);
|
|
|
- EdgeArray.edge[EdgeArray.edgeCount - 1] = new Edge(EdgeArray.line[EdgeArray.edgeCount-1], vertex1, vertex2);
|
|
|
+ if(matrix[i,j]>1)
|
|
|
+ EdgeArray.edge[EdgeArray.edgeCount - 1] = new Edge(EdgeArray.line[EdgeArray.edgeCount - 1], vertex1, vertex2, matrix[i, j]);
|
|
|
+ else
|
|
|
+ EdgeArray.edge[EdgeArray.edgeCount - 1] = new Edge(EdgeArray.line[EdgeArray.edgeCount - 1], vertex1, vertex2);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -69,7 +73,7 @@ namespace GraphDrawer
|
|
|
|
|
|
for(int i = 0; i < rows; i++)
|
|
|
{
|
|
|
- VertexArray.AddVertex(canvas, rand.Next(1, 600), rand.Next(1, 300));
|
|
|
+ VertexArray.AddVertex(canvas, _rand.Next(1, 600), _rand.Next(1, 300));
|
|
|
}
|
|
|
|
|
|
for(int j = 0; j < cols; j++)
|
|
@@ -90,13 +94,6 @@ namespace GraphDrawer
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- private void BackBtn_Click(object sender, RoutedEventArgs e) // Выбор режима рисования
|
|
|
- {
|
|
|
- ChoiceMode regime = new ChoiceMode();
|
|
|
- regime.Show();
|
|
|
- Close();
|
|
|
- }
|
|
|
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
|
|
|
{
|
|
|
|
|
@@ -136,7 +133,7 @@ namespace GraphDrawer
|
|
|
else
|
|
|
{
|
|
|
VertexArray.buffer[1] = VertexArray.vertex[i];
|
|
|
- ArrowedEdgeArray.AddArrowedEdge(canvas, VertexArray.buffer[0], VertexArray.buffer[1]);
|
|
|
+ EdgeArray.AddArrowedEdge(canvas, VertexArray.buffer[0], VertexArray.buffer[1]);
|
|
|
VertexArray.buffer[0] = null;
|
|
|
VertexArray.buffer[1] = null;
|
|
|
}
|
|
@@ -151,20 +148,31 @@ namespace GraphDrawer
|
|
|
int Y = Convert.ToInt32(point1.Y);
|
|
|
for (int i = 0; i <= VertexArray.vertexCount - 1; i++)// Проверка на принадлежность точки к какой-либо вершине
|
|
|
{
|
|
|
- if (((X - VertexArray.vertex[i].X <= 15) && (X - VertexArray.vertex[i].X >= 0)) ||
|
|
|
- ((VertexArray.vertex[i].X - X <= 15) && (VertexArray.vertex[i].X - X >= 0)))
|
|
|
+ if ((((X - VertexArray.vertex[i].X <= 8) && (X - VertexArray.vertex[i].X >= 0)) ||
|
|
|
+ ((VertexArray.vertex[i].X - X <= 8) && (VertexArray.vertex[i].X - X >= 0))) && (((Y - VertexArray.vertex[i].Y <= 8) && (Y - VertexArray.vertex[i].Y >= 0)) ||
|
|
|
+ ((VertexArray.vertex[i].Y - Y <= 8) && (VertexArray.vertex[i].Y - Y >= 0))))
|
|
|
{
|
|
|
- if (((Y - VertexArray.vertex[i].Y <= 15) && (Y - VertexArray.vertex[i].Y >= 0)) ||
|
|
|
- ((VertexArray.vertex[i].Y - Y <= 15) && (VertexArray.vertex[i].Y - Y >= 0)))
|
|
|
+ if (VertexArray.buffer[0] == null)
|
|
|
{
|
|
|
- if (VertexArray.buffer[0] == null)
|
|
|
- {
|
|
|
- VertexArray.buffer[0] = VertexArray.vertex[i];
|
|
|
- }
|
|
|
- else
|
|
|
+ VertexArray.buffer[0] = VertexArray.vertex[i];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (!Vertex.Compare(VertexArray.buffer[0], VertexArray.vertex[i]))
|
|
|
{
|
|
|
VertexArray.buffer[1] = VertexArray.vertex[i];
|
|
|
- EdgeArray.AddEdge(canvas, VertexArray.buffer[0], VertexArray.buffer[1]);
|
|
|
+ EdgeCreateWindow edgeCreate = new EdgeCreateWindow();
|
|
|
+ if (edgeCreate.ShowDialog() == true)
|
|
|
+ {
|
|
|
+ if (edgeCreate.State)
|
|
|
+ {
|
|
|
+ EdgeArray.AddArrowedEdge(canvas, VertexArray.buffer[0], VertexArray.buffer[1], edgeCreate.Color, edgeCreate.Weight);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ EdgeArray.AddEdge(canvas, VertexArray.buffer[0], VertexArray.buffer[1], edgeCreate.Color, edgeCreate.Weight);
|
|
|
+ }
|
|
|
+ }
|
|
|
VertexArray.buffer[0] = null;
|
|
|
VertexArray.buffer[1] = null;
|
|
|
}
|
|
@@ -175,25 +183,6 @@ namespace GraphDrawer
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- // Получение рандомной кисти из заданных цветов
|
|
|
- readonly Random rand = new Random((DateTime.Now.Millisecond * DateTime.Now.Second) % DateTime.Now.Hour);
|
|
|
- public SolidColorBrush GetBrush()
|
|
|
- {
|
|
|
- SolidColorBrush[] brush = new SolidColorBrush[10];
|
|
|
- brush[0] = new SolidColorBrush(Color.FromRgb(235, 64, 52));
|
|
|
- brush[1] = new SolidColorBrush(Color.FromRgb(235, 235, 52));
|
|
|
- brush[2] = new SolidColorBrush(Color.FromRgb(64, 235, 52));
|
|
|
- brush[3] = new SolidColorBrush(Color.FromRgb(52, 235, 229));
|
|
|
- brush[4] = new SolidColorBrush(Color.FromRgb(0, 13, 255));
|
|
|
- brush[5] = new SolidColorBrush(Color.FromRgb(140, 0, 255));
|
|
|
- brush[6] = new SolidColorBrush(Color.FromRgb(255, 0, 230));
|
|
|
- brush[7] = new SolidColorBrush(Color.FromRgb(255, 162, 0));
|
|
|
- brush[8] = new SolidColorBrush(Color.FromRgb(0, 0, 0));
|
|
|
- return brush[rand.Next(0, 8)];
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
// Очистка канваса
|
|
|
private void ClearBtn_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
@@ -235,7 +224,7 @@ namespace GraphDrawer
|
|
|
|
|
|
double dpi = 96d;
|
|
|
|
|
|
- RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, (int)rect.Bottom, dpi, dpi, System.Windows.Media.PixelFormats.Default);
|
|
|
+ RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, (int)rect.Bottom, dpi, dpi, PixelFormats.Default);
|
|
|
|
|
|
rtb.Render(canvas);
|
|
|
|
|
@@ -244,12 +233,12 @@ namespace GraphDrawer
|
|
|
|
|
|
try
|
|
|
{
|
|
|
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
|
|
|
+ MemoryStream ms = new MemoryStream();
|
|
|
|
|
|
pngEncoder.Save(ms);
|
|
|
ms.Close();
|
|
|
|
|
|
- System.IO.File.WriteAllBytes(filename, ms.ToArray());
|
|
|
+ File.WriteAllBytes(filename, ms.ToArray());
|
|
|
}
|
|
|
catch (Exception err)
|
|
|
{
|
|
@@ -298,10 +287,14 @@ namespace GraphDrawer
|
|
|
for (int k = 0; k < EdgeArray.edge.Length; k++)
|
|
|
{
|
|
|
var edge = EdgeArray.edge[k];
|
|
|
- if (Vertex.Compare(edge.finishVertex, vertex1) && Vertex.Compare(edge.startVertex, vertex2))
|
|
|
- matrix[i, j] = 1;
|
|
|
- else if (Vertex.Compare(edge.startVertex, vertex1) && Vertex.Compare(edge.finishVertex, vertex2))
|
|
|
- matrix[i, j] = 1;
|
|
|
+ if (Vertex.Compare(edge.FinishVertex, vertex1) && Vertex.Compare(edge.StartVertex, vertex2))
|
|
|
+ if (edge.Weight > 0)
|
|
|
+ matrix[i, j] = (int)edge.Weight;
|
|
|
+ else
|
|
|
+ matrix[i, j] = 1;
|
|
|
+ else if (Vertex.Compare(edge.StartVertex, vertex1) && Vertex.Compare(edge.FinishVertex, vertex2))
|
|
|
+ if (edge.Weight > 0)
|
|
|
+ matrix[i, j] = (int)edge.Weight;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -321,23 +314,33 @@ namespace GraphDrawer
|
|
|
|
|
|
private void IncidenceMatrix_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- int rows = VertexArray.vertex.Length;
|
|
|
- int cols = EdgeArray.edge.Length;
|
|
|
- int[,] matrix = new int[rows, cols];
|
|
|
- for(int i = 0; i < rows; i++)
|
|
|
+ var rows = VertexArray.vertex.Length;
|
|
|
+ var cols = EdgeArray.edge.Length;
|
|
|
+ var matrix = new int[rows, cols];
|
|
|
+ for(var i = 0; i < rows; i++)
|
|
|
{
|
|
|
var vertex = VertexArray.vertex[i];
|
|
|
|
|
|
- for (int j = 0; j < cols; j++)
|
|
|
+ for (var j = 0; j < cols; j++)
|
|
|
{
|
|
|
var edge = EdgeArray.edge[j];
|
|
|
- if (Vertex.Compare(vertex, edge.finishVertex) || Vertex.Compare(vertex, edge.startVertex))
|
|
|
- matrix[i, j] = 1;
|
|
|
+
|
|
|
+
|
|
|
+ if (Vertex.Compare(vertex, edge.FinishVertex) && edge.IsFocused)
|
|
|
+ matrix[i, j] = -1;
|
|
|
else
|
|
|
- matrix[i, j] = 0;
|
|
|
+ {
|
|
|
+ if (Vertex.Compare(vertex, edge.FinishVertex) || Vertex.Compare(vertex, edge.StartVertex))
|
|
|
+ if (edge.Weight > 0)
|
|
|
+ matrix[i, j] = (int)edge.Weight;
|
|
|
+ else
|
|
|
+ matrix[i, j] = 1;
|
|
|
+ else
|
|
|
+ matrix[i, j] = 0;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- MatrixOutput output = new MatrixOutput(matrix);
|
|
|
+ var output = new MatrixOutput(matrix);
|
|
|
output.Show();
|
|
|
|
|
|
}
|
|
@@ -350,7 +353,7 @@ namespace GraphDrawer
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public class VertexArray
|
|
|
+ public static class VertexArray
|
|
|
{
|
|
|
public static int vertexCount;
|
|
|
public static Vertex[] vertex = new Vertex[vertexCount];
|
|
@@ -368,14 +371,13 @@ namespace GraphDrawer
|
|
|
vertex[vertexCount-1] = new Vertex(x, y);
|
|
|
ellipse[vertexCount - 1] = new Ellipse
|
|
|
{
|
|
|
- Height = 20,
|
|
|
- Width = 20,
|
|
|
- StrokeThickness = 2,
|
|
|
- Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0))
|
|
|
+ Height = 10,
|
|
|
+ Width = 10,
|
|
|
+ Fill = new SolidColorBrush(Color.FromRgb(0, 0, 0))
|
|
|
};
|
|
|
- ellipse[vertexCount-1].Fill = ellipse[vertexCount-1].Stroke;
|
|
|
Canvas.SetTop(ellipse[vertexCount-1], vertex[vertexCount-1].Y);
|
|
|
Canvas.SetLeft(ellipse[vertexCount-1], vertex[vertexCount-1].X);
|
|
|
+ Panel.SetZIndex(ellipse[vertexCount - 1], 10);
|
|
|
canvas.Children.Add(ellipse[vertexCount-1]);
|
|
|
return vertexCount-1;
|
|
|
}
|
|
@@ -418,6 +420,8 @@ namespace GraphDrawer
|
|
|
public static int edgeCount;
|
|
|
public static Edge[] edge = new Edge[edgeCount];
|
|
|
public static Line[] line = new Line[edgeCount];
|
|
|
+ public static Label[] label = new Label[edgeCount];
|
|
|
+ public static ArrowLine[] ArrowLine = new ArrowLine[edgeCount];
|
|
|
|
|
|
public static void AddEdge(Canvas canvas, Vertex v1, Vertex v2)
|
|
|
{
|
|
@@ -427,38 +431,107 @@ namespace GraphDrawer
|
|
|
line[edgeCount-1] = new Line();
|
|
|
edge[edgeCount-1] = new Edge(line[edgeCount-1], v1, v2);
|
|
|
line[edgeCount - 1].Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0));
|
|
|
- line[edgeCount - 1].StrokeThickness = 2;
|
|
|
- line[edgeCount - 1].X1 = v1.X+10;
|
|
|
- line[edgeCount - 1].Y1 = v1.Y+10;
|
|
|
- line[edgeCount - 1].X2 = v2.X+10;
|
|
|
- line[edgeCount - 1].Y2 = v2.Y+10;
|
|
|
+ line[edgeCount - 1].StrokeThickness = 4;
|
|
|
+ line[edgeCount - 1].X1 = v1.X;
|
|
|
+ line[edgeCount - 1].Y1 = v1.Y;
|
|
|
+ line[edgeCount - 1].X2 = v2.X;
|
|
|
+ line[edgeCount - 1].Y2 = v2.Y;
|
|
|
+ Panel.SetZIndex(line[edgeCount-1], -5);
|
|
|
canvas.Children.Add(line[edgeCount - 1]);
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- public class ArrowedEdgeArray
|
|
|
- {
|
|
|
- public static ArrowLine[] line = new ArrowLine[EdgeArray.edgeCount];
|
|
|
- public static Edge[] edge = new Edge[EdgeArray.edgeCount];
|
|
|
+ public static void AddEdge(Canvas canvas, Vertex v1, Vertex v2, Color lineColor, int weight)
|
|
|
+ {
|
|
|
+ edgeCount++;
|
|
|
+ Array.Resize(ref edge, edgeCount);
|
|
|
+ Array.Resize(ref line, edgeCount);
|
|
|
+ Array.Resize(ref label, edgeCount);
|
|
|
+ line[edgeCount - 1] = new Line
|
|
|
+ {
|
|
|
+ StrokeThickness = 2,
|
|
|
+ X1 = v1.X,
|
|
|
+ Y1 = v1.Y,
|
|
|
+ Stroke = new SolidColorBrush(lineColor),
|
|
|
+ Y2 = v2.Y,
|
|
|
+ X2 = v2.X
|
|
|
+ };
|
|
|
+ edge[edgeCount - 1] = new Edge(line[edgeCount - 1], v1, v2) {Weight = weight};
|
|
|
+
|
|
|
+ if (weight > 0)
|
|
|
+ {
|
|
|
+ Brush brush = Brushes.Black;
|
|
|
+ label[edgeCount - 1] = new Label
|
|
|
+ {
|
|
|
+ FontSize = 16,
|
|
|
+ Foreground = brush,
|
|
|
+ Background = Brushes.White,
|
|
|
+ BorderBrush = new SolidColorBrush(lineColor),
|
|
|
+ BorderThickness = new Thickness(2),
|
|
|
+ Content = weight.ToString()
|
|
|
+ };
|
|
|
+ double centerX = Edge.GetCenterByX(edge[edgeCount - 1]);
|
|
|
+ double centerY = Edge.GetCenterByY(edge[edgeCount - 1]);
|
|
|
+ Panel.SetZIndex(label[edgeCount - 1], 3);
|
|
|
+ Canvas.SetLeft(label[edgeCount - 1], centerX);
|
|
|
+ Canvas.SetTop(label[edgeCount - 1], centerY);
|
|
|
+ canvas.Children.Add(label[edgeCount - 1]);
|
|
|
+ }
|
|
|
+ canvas.Children.Add(line[edgeCount - 1]);
|
|
|
+ }
|
|
|
|
|
|
public static void AddArrowedEdge(Canvas canvas, Vertex v1, Vertex v2)
|
|
|
{
|
|
|
- int edgeCount = EdgeArray.edgeCount;
|
|
|
+ edgeCount++;
|
|
|
+ Array.Resize(ref ArrowLine, edgeCount);
|
|
|
+ Array.Resize(ref line, edgeCount);
|
|
|
+ ArrowLine[edgeCount - 1] = new ArrowLine();
|
|
|
+ edge[edgeCount - 1] = new Edge(ArrowLine[edgeCount - 1], v1, v2);
|
|
|
+ ArrowLine[edgeCount - 1].Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0));
|
|
|
+ ArrowLine[edgeCount - 1].StrokeThickness = 2;
|
|
|
+ ArrowLine[edgeCount - 1].X1 = v1.CenterByX;
|
|
|
+ ArrowLine[edgeCount - 1].Y1 = v1.CenterByY;
|
|
|
+ ArrowLine[edgeCount - 1].X2 = v2.CenterByX;
|
|
|
+ ArrowLine[edgeCount - 1].Y2 = v2.CenterByY;
|
|
|
+ canvas.Children.Add(ArrowLine[edgeCount - 1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void AddArrowedEdge(Canvas canvas, Vertex v1, Vertex v2, Color lineColor, int Weight)
|
|
|
+ {
|
|
|
edgeCount++;
|
|
|
Array.Resize(ref edge, edgeCount);
|
|
|
Array.Resize(ref line, edgeCount);
|
|
|
- line[edgeCount - 1] = new ArrowLine();
|
|
|
- edge[edgeCount - 1] = new Edge(line[edgeCount - 1], v1, v2);
|
|
|
- line[edgeCount - 1].Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0));
|
|
|
- line[edgeCount - 1].StrokeThickness = 2;
|
|
|
- line[edgeCount - 1].X1 = v1.X + 5;
|
|
|
- line[edgeCount - 1].Y1 = v1.Y + 5;
|
|
|
- line[edgeCount - 1].X2 = v2.X + 5;
|
|
|
- line[edgeCount - 1].Y2 = v2.Y + 5;
|
|
|
- canvas.Children.Add(line[edgeCount - 1]);
|
|
|
- EdgeArray.edgeCount = edgeCount;
|
|
|
+ Array.Resize(ref label, edgeCount);
|
|
|
+ Array.Resize(ref ArrowLine, edgeCount);
|
|
|
+ ArrowLine[edgeCount - 1] = new ArrowLine();
|
|
|
+ edge[edgeCount - 1] = new Edge(ArrowLine[edgeCount - 1], v1, v2);
|
|
|
+ ArrowLine[edgeCount - 1].Stroke = new SolidColorBrush(lineColor);
|
|
|
+ ArrowLine[edgeCount - 1].StrokeThickness = 2;
|
|
|
+ ArrowLine[edgeCount - 1].X1 = v1.CenterByX - 5;
|
|
|
+ ArrowLine[edgeCount - 1].Y1 = v1.CenterByY - 5;
|
|
|
+ ArrowLine[edgeCount - 1].X2 = v2.CenterByX - 2;
|
|
|
+ ArrowLine[edgeCount - 1].Y2 = v2.CenterByY - 3;
|
|
|
+ edge[edgeCount - 1].Weight = Weight;
|
|
|
+
|
|
|
+ if (Weight > 0)
|
|
|
+ {
|
|
|
+ Brush brush = Brushes.Black;
|
|
|
+ label[edgeCount - 1] = new Label
|
|
|
+ {
|
|
|
+ FontSize = 16,
|
|
|
+ Foreground = brush,
|
|
|
+ Background = Brushes.White,
|
|
|
+ BorderBrush = new SolidColorBrush(lineColor),
|
|
|
+ BorderThickness = new Thickness(2),
|
|
|
+ Content = Weight.ToString()
|
|
|
+ };
|
|
|
+ var centerX = Edge.GetCenterByX(edge[edgeCount - 1]);
|
|
|
+ var centerY = Edge.GetCenterByY(edge[edgeCount - 1]);
|
|
|
+ Panel.SetZIndex(label[edgeCount - 1], 3);
|
|
|
+ Canvas.SetLeft(label[edgeCount - 1], centerX);
|
|
|
+ Canvas.SetTop(label[edgeCount - 1], centerY);
|
|
|
+ canvas.Children.Add(label[edgeCount - 1]);
|
|
|
+ }
|
|
|
+ canvas.Children.Add(ArrowLine[edgeCount - 1]);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|