Ejemplo de algoritmo de diseño personalizado

Si los algoritmos de diseño proporcionados en el producto no satisfacen sus necesidades, puede desarrollar sus propios algoritmos de diseño mediante subclases de ibm_ilog.graphlayout.GraphLayout.
Cuando se crea una subclase de ibm_ilog.graphlayout.GraphLayout se ajusta automáticamente a la infraestructura de diseño genérica de IBM® ILOG® Dojo Diagrammer y se beneficia de su infraestructura como, por ejemplo:

Ejemplo

Para ilustrar las ideas básicas para definir un diseño nuevo, en el siguiente ejemplo se muestra una implementación del algoritmo de diseño más sencillo posible, el Diseño aleatorio. La clase de diseño nueva se denomina MyRandomLayout.
En el código siguiente se muestra el esqueleto de la clase:
        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(){
                // ...
            }
        });
Se implementa el método copy, porque se utiliza al diseñar un gráfico anidado (consulte Diseños anidados).
A continuación, se implementa el método layout() de la clase base del modo siguiente:
            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;
            }