Beispiel für einen angepassten Layoutalgorithmus

Wenn die im Produkt bereitgestellten Layoutalgorithmen Ihre Anforderungen nicht erfüllen, können Sie eigene Layoutalgorithmen entwickeln, indem Sie Unterklassen von ibm_ilog.graphlayout.GraphLayout bilden.
Wenn eine Unterklasse von ibm_ilog.graphlayout.GraphLayout erstellt wird, entspricht diese automatisch dem generischen Layout-Framework von IBM® ILOG® Dojo Diagrammer und kann dessen Infrastruktur nutzen, z. B.:

Beispiel

Zur Veranschaulichung der grundlegenden Ideen für das Definieren eines neuen Layouts zeigt das folgende einfache Beispiel eine mögliche Implementierung des einfachsten Layoutalgorithmus, des Zufallslayouts (RandomLayout). Die neue Layoutklasse erhält den Namen MyRandomLayout.
Der folgende Code zeigt den Entwurf der Klasse:
        dojo.declare("MyRandomLayout", ibm_ilog.graphlayout.GraphLayout, {
            copy: function(){
                return new MyRandomLayout(this);
            },
            copyParameters: function(source){
                this.inherited(arguments);
                // Now copy any specific parameters from this class...
            },
            layout: function(){
                // ...
            }
        });
Die Methode copy wird implementiert, weil sie für das Anlegen eines verschachtelten Graphen verwendet wird (siehe Verschachtelte Layouts).
Anschließend wird die Methode layout() der Basisklasse wie folgt implementiert:
            layout: function(){
                var model = this.getGraphModel();
                var report = this.getLayoutReport();
                var rect = this.getCalcLayoutRegion();
                var xMin = rect.x;
                var yMin = rect.y;
                var xMax = rect.x + rect.width;
                var yMax = rect.y + rect.height;
                var nds = model.getNodes();
                var count = nds.length;
                for (var i = 0; i < count; i++) {
                    var node = nds[i];
                    if (this.isPreserveFixedNodes() && this.isFixed(node)) 
                        return;
                    var x = xMin + (xMax - xMin) * Math.random();
                    var y = yMin + (yMax - yMin) * Math.random();
                    model.moveNode(node, x, y);
                    this.callLayoutStepPerformedIfNeeded();
                }
                report.code = ibm_ilog.graphlayout.GraphLayoutReport.LAYOUT_DONE;
            }