Contraintes d'agencement pour l'agencement hiérarchique (HL)

L'algorithme d'agencement hiérarchique prend en charge les contraintes de position relative sur les noeuds. Ce type de contrainte est une règle définissant la manière dont un noeud particulier (ou un groupe de noeuds) doit être placé par rapport aux autres noeuds. Ces contraintes influencent les positions relatives. Par exemple, vous pouvez forcer le noeud A à être sur le côté gauche du noeud B, de sorte que la position de A soit expressément relative à la position de B. Il est en théorie possible d'indiquer des contraintes contradictoires : si vous indiquez que le noeud A doit être sur le côté gauche deB et que B doit être sur le côté gauche de A, alors ces contraintes ne sont pas réalisables en même temps. Si A est sur le coté gauche de B, B doit être sur le côté droit de A. L'algorithme d'agencement hiérarchique essaie de détecter et de résoudre les conflits de contrainte automatiquement. Il ignore les contraintes qui sont irréalisables. Etant donné que la résolution de contrainte automatique est une opération très longue, il est recommandé de spécifier autant que possible des contraintes non conflictuelles.
Les contraints ne doivent être utilisées que si le mode incrémentiel est désactivé. En fait, le mode incrémentiel est mis en oeuvre à l'aide de contraintes supplémentaires qui sont ajoutées en interne. De fait, si vous utilisez des contraintes au cours du mode incrémentiel, il est très probable que le système détecte un si grand nombre de conflits de contrainte que vous obtenez des résultats inattendus.
Les contraintes doivent être utilisées avec précaution. Plus il y a de contraintes, plus il est difficile de calculer un agencement. Par conséquent, l'agencement produit peut comporter davantage d'intersections de liens être moins équilibré qu'un graphe sans contraintes.
Chaque type de contrainte est représenté par une sous-classe de ibm_ilog.graphlayout.hierarchical.HierarchicalConstraint. Les types de contraintes disponibles sont les suivants :
ibm_ilog.graphlayout.hierarchical.HierarchicalLevelRangeConstraint
Force un noeud dans une plage de certains niveaux.
ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint
Force deux noeuds au même niveau.
ibm_ilog.graphlayout.hierarchical.HierarchicalRelativeLevelConstraint
Force un noeud à un niveau supérieur/inférieur d'un autre noeud.
ibm_ilog.graphlayout.hierarchical.HierarchicalGroupSpreadConstraint
Force un groupe de noeuds à des niveaux qui ne sont rien d'autres qu'une valeur d'étalement spécifiée à part.
ibm_ilog.graphlayout.hierarchical.HierarchicalRelativePositionConstraint
Force un noeud à une position supérieure/inférieure à celle d'un autre noeud du même niveau.
ibm_ilog.graphlayout.hierarchical.HierarchicalSideBySideConstraint
Force deux noeuds de même niveau à se placer côte à côte.
ibm_ilog.graphlayout.hierarchical.HierarchicalExtremityConstraint
Force un noeud au premier ou dernier niveau, ou à la première ou dernière position au sein d'un niveau.
ibm_ilog.graphlayout.hierarchical.HierarchicalSwimLaneConstraint
Force un groupe de noeuds dans la même zone de couloir rectangulaire.
Note
Lorsque l'agencement hiérarchique est utilisé pour agencer des noeuds et des liens dans un composant Diagram qui contient des objets de couloir (instances ibm_ilog.graphlayout.SwimLane), des instances ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSwinLaneConstraint sont automatiquement créées pour placer les objets enfants de couloir dans la même zone de couloir, et pour dimensionner correctement les couloirs.