/// <summary>
        /// Removes the overlap by using the default settings.
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="nodeSeparation"></param>
        public static void RemoveOverlaps(Node[] nodes, double nodeSeparation)
        {
            var settings = new OverlapRemovalSettings {
                RandomizeAllPointsOnStart = true,
                NodeSeparation            = nodeSeparation
            };
            var mst = new GTreeOverlapRemoval(settings, nodes);

            mst.RemoveOverlaps();
        }
        public static void RemoveOverlapsForLayers(Node[] nodes, Size[] sizesOnLayers)
        {
            var settings = new OverlapRemovalSettings
            {
                RandomizeAllPointsOnStart = true,
            };
            var mst = new GTreeOverlapRemoval(settings, nodes, sizesOnLayers);

            mst.RemoveOverlaps();
        }
        void FindOverlapsWithInterval(int i)
        {
            if (_intervalTree == null)
            {
                return;
            }
            var interval = GetInterval(i);

            foreach (int j in _intervalTree.GetAllIntersecting(interval))
            {
                var tuple = GTreeOverlapRemoval.GetIdealEdgeLength(i, j,
                                                                   _nodePositions[i], _nodePositions[j], _nodeSizes, _forLayers);

                if (!(tuple.Item3 > 1))
                {
                    return;
                }
                _proximityEdges.Add(tuple);
                _numberOfOverlaps++;
            }
        }