private void OnRemoveUnreachableNodes(IReadOnlyCollection <Node> nodes) { var mask = new AddRemoveTransitiveHull(Presentation) { Add = false }.Compute(nodes); mask.Invert(Presentation); Presentation.Masks().Push(mask); }
// Show only nodes which can reach the target cluster private GraphPresentation ReduceGraph(Cluster targetCluster, RelaxedGraphBuilder builder) { var presentation = new GraphPresentation(); presentation.Graph = builder.Graph; var algo = new AddRemoveTransitiveHull(presentation); algo.Add = false; algo.Reverse = true; var mask = algo.Compute(targetCluster.Nodes); mask.Invert(presentation); presentation.Masks().Push(mask); presentation.Masks().Push(new RemoveNodesWithoutSiblings(presentation).Compute()); return(presentation); }
private void SelectReachables(IReadOnlyCollection <Node> nodes) { // pass "Add = false" as we want the transitive hull of the visible nodes var mask = new AddRemoveTransitiveHull(Presentation) { Add = false }.Compute(nodes); var selection = Presentation.GetPropertySetFor <Selection>(); var edges = Presentation.GetModule <ITransformationModule>().Graph.Edges .Where(Presentation.Picking.Pick) // check for "false" as we have a "hide" mask .Where(e => mask.IsSet(e.Source) == false && mask.IsSet(e.Target) == false); foreach (var e in edges) { selection.Get(e.Id).IsSelected = true; selection.Get(e.Source.Id).IsSelected = true; selection.Get(e.Target.Id).IsSelected = true; } }