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)); }
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)); }