public static void FillCanvasWithAllNodes(Canvas c, Graph g) { c.Background = new SolidColorBrush(new System.Windows.Media.Color() { A = ((System.Drawing.Color)(Properties.Settings.Default["CanvasBackgroundBrushColour"])).A, R = ((System.Drawing.Color)(Properties.Settings.Default["CanvasBackgroundBrushColour"])).R, G = ((System.Drawing.Color)(Properties.Settings.Default["CanvasBackgroundBrushColour"])).G, B = ((System.Drawing.Color)(Properties.Settings.Default["CanvasBackgroundBrushColour"])).B, }); // Gett All Names and Sizes List <string> allNodeNames = g.GetAllNodeNames().ToList(); List <Point> sizes = new List <Point>(); foreach (string name in allNodeNames) { sizes.Add(NodeEllipse.GetEllipseWidthAndHeightBasedOnText(name, out _, g.GetNode(name))); } //allNodeNames.ForEach(x => Sizes.Add(NodeEllipse.GetEllipseWidthAndHeightBasedOnText(x))); // Actually Fill the Canvas for (int i = 0; i < allNodeNames.Count; i++) { Node n = g.GetNode(allNodeNames[i]); NodeEllipse.AddNodeEllipse(c, g, n, new Point(n.Position.X, n.Position.Y)); } for (int j = 0; j < c.Children.Count; j++) { if (c.Children[j] is NodeEllipse nodeEllipse) { nodeEllipse.InstantiateConnectionLines(); } } }
private static void AddNodeEllipse(Canvas c, Graph g, Node n, Point p) { NodeEllipse nodeEllipse = new NodeEllipse(c, g, n, p, (int)Properties.Settings.Default["MinNodeEllipsePadding"]); c.Children.Add(nodeEllipse); }
private void AddConnectionLine(Node toNode) { NodeConnectionLine connectionLine = new NodeConnectionLine(this, NodeEllipse.GetNodeEllipseByName(this._canvas, toNode.Name), this._canvas); this._lines.Add(connectionLine); }
public NodeConnectionLine(NodeEllipse fromNodeEllipse, NodeEllipse toNodeEllipse, Canvas c) { this.FromNodeEllipse = fromNodeEllipse; this.ToNodeEllipse = toNodeEllipse; this._canvas = c; this._line = new Line() { Stroke = System.Windows.Media.Brushes.White, StrokeThickness = 5, }; Canvas.SetZIndex(this._line, -1); this._canvas.Children.Add(this._line); this._directionLines = new List <Line>() { new Line() { Stroke = System.Windows.Media.Brushes.White, StrokeThickness = 2, }, new Line() { Stroke = System.Windows.Media.Brushes.White, StrokeThickness = 2, } }; Canvas.SetZIndex(this._directionLines[0], -1); Canvas.SetZIndex(this._directionLines[1], -1); this._canvas.Children.Add(this._directionLines[0]); this._canvas.Children.Add(this._directionLines[1]); this.UpdatePosition(); }
private void InstantiateContent(Point p, Brush strokeBrush, Brush textBrush, int minDistanceToText = 10, int zIndex = 3) { Point Size = NodeEllipse.GetEllipseWidthAndHeightBasedOnText(this._node.Name, minDistanceToText); this._measurements = new Rect() { X = p.X, Y = p.Y, Width = Size.X, Height = Size.Y }; // Creating the Ellipse this._ellipse = new Ellipse() { Fill = this._canvas.Background, Stroke = strokeBrush, Width = this._measurements.Width, Height = this._measurements.Height }; // Setting the Ellipse's coordinates Canvas.SetLeft(this._ellipse, 0); Canvas.SetTop(this._ellipse, 0); Canvas.SetZIndex(this._ellipse, zIndex); // Creating the TextBlock this._textBlock = new TextBlock() { Text = this._node.Name, TextAlignment = TextAlignment.Center, Foreground = textBrush, Width = Size.X - 2 * minDistanceToText, Height = Size.Y - 2 * minDistanceToText }; //// Applying the appropriate width and height of the TextBlock //this._textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); //this._textBlock.Arrange(new Rect(this._textBlock.DesiredSize)); // Setting the Textblock's coordinates Canvas.SetLeft(this._textBlock, 0 + minDistanceToText); Canvas.SetTop(this._textBlock, 0 + minDistanceToText); Canvas.SetZIndex(this._textBlock, zIndex + 1); // Drawing this.NodeEllipseCanvas.Children.Add(this._ellipse); this.NodeEllipseCanvas.Children.Add(this._textBlock); }
public NodeConnectionLine(NodeEllipse fromNodeEllipse, NodeEllipse toNodeEllipse, Canvas c) { this.FromNodeEllipse = fromNodeEllipse; this.ToNodeEllipse = toNodeEllipse; this._canvas = c; this._line = new Line() { Stroke = new SolidColorBrush(new System.Windows.Media.Color { A = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).A, R = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).R, G = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).G, B = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).B, }), StrokeThickness = 3, }; Canvas.SetZIndex(this._line, -1); this._canvas.Children.Add(this._line); this._directionLines = new List <Line>() { new Line() { Stroke = new SolidColorBrush(new System.Windows.Media.Color { A = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).A, R = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).R, G = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).G, B = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).B, }), StrokeThickness = 3, }, new Line() { Stroke = new SolidColorBrush(new System.Windows.Media.Color { A = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).A, R = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).R, G = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).G, B = ((System.Drawing.Color)Properties.Settings.Default["NodeConnectionNormalBrushColour"]).B, }), StrokeThickness = 3, } }; Canvas.SetZIndex(this._directionLines[0], 2); Canvas.SetZIndex(this._directionLines[1], 2); this._canvas.Children.Add(this._directionLines[0]); this._canvas.Children.Add(this._directionLines[1]); this.UpdatePosition(); }
public void SetCoordinates(Point p) { // Constrain the X Position p.X = Clamp((int)p.X, 0, this._canvas.ActualWidth - this._measurements.Width); // Constrain the Y Position p.Y = Clamp(p.Y, 0, this._canvas.ActualHeight - this._measurements.Height); this._measurements.X = p.X; this._measurements.Y = p.Y; p.X = Math.Max(0, p.X); p.Y = Math.Max(0, p.Y); this._node.Position = new System.Drawing.Point((int)p.X, (int)p.Y); Canvas.SetLeft(this, p.X); Canvas.SetTop(this, p.Y); // Fix the OneWayConnectionBug foreach (string name in this._graph.GetAllNodeNames()) { if (this._node.Name != name && this._graph.GetNode(name).IsDirectlyConnectedToNode(this._node)) { NodeEllipse.GetNodeEllipseByName(this._canvas, name).UpdateConnectionCoordinates(); } } this.UpdateConnectionCoordinates(); for (int i = 0; i < this._lines.Count; i++) { if (this._lines[i].ToNodeEllipse.GetNode().IsDirectlyConnectedToNode(this._node)) { this._lines[i].ToNodeEllipse.UpdateConnectionCoordinates(); } } }
private void InstantiateContent(Point p, int zIndex = 3) { Point Size = NodeEllipse.GetEllipseWidthAndHeightBasedOnText(this._node.Name, out int minDistanceToText, this._node); this._measurements = new Rect() { X = p.X, Y = p.Y, Width = Size.X, Height = Size.Y }; // Creating the Ellipse this._ellipse = new Ellipse() { Stroke = new SolidColorBrush( new System.Windows.Media.Color() { A = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseStrokeBrushColour"]).A, R = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseStrokeBrushColour"]).R, G = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseStrokeBrushColour"]).G, B = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseStrokeBrushColour"]).B, }), Fill = new SolidColorBrush( new System.Windows.Media.Color() { A = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseFillBrushColour"]).A, R = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseFillBrushColour"]).R, G = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseFillBrushColour"]).G, B = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseFillBrushColour"]).B, }), Width = this._measurements.Width, Height = this._measurements.Height }; // Setting the Ellipse's coordinates Canvas.SetLeft(this._ellipse, 0); Canvas.SetTop(this._ellipse, 0); Canvas.SetZIndex(this._ellipse, zIndex); // Creating the TextBlock this._textBlock = new TextBlock() { Text = this._node.Name, TextAlignment = TextAlignment.Center, Foreground = new SolidColorBrush( new System.Windows.Media.Color() { A = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseTextBrushColour"]).A, R = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseTextBrushColour"]).R, G = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseTextBrushColour"]).G, B = ((System.Drawing.Color)Properties.Settings.Default["NodeEllipseTextBrushColour"]).B, }), Width = Size.X - 2 * minDistanceToText, Height = Size.Y - 2 * minDistanceToText }; //// Applying the appropriate width and height of the TextBlock //this._textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); //this._textBlock.Arrange(new Rect(this._textBlock.DesiredSize)); // Setting the Textblock's coordinates Canvas.SetLeft(this._textBlock, minDistanceToText); Canvas.SetTop(this._textBlock, minDistanceToText); Canvas.SetZIndex(this._textBlock, zIndex + 1); // Drawing this.NodeEllipseCanvas.Children.Add(this._ellipse); this.NodeEllipseCanvas.Children.Add(this._textBlock); }