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:
- Parámetros genéricos: consulte Parámetros y características de la clase base
- Notificación de progreso: consulte Utilización de las escuchas de sucesos
- Posibilidad de aplicar el diseño por separado para los componentes conectados de un gráfico no conexo: consulte Diseño de componentes conectados de un gráfico no conexo.
- Posibilidad de diseñar gráficos anidados; consulte Diseños anidados
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; }