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.