Utilización de un filtro de caras del nodo
Algunas aplicaciones requieren que los enlaces no estén
conectados a caras concretas de nodos determinados. Con el algoritmo
Diseño de enlaces, puede restringir la cara del nodo a la que puede
conectarse un enlace utilizando un filtro de caras del nodo.
Un filtro de caras del nodo es una clase que implementa
la interfaz de ibm_ilog.graphlayout.INodeSideFilter. Esta interfaz define el método siguiente:
accept(graphModel, link, origin, node, side)
Este método permite que el
link
de entrada conecte su
origin
o destino con la
side
de entrada del
node
de entrada. Por ejemplo, suponga que la aplicación requiere que para
los nodos finales de tipo
MyNode1, los enlaces
sólo pueden conectar su origen con la cara superior e inferior.
Para los nodos finales de tipo
MyNode2
, los enlaces sólo
pueden conectar su destino con la cara izquierda y derecha. Puede
obtener este resultado con el siguiente filtro de caras del nodo: dojo.declare('MyFilter', ibm_ilog.graphlayout.INodeSideFilter, { accept: function(graphModel, link, origin, node, side) { if (node instanceof MyNode1 && origin) return (side == ibm_ilog.graphlayout.Direction.TOP || side == ibm_ilog.graphlayout.Direction.BOTTOM); if (node instanceof MyNode2 && !origin) return (side == ibm_ilog.graphlayout.Direction.LEFT || side == ibm_ilog.graphlayout.Direction.RIGHT); return true; } });
Ejemplo de cómo establecer un filtro de caras del nodo
(algoritmo Diseño de enlaces)
Para establecer este filtro de caras del nodo:
Utilice el método
nodeSideFilter:
layout.setNodeSideFilter(new MyFilter());
Para eliminar el filtro de caras del nodo:
layout.nodeSideFilter(null);
Utilización de una interfaz de recuadro de nodo
Algunas aplicaciones requieren que el área útil de un
nodo no sea exactamente su recuadro delimitador. Por ejemplo, si el
nodo tiene una sombra, la sombra se incluye en el recuadro
delimitador. La sombra no se puede considerar como un obstáculo para
los enlaces. En este caso, el recuadro delimitador útil de un nodo es
menor.
Ejemplo de cómo utilizar una interfaz de recuadro de
nodo (algoritmo Diseño de enlaces)
Puede modificar el recuadro delimitador útil de un nodo
implementando una clase que implemente la ibm_ilog.graphlayout.INodeBoxProvider.
Esta interfaz define el método siguiente:
getBox(graphModel, node)
Al utilizar este método, puede obtener el recuadro
delimitador útil. Por ejemplo, para establecer una interfaz de
recuadro de nodo que devuelva un recuadro delimitador más pequeño
para todos los nodos de tipo
MyNode
, llame a: dojo.declare('MyNodeBoxProvider', ibm_ilog.graphlayout.INodeBoxProvider, { getBox: function(graphModel, node) { var rect:Rectangle = graphModel.getBounds(node); if (node is MyNode) { // for example, the size of the bounding box is reduced: rect.x += 4; rect.y += 4; rect.width -= 8; rect.height -= 8; } return rect; } });
Utilización de una interfaz de link connection box
De forma predeterminada, los puntos de conexión de los
enlaces se distribuyen en el borde del recuadro delimitador de los
nodos. A veces, puede ser necesario colocar los puntos de conexión en
un rectángulo que es menor o mayor que el recuadro delimitador. Por
ejemplo, cuando se muestran etiquetas debajo o encima de los nodos.
Utilización de una interfaz de
link connection box para modificar la
posición de puntos de conexión (algoritmo Diseño de enlaces)
Puede modificar la posición de los puntos de conexión de
los enlaces implementando una clase que implemente la
ibm_ilog.graphlayout.ILinkConnectionBoxProvider.
Es una subinterfaz de
INodeBoxProvider;
consulte
Utilización de una interfaz de recuadro de nodo .
Vuelve a definir el método:
getBox(graphModel, node)
Este método permite devolver el rectángulo útil en que
se colocan los puntos de conexión de los enlaces.
Además, la interfaz de
ibm_ilog.graphlayout.ILinkConnectionBoxProvider
define un segundo método:
getTangentialOffset(graphModel, node, nodeSide)
Este método se utiliza sólo en el diseño de enlaces
cortos. Para obtener más información, consulte
Utilización de una interfaz de recuadro de conexión de enlace.
En el diseño de enlaces largos, implemente el método devolviendo el
valor 0.