コード例 #1
0
        private int CalculateInsertionIndexBasedOnParent(int targetLayer, LayoutVertexBase parentVertex,
                                                         IReadOnlyLayoutVertexLayers layers)
        {
            var parentLayer        = layers.GetLayer(parentVertex);
            var parentIndexInLayer = layers.GetIndexInLayer(parentVertex);

            var followingParent = GetFollowingParent(parentLayer, parentIndexInLayer, layers);

            if (followingParent == null)
            {
                return(layers.GetLayer(targetLayer).Count);
            }

            var firstChildOfFollowingParent = _properLayoutGraph.GetPrimaryChildren(followingParent)
                                              .Where(layers.HasLocation).OrderBy(layers.GetIndexInLayer).First();

            return(layers.GetIndexInLayer(firstChildOfFollowingParent));
        }
コード例 #2
0
        private int DetermineIndexInLayer(LayoutVertexBase vertex, int layerIndex, IReadOnlyLayoutVertexLayers layers)
        {
            var layer = layers.GetLayer(layerIndex);

            var parentVertex = _properLayoutGraph.GetPrimaryParent(vertex);

            if (parentVertex == null)
            {
                return(layer.Count);
            }

            var siblingsInLayer = GetPrimarySiblingsInLayer(vertex, layerIndex, layers)
                                  .OrderBy(layer.IndexOf).ToArray();

            if (siblingsInLayer.Any())
            {
                return(CalculateInsertionIndexBasedOnSiblings(vertex, siblingsInLayer, layers));
            }

            return(CalculateInsertionIndexBasedOnParent(layerIndex, parentVertex, layers));
        }