private static IEnumerable<IList<Node>> FindCycles(HashSet<Node> unvisited, Node current, HashSet<Node> visited) { foreach (var inNode in current.In.Select(edge => edge.Source)) { if (visited.Contains(inNode)) { yield return new List<Node> { inNode, current }; } else { var visitedCopy = new HashSet<Node>(visited); visitedCopy.Add(inNode); unvisited.Remove(inNode); foreach (var cycle in FindCycles(unvisited, inNode, visitedCopy)) { if (cycle.First() != cycle.Last()) { cycle.Add(current); } yield return cycle; } } } }
public void Add( Node node ) { if( !TryAdd( node ) ) { throw new ArgumentException( "Node already exists: " + node.Id ); } }
public Edge TryAddEdge( string sourceNodeId, string targetNodeId ) { var sourceNode = Graph.FindNode( sourceNodeId ); if( sourceNode == null ) { // support just adding edges - add nodes implicitly sourceNode = new Node( sourceNodeId ); myGraph.TryAdd( sourceNode ); } var targetNode = Graph.FindNode( targetNodeId ); if( targetNode == null ) { // support just adding edges - add nodes implicitly targetNode = new Node( targetNodeId ); myGraph.TryAdd( targetNode ); } var edge = new Edge( sourceNode, targetNode ); if( !myGraph.TryAdd( edge ) ) { return null; } edge.Source.Out.Add( edge ); edge.Target.In.Add( edge ); return edge; }
private void OnEventFocused(Node node) { if (node != null) { Navigation.NavigateTo(node); //myGraphViewer.GraphVisual.Presentation.GetModuleFor<SelectionState>().Get( selectedNode.Id ).IsSelected = true; } }
public bool Pick( Node node ) { if( !myCache.ContainsKey( node.Id ) ) { myCache[ node.Id ] = myPicking.Pick( node ); } return myCache[ node.Id ]; }
public Edge( Node source, Node target ) { Contract.RequiresNotNull( source, "source" ); Contract.RequiresNotNull( target, "target" ); Source = source; Target = target; Id = CreateId( Source.Id, Target.Id ); }
public override bool? IsSet( Node node ) { if( myValues.Contains( node.Id ) ) { return IsShowMask; } else { return null; } }
public void Set( Node node ) { if( myValues.Contains( node.Id ) ) { return; } myValues.Add( node.Id ); RaisePropertyChanged( "Values" ); }
public bool TryAdd( Node node ) { if( myNodes.ContainsKey( node.Id ) ) { return false; } myNodes.Add( node.Id, node ); return true; }
public Node TryAddNode( string nodeId ) { var node = new Node( nodeId ); if( !myGraph.TryAdd( node ) ) { return null; } return node; }
public void Execute( Node node ) { var nodesToShow = GetNodeWithSiblings( node.Id ); var mask = new NodeMask(); mask.Set( nodesToShow ); var caption = myPresentation.GetPropertySetFor<Caption>().Get( node.Id ); mask.Label = "Siblings of " + caption.DisplayText; var module = myPresentation.GetModule<INodeMaskModule>(); module.Push( mask ); }
public void Execute( Node node ) { var nodesToHide = myPresentation.Graph.Nodes .Where( n => n.Id == node.Id ); var mask = new NodeMask(); mask.IsShowMask = false; mask.Set( nodesToHide ); var caption = myPresentation.GetPropertySetFor<Caption>().Get( node.Id ); mask.Label = caption.DisplayText; var module = myPresentation.GetModule<INodeMaskModule>(); module.Push( mask ); }
public void Execute( Node node ) { var nodesToShow = myPresentation.Graph.Edges .Where( e => e.Source.Id == node.Id ) .Select( e => e.Target ) .ToList(); nodesToShow.Add( node ); var mask = new NodeMask(); mask.Set( nodesToShow ); var caption = myPresentation.GetPropertySetFor<Caption>().Get( node.Id ); mask.Label = "Outgoing of " + caption.DisplayText; var module = myPresentation.GetModule<INodeMaskModule>(); module.Push( mask ); }
public bool Pick( Node node ) { var masks = myPresentation.GetModule<INodeMaskModule>().Items .Where( s => s.IsApplied ); foreach( var mask in masks ) { var hitValue = mask.IsSet( node ); if( hitValue == null ) { // this mask contains no information about the given node continue; } return hitValue.Value; } // by default - if nothing else is calculated based on the masks - all nodes are visible return true; }
public NodeWithCaption( Node node, string displayText ) { Node = node; DisplayText = displayText; }
public void Unset( Node node ) { myValues.Remove( node.Id ); RaisePropertyChanged( "Values" ); }
public override bool? IsSet( Node node ) { return IsShowMask; }
public NodeVisual( Node owner, IGraphPresentation presentation ) { Owner = owner; myPresentation = presentation; }