Um Algoritmo de Layout Customizado de Amostra

Se os algoritmos de layout fornecidos com o produto não atenderem às suas necessidades, será possível desenvolver seus próprios algoritmos de layout definindo ibm_ilog.graphlayout.GraphLayout como subclasse.
Quando uma subclasse de ibm_ilog.graphlayout.GraphLayout é criada, ela se ajusta automaticamente à estrutura de layout genético do IBM® ILOG® Dojo Diagrammer e se beneficia de sua infraestrutura, por exemplo:

Exemplo

Para ilustrar as ideias básicas para definir um novo layout, o seguinte exemplo simples mostra uma possível implementação do algoritmo de layout mais simples, o Layout Aleatório. A nova classe de layout é chamada MyRandomLayout.
O código a seguir mostra o esqueleto da classe:
        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(){
                // ...
            }
        });
O método copy é implementado, porque ele é usado ao organizar um gráfico aninhado (consulte Layouts Aninhados).
Em seguida, o método layout() da classe base é implementado da seguinte forma:
            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;
            }