10. TUTORIAL 004 : Create your first subgraph.
Prev | Chapter 3. Tulip Library | Next

## 10. 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 are 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 subgraphs :

      //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, displayed with tulip :

We can check that by iterating on our graph's subgraphs using the function `Iterator< Graph * >* 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 004
     *
     * Create a graph and three subgraphs,
     * 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;
    }

Prev | Up | Next
9. TUTORIAL 003 : Properties | Home | 11. TUTORIAL 005 : Properties and subgraphs