9. TUTORIAL 004 : Create your first subgraph.

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;

        	
        	
        	

Source Code

 
#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;
}