Einfache Rekursion: Anwenden desselben Layouts auf alle Untergraphen

Sie können dasselbe Layout anwenden, wenn die die folgenden beiden Bedingungen erfüllt sind:
  • Derselbe Layoutalgorithmus muss auf den Graphen der Ausgangsebene und alle seine Untergraphen angewendet werden.
  • Die Einstellungen des Layoutalgorithmus (d. h. die Layoutparameter) müssen für den Graphen der Ausgangsebene und alle seine Untergraphen identisch sein.
Die folgende Abbildung enthält ein Beispiel, in dem ein Baumstrukturlayout auf den Graphen der Ausgangsebene und alle seine Untergraphen angewendet wird. Darüber hinaus sind die Einstellungen des Algorithmus für Baumstrukturlayout für alle Graphen identisch: Die Anwendung benötigt beispielsweise keine Arbeitsrichtung im Graphen der Ausgangsebene und keine andere in den Untergraphen.
Beispiel eines
rekursiven Layouts eines verschachtelten Graphen, in dem auf der linken Seite Teil
1 mit Netz 1 mit zwei Untergraphen - Netz 1.1 und Netz 1.2 - und auf der rechten Seite Teil 2 mit Netz 2
mit zwei Untergraphen - Netz 2.1 und Netz 2.2 - gezeigt wird. Lesen Sie Teil 1 vor Teil 2. Netz 1 enthält einen Knoten auf der ersten Ebene, drei Knoten auf der zweiten Ebene und
zwei Knoten auf der dritten Ebene.
Die Knoten auf der zweiten und auf der dritten Ebene sind horizontal angelegt.
Knoten 1 ist mit allen Knoten auf der zweiten Ebene verlinkt. Der mittlere Knoten auf der zweiten Ebene
ist mit beiden Knoten auf der dritten Ebene verlinkt.
Netz 2 hat dasselbe Layout wie Netz 1. Netz 1.1 enthält einen Knoten auf der ersten Ebene, zwei Knoten auf der zweiten Ebene und drei Knoten auf der dritten Ebene.
Die Knoten auf der zweiten und auf der dritten Ebene sind horizontal angelegt.
Knoten 1 ist mit allen Knoten auf der zweiten Ebene verlinkt. Der Knoten auf der rechten Seite der zweiten Ebene ist mit allen
Knoten auf der dritten Ebene verlinkt.
Netz 2.1 hat dasselbe Layout wie Netz 1.1. Netz 1.2 enthält einen Knoten auf der ersten Ebene und drei Knoten auf der zweiten Ebene.
Die Knoten auf der zweiten Ebene sind horizontal angelegt.
Knoten 1 ist mit allen Knoten auf der zweiten Ebene verlinkt. Netz 2.2 hat dasselbe Layout wie Netz 1.2.
Beispiel für ein rekursives Layout eines verschachtelten Graphen
Der Abruf eines solchen rekursiven Layouts ist einfach. Sie müssen das Graphenlayout in der Diagram- bzw. Graph-Instanz der Ausgangsebene angeben und die Methode performGraphLayout aufrufen. Das Layout wird rekursiv ausgeführt, weil das Argument recursive der Methode standardmäßig auf true gesetzt ist.

Interner Mechanismus

Der interne Mechanismus basiert auf dem Prinzip, dass eine Layoutinstanz nur für einen einzigen Graphen verwendet und für die zugehörigen Untergraphen nicht wiederverwendet wird. Deshalb wird die Instanz des Baumstrukturlayouts automatisch mit der Methode ibm_ilog.graphlayout.GraphLayout.copy() "geklont".
Das Graphenlayout wird auf ein Graphenmodell angewendet, und dasselbe Prinzip gilt für die Graphenmodelle: Eine Graphenmodellinstanz wird nur für einen einzigen Graphen verwendet und für die zugehörigen Untergraphen nicht wiederverwendet.
Die Graphenmodelle für die Untergraphen werden von Aufrufen der Methode ibm_ilog.graphlayout.GraphLayout.copy() erstellt, die wiederum das Graphenmodell mit der Methode ibm_ilog.graphlayout.GraphLayout.getGraphModel() erstellt.
Alle diese Operationen werden automatisch auf transparente Art und Weise ausgeführt. Alles, was Sie tun müssen, ist, die Methode performGraphLayout mit dem Argument recursive, das den Wert true hat, oder ohne dieses Argument aufzurufen.

Dojo-Codebeispiel

Das folgende Codebeispiel veranschaulicht, wie ein einziger Layoutalgorithmus auf einen verschachtelten Graphen angewendet wird:
var diagram = dijit.byId("diagram");
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout();
diagram.attr("nodeLayout", treeLayout);
diagram.performGraphLayout(true);