protected override LayoutData CreateConfiguredLayoutData(GraphControl graphControl, ILayoutAlgorithm layout) { var layoutData = new BusRouterData(); var graph = graphControl.Graph; var graphSelection = graphControl.Selection; var scopePartial = ScopeItem == EnumScope.Partial; var busIds = layoutData.EdgeDescriptors.Mapper; foreach (var edge in graph.Edges) { var isFixed = scopePartial && !graphSelection.IsSelected(edge.GetSourceNode()) && !graphSelection.IsSelected(edge.GetTargetNode()); var id = GetBusId(edge, BusesItem); var descriptor = new BusDescriptor(id, isFixed) { RoutingPolicy = RoutingPolicyItem }; busIds[edge] = descriptor; } HashSet <object> selectedIds; switch (ScopeItem) { case EnumScope.Subset: layoutData.AffectedEdges.Delegate = graphSelection.IsSelected; break; case EnumScope.SubsetBus: selectedIds = new HashSet <object>(graphSelection .SelectedEdges .Select(edge => busIds[edge].BusId)); layoutData.AffectedEdges.Delegate = edge => selectedIds.Contains(busIds[edge].BusId); break; case EnumScope.Partial: selectedIds = new HashSet <object>(graphSelection .SelectedNodes .SelectMany(node => graph.EdgesAt(node)) .Select(edge => busIds[edge].BusId)); layoutData.AffectedEdges.Delegate = edge => selectedIds.Contains(busIds[edge].BusId); var hideNonOrthogonalEdgesLayoutData = new GenericLayoutData(); hideNonOrthogonalEdgesLayoutData.AddItemCollection(HideNonOrthogonalEdgesStage.SelectedNodesDpKey).Source = graphSelection.SelectedNodes; return(layoutData.CombineWith(hideNonOrthogonalEdgesLayoutData)); } return(layoutData); }