/// <summary>
 /// Initializes a new instance of the <see cref="DoubleTreeLayoutAlgorithm{TVertex,TEdge,TGraph}"/> class.
 /// </summary>
 /// <param name="visitedGraph">Graph to layout.</param>
 /// <param name="verticesSizes">Vertices sizes.</param>
 /// <param name="parameters">Optional algorithm parameters.</param>
 /// <param name="selectedVertex">Root vertex.</param>
 public DoubleTreeLayoutAlgorithm(
     [NotNull] TGraph visitedGraph,
     [NotNull] IDictionary <TVertex, Size> verticesSizes,
     [NotNull] TVertex selectedVertex,
     [CanBeNull] DoubleTreeLayoutParameters parameters = null)
     : this(visitedGraph, null, verticesSizes, selectedVertex, parameters)
 {
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="DoubleTreeLayoutAlgorithm{TVertex,TEdge,TGraph}"/> class.
        /// </summary>
        /// <param name="visitedGraph">Graph to layout.</param>
        /// <param name="verticesPositions">Vertices positions.</param>
        /// <param name="verticesSizes">Vertices sizes.</param>
        /// <param name="parameters">Optional algorithm parameters.</param>
        /// <param name="selectedVertex">Root vertex.</param>
        public DoubleTreeLayoutAlgorithm(
            [NotNull] TGraph visitedGraph,
            [CanBeNull] IDictionary <TVertex, Point> verticesPositions,
            [NotNull] IDictionary <TVertex, Size> verticesSizes,
            [NotNull] TVertex selectedVertex,
            [CanBeNull] DoubleTreeLayoutParameters parameters = null)
            : base(visitedGraph, verticesPositions, parameters)
        {
            _root = selectedVertex ?? throw new ArgumentNullException(nameof(selectedVertex));
            if (!visitedGraph.ContainsVertex(selectedVertex))
            {
                throw new ArgumentException("The provided vertex is not part of the graph.", nameof(selectedVertex));
            }

            _verticesSizes = verticesSizes ?? throw new ArgumentNullException(nameof(verticesSizes));
        }
 public DoubleTreeLayoutAlgorithm(TGraph visitedGraph, IDictionary <TVertex, Point> vertexPositions, IDictionary <TVertex, Size> vertexSizes, DoubleTreeLayoutParameters oldParameters, TVertex selectedVertex)
     : base(visitedGraph, vertexPositions, oldParameters)
 {
     root             = selectedVertex;
     this.vertexSizes = (vertexSizes ?? new Dictionary <TVertex, Size>());
 }