This tutorial will teach you how to create subgraphs. At the end of it, we will have a hierarchy of 3 graphs.
Before anything consider the following function that creates 3 nodes and 3 edges (same as in tutorial 001 ):
void buildGraph(Graph *graph) { //add three nodes node n1=graph->addNode(); node n2=graph->addNode(); node n3=graph->addNode(); //add three edges graph->addEdge(n2,n3); graph->addEdge(n1,n2); graph->addEdge(n3,n1); }
The creation of a subgraph is quite simple. You just have to use the function Graph * addSubGraph ( BooleanProperty * selection = 0)
. It will create and return a new SubGraph of the graph. The elements of the new SubGraph is those selected in the selection (selection associated value equals true) if there is no selection an empty SubGraph is returned.
In the following sample we create 3 empty subgraph :
//build three empty subgraphs Graph *subgraph0=graph->addSubGraph(); Graph *subgraph1=graph->addSubGraph(); Graph *subgraph2=subgraph1->addSubGraph();
We now need to create some nodes and edges :
//add node inside subgraphs buildGraph(subgraph0); buildGraph(subgraph1); buildGraph(subgraph2);
Following is the hierarchy we have just created, opened with tulip :
We can check that by iterating on our graph's subgraphs using the function Graph::getSubGraphs()
:
//iterate subgraph (0 and 1 normally ) and output them Iterator<Graph *> *itS=graph->getSubGraphs(); while (itS->hasNext()) cout << itS->next() << endl; delete itS;
#include <iostream> #include <tulip/Graph.h> /** * Tutorial 003 * * Create a graph and three sub graphq * display all the structure using iterators */ using namespace std; using namespace tlp; void buildGraph(Graph *graph) { //add three nodes node n1=graph->addNode(); node n2=graph->addNode(); node n3=graph->addNode(); //add three edges graph->addEdge(n2,n3); graph->addEdge(n1,n2); graph->addEdge(n3,n1); } int main() { //create an empty graph Graph *graph=tlp::newGraph(); //build the graph buildGraph(graph); //build two empty subgraph Graph *subgraph0=graph->addSubGraph(); Graph *subgraph1=graph->addSubGraph(); Graph *subgraph2=subgraph1->addSubGraph(); //add node inside subgraphs buildGraph(subgraph0); buildGraph(subgraph1); buildGraph(subgraph2); //iterate subgraph (0 and 1 normally ) and output them Iterator<Graph *> *itS=graph->getSubGraphs(); while (itS->hasNext()) cout << itS->next() << endl; delete itS; delete graph; return EXIT_SUCCESS; }