Bevisuali.UX.Graph.GraphInspector.SetGraphLayout C# (CSharp) Method

SetGraphLayout() public method

Provides a graph layout for this inspector to use.
public SetGraphLayout ( Point>.IDictionary layout ) : void
layout Point>.IDictionary
return void
        public void SetGraphLayout(IDictionary<string, Point> layout)
        {
            // Shift layout into view.
            Point vertexShift;
            Size canvasSize;
            if (layout.Any())
            {
                double minX = double.MaxValue;
                double minY = double.MaxValue;
                double maxX = double.MinValue;
                double maxY = double.MinValue;
                foreach (var point in layout.Values)
                {
                    minX = Math.Min(point.X, minX);
                    minY = Math.Min(point.Y, minY);
                    maxX = Math.Max(point.X, maxX);
                    maxY = Math.Max(point.Y, maxY);
                }

                vertexShift = new Point(minX, minY).Multiply(-1);
                canvasSize = new Size(maxX - minX, maxY - minY);
            }
            else
            {
                vertexShift = new Point();
                canvasSize = new Size();
            }

            // Pad position and canvas size.
            const float Padding = 300;
            vertexShift = vertexShift.Add(new Point(Padding * 0.5, Padding * 0.5));
            canvasSize.Height += Padding;
            canvasSize.Width += Padding;

            // Update positions.
            foreach (var node in _nodes)
            {
                FRandomVariable variable = node.Tag as FRandomVariable;
                Point position;
                if (layout.TryGetValue(variable.Name, out position))
                {
                    node.Position = position.Add(vertexShift);
                }
                else
                {
                    node.Position = new Point();
                }
            }

            // Update canvas.
            xRoot.Width = canvasSize.Width * xRootScaleTransform.ScaleX;
            xRoot.Height = canvasSize.Height * xRootScaleTransform.ScaleY;

            // Edge thickness.
            foreach (var edge in _edges)
            {
                edge.LineThickness = this._layoutOptions.EdgeThickness;
            }

            // Sizes.
            this.UpdateNodeSizes();
        }