Table of Contents
This chapter presents the graph analysis algorithms provided by the yFiles.NET library and explains how to use them.
Internally, the analysis algorithms in the yFiles Basic library component are tailored to the basic algorithms graph structure. By means of the adapter mechanisms presented in Chapter 3, Using yFiles.NET Algorithms Functionality, however, the analysis algorithms can be used with an IGraph-based graph structure as well.
Adapter class YGraphAdapter
provides
services for necessary conversions prior and subsequent to running an analysis algorithm.
Most notably, it creates a copy of an IGraph that can be used with such algorithms:
Example 4.1. Basic preparation for calling an analysis algorithm
// 'graph' is of type yWorks.yFiles.UI.Model.IGraph. // Create the graph model adapter to get a proper analysis graph structure. YGraphAdapter graphAdapter = new YGraphAdapter(graph); // The YGraph property returns the yWorks.yFiles.Algorithms.Graph instance that // corresponds to the given IGraph above. bool isConnected = GraphChecker.IsConnected(graphAdapter.YGraph);
The following detailed example shows the invocation of an analysis algorithm with additional intermittent conversions and updates to the original IGraph.
Example 4.2. Graph analysis with an IGraph-based graph using adapter mechanisms
// 'graph' is of type yWorks.yFiles.UI.Model.IGraph.
// Create the graph model adapter to get a proper analysis graph structure.
YGraphAdapter graphAdapter = new YGraphAdapter(graph);
// Test if the graph is a tree.
if (Trees.IsTree(graphAdapter.YGraph)) {
// Explicitly set the first node from the node set as the root node of the
// tree.
// Direct the tree; i.e., revert those edges that point towards the root
// node.
EdgeList el = Trees.DirectTree(graphAdapter.YGraph,
graphAdapter.GetCopiedNode(graph.Nodes.First()));
// Transfer back the result.
IEnumerable<IEdge> el_igraph = graphAdapter.CreateEdgeEnumerable(el);
foreach (IEdge e in el_igraph) {
// Reverse the corresponding edges in the original IGraph.
graph.Reverse(e);
}
// Get the leaf nodes of the tree.
NodeList nl = Trees.GetLeafNodes(graphAdapter.YGraph, true);
IEnumerable<INode> nl_igraph = graphAdapter.CreateNodeEnumerable(nl);
}
|
Copyright ©2004-2011, yWorks GmbH. All rights reserved. |