GraphAction.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Windows.Controls;
  3. using System.Windows.Shapes;
  4. namespace DrawGraph
  5. {
  6. class GraphAction
  7. {
  8. public static void ClearCanvas(Edge[] edges, Node[] nodes)
  9. {
  10. if (edges != null && nodes != null)
  11. {
  12. Array.Clear(edges, 0, edges.Length);
  13. Array.Clear(nodes, 0, nodes.Length);
  14. }
  15. else
  16. {
  17. throw new NullReferenceException();
  18. }
  19. }
  20. public static void ClearCanvas(Graph graph)
  21. {
  22. ClearCanvas(graph.Edges, graph.Nodes);
  23. }
  24. public static void RemoveAllEdgesFromCanvas(Canvas canvas, Line[] lines, Edge[] edges)
  25. {
  26. Array.Clear(edges, 0, edges.Length);
  27. for (int i = 0; i < lines.Length; i++)
  28. {
  29. canvas.Children.Remove(lines[i]);
  30. }
  31. }
  32. public static void RemoveLastAddedFromCanvas(Canvas canvas)
  33. {
  34. int removingElement = canvas.Children.Count - 1;
  35. canvas.Children.RemoveAt(removingElement);
  36. }
  37. public Line GetEdgeProperties(Edge edge)
  38. {
  39. Line line = new Line
  40. {
  41. X1 = edge.SourceNode.X,
  42. Y1 = edge.SourceNode.Y,
  43. X2 = edge.TargetNode.X,
  44. Y2 = edge.TargetNode.Y,
  45. Stroke = Settings.FillColor,
  46. StrokeThickness = Settings.StrokeThickness
  47. };
  48. return line;
  49. }
  50. public Ellipse GetEllipseProperties(Node node)
  51. {
  52. Ellipse ellipse = new Ellipse
  53. {
  54. Fill = Settings.FillColor,
  55. Width = Settings.NodeWidth,
  56. Height = Settings.NodeHeight
  57. };
  58. Canvas.SetLeft(ellipse, node.X);
  59. Canvas.SetTop(ellipse, node.Y);
  60. return ellipse;
  61. }
  62. public static void AddGraphToCanvas(Graph graph, Canvas canvas)
  63. {
  64. AddRangeToCanvas(graph.Nodes, graph.Edges, canvas);
  65. }
  66. public static void AddRangeToCanvas(Node[] nodes, Edge[] edges, Canvas canvas)
  67. {
  68. Ellipse[] ellipses = new Ellipse[nodes.Length];
  69. Line[] lines = new Line[edges.Length];
  70. ArrowLine[] arrowLines = new ArrowLine[edges.Length];
  71. for (int i = 0; i < nodes.Length; i++)
  72. {
  73. ellipses[i] = new Ellipse()
  74. {
  75. Fill = Settings.FillColor,
  76. Width = Settings.NodeWidth,
  77. Height = Settings.NodeHeight
  78. };
  79. Canvas.SetLeft(ellipses[i], nodes[i].X);
  80. Canvas.SetTop(ellipses[i], nodes[i].Y);
  81. canvas.Children.Add(ellipses[i]);
  82. }
  83. for (int i = 0; i < edges.Length; i++)
  84. {
  85. var edge = edges[i];
  86. if (edge.IsFocused)
  87. {
  88. arrowLines[i] = new ArrowLine()
  89. {
  90. X1 = edge.SourceNode.GetCenterByX(),
  91. Y1 = edge.SourceNode.GetCenterByY(),
  92. X2 = edge.TargetNode.GetCenterByX(),
  93. Y2 = edge.TargetNode.GetCenterByY(),
  94. Stroke = Settings.FillColor,
  95. Fill = Settings.FillColor,
  96. StrokeThickness = Settings.StrokeThickness
  97. };
  98. canvas.Children.Add(arrowLines[i]);
  99. }
  100. else
  101. {
  102. lines[i] = new Line()
  103. {
  104. X1 = edge.SourceNode.GetCenterByX(),
  105. Y1 = edge.SourceNode.GetCenterByY(),
  106. X2 = edge.TargetNode.GetCenterByX(),
  107. Y2 = edge.TargetNode.GetCenterByY(),
  108. Stroke = Settings.FillColor,
  109. Fill = Settings.FillColor,
  110. StrokeThickness = Settings.StrokeThickness
  111. };
  112. canvas.Children.Add(lines[i]);
  113. }
  114. }
  115. }
  116. }
  117. }