Beispiel #1
0
        private void OnRemoveUnreachableNodes(IReadOnlyCollection <Node> nodes)
        {
            var mask = new AddRemoveTransitiveHull(Presentation)
            {
                Add = false
            }.Compute(nodes);

            mask.Invert(Presentation);

            Presentation.Masks().Push(mask);
        }
Beispiel #2
0
        // 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);
        }
Beispiel #3
0
        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;
            }
        }