Agencement de graphe : utilisation de l'API

Dans une application qui ne fonctionne pas directement sur des graphes, les opérations telles que l'attachement ou le détachement d'une instance d'agencement de graphe doivent être effectuées explicitement.

Classe de base

La classe ibm_ilog.graphlayout.GraphLayout est la classe de base de tous les algorithmes d'agencement. Il s'agit d'une classe abstraite et, par conséquent, elle ne peut pas être utilisée directement. Vous devez utiliser une de ses sous-classes : ibm_ilog.graphlayout.hierarchical.HierarchicalLayout, ibm_ilog.graphlayout.tree.TreeLayout, ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout, ibm_ilog.graphlayout.shortlink.ShortLinkLayout, ibm_ilog.graphlayout.longlink.LongLinkLayout, ibm_ilog.graphlayout.random.RandomLayout, ibm_ilog.graphlayout.circular.CircularLayout, ibm_ilog.graphlayout.grid.GridLayout. Vous pouvez également créer vos propres sous-classes pour implémenter d'autres algorithmes d'agencement. Voir Définition de votre propre type d'agencement.
Même si les sous-classes de GraphLayout sont les seules à être utilisées directement pour obtenir les agencements, vous devez vous initier à cette classe car elle contient des méthodes héritées (ou substituées) par les sous-classes. Vous devez être familiarisé avec cette classe pour pouvoir créer vos propres sous-classes.
Diagramme de classes UML illustrant les sous-classes de la classe abstraite GraphLayout et les relations de certaines de ces classes avec les différents rapports d'agencement. Le diagramme de classes utilise les conventions UML classiques pour représenter les classes et les relations. Les classes qui implémentent les algorithmes d'agencement de graphe sont illustrées sur la gauche du diagramme. Les classes de rapports d'agencement figurent sur la droite.
Classe GraphLayout et ses sous-classes et ses relations avec les rapports d'agencement

Instanciation d'une sous-classe de la classe de base

La classe ibm_ilog.graphlayout.GraphLayout est une classe abstraite. Elle ne comporte aucun constructeur. Pour instancier une sous-classe, procédez comme indiqué dans l'exemple suivant :
var layout = new ibm_ilog.graphlayout.tree.TreeLayout();

Attachement ou détachement de l'agencement sur un graphe ou un diagramme

Dans IBM® ILOG® Dojo Diagrammer, vous devez attacher l'agencement à une instance de widget ibm_ilog.diagram.widget.Diagram ou à une instance ibm_ilog.diagram.Graph.
Si vous utilisez le widget Diagram, attachez l'agencement à l'aide des attributs nodeLayout ou linkLayout du widget Diagram. L'exemple suivant montre comment effectuer cela dans le balisage HTML du widget Diagram :
<div jsId="linkLayout" dojoType="ibm_ilog.graphlayout.shortlink.ShortLinkLayout"/>
<div id="diagram" dojoType="ibm_ilog.diagram.widget.Diagram" 
  nodeLayout="treeLayout"/>
L'attribut nodeLayout permet de définir le principal algorithme d'agencement de graphe qui placera les noeuds et les liens du Diagram. Vous pouvez également utiliser l'attribut linkLayout pour définir un second agencement qui routera uniquement les liens du Diagram. Consultez l'exemple suivant :
<div jsId="linkLayout" dojoType="ibm_ilog.graphlayout.shortlink.ShortLinkLayout"/>
<div id="diagram" dojoType="ibm_ilog.diagram.widget.Diagram" 
  linkLayout="linkLayout"/>
Vous pouvez également définir l'agencement de noeud ou de lien d'un Diagram en JavaScript :
var diagram = dijit.byId("diagram");
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout();
var linkLayout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout();
diagram.attr("nodeLayout", treeLayout);
diagram.attr("linkLayout", linkLayout);
Si vous travaillez directement avec l'objet Graph (autrement dit, vous n'utilisez pas le widget Diagram, mais vous travaillez directement avec les API GFX), vous devez utiliser les méthodes setNodeLayout ou setLinkLayout pour attacher l'agencement au Graph:
var graph = surface.createGraph();
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout();
var linkLayout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout();
graph.setNodeLayout(treeLayout);
graph.setLinkLayout(linkLayout);

Exécution d'un agencement

Une fois l'algorithme d'agencement attaché à une instance Diagram ou Graph, utilisez la méthode performGraphLayout de l'instance Diagram ou Graph pour lancer l'agencement.
diagram.performGraphLayout();
ou
graph.performGraphLayout();
La méthode abstraite protégée, layout(boolean redraw), de la sous-classe GraphLayout, est alors appelée. Cela signifie que les sous-classes qui implémentent cette méthode prennent le contrôle. L'implémentation calcule l'agencement et déplace les noeuds vers de nouveaux emplacements ou remodèle les liens, ou déplace les noeuds et remodèle les liens.
La méthode getLayoutReport de l'agencement de graphe renvoie une instance de ibm_ilog.graphlayout.GraphLayoutReport (ou d'une sous-classe) qui contient des informations sur le comportement de l'algorithme d'agencement. Elle vous indique si l'algorithme a été exécuté normalement ou si un cas prédéfini particulier s'est produit. (Pour obtenir une description plus détaillée du rapport d'agencement, voir Utilisation d'un rapport d'agencement de graphe.)

Autres informations

Vous trouverez des informations supplémentaires sur la classe ibm_ilog.graphlayout.GraphLayout dans les sections suivantes :
Pour obtenir des détails sur ibm_ilog.graphlayout.GraphLayout et sur d'autres classes d'agencement de graphe, voir la IBM® ILOG® Dojo Diagrammer documentation de référence sur les API.