Priorités des contraintes (HL)

Un ensemble de contraintes peut entraîner des conflits. Cela signifie que toutes les contraints peuvent ne pas être satisfaites en même temps. Par exemple, il est impossible de forcer deux noeuds au même niveau à l'aide d'une contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint tout en forçant en même temps l'un des noeuds à un niveau plus élevé que l'autre noeud à l'aide d'une contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalRelativeLevelConstraint. Dans ce cas, l'une des deux contraintes doit être ignorée lors de l'agencement.
En général, les conflits de contraintes sont résolus en ignorant les contraintes avec la priorité la plus faible tandis que les contraintes avec la priorité la plus élevée sont satisfaites. Les règles ci-après décrivent les priorités de contrainte en détail.
  • Les contraintes qui ont une influence sur le niveau dans lequel un noeud est placé sont appliquées avant les contraintes qui ont une influence sur la position du noeud au sein d'un niveau.
  • La contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalExtremityConstraint est convertie en une séquence de contraintes de priorité élevée.
    Par exemple, la contrainte d'extrémité avec le côté sud est convertie en plusieurs contraintes de même niveau et en plusieurs contraintes de niveau relatif.
  • Elles ne sont jamais en conflit entre elles. Elles dominent toutes les autres contraintes, même l'index de niveau spécifié.
  • La contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalLevelRangeConstraint (et la spécification d'index de niveau direct) a la deuxième priorité la plus élevée.
    Si deux noeuds sont forcés au même niveau mais ont des plages de niveau disjointes, la plage de niveaux est ignorée. Dans l'exemple suivant :
    layout.addConstraint(new ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint(node1,node2));
    layout.setSpecNodeLevelIndex(node1, 5);
    layout.setSpecNodeLevelIndex(node2, 10);
    
    node1 et node2 seront tous deux placés au niveau 5. La spécification en conflit : layout.setSpecNodeLevelIndex(node2, 10) est ignorée.
  • La contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativeLevelConstraint est dominée par la même contrainte de niveau, par la contrainte de plage de niveaux, et par la spécification directe d'index de niveau.
    Si plusieurs contraintes de niveau relatif sont en conflit entre elles, c'est celle qui a la priorité la plus élevée qui domine. Toutefois tous les liens sont implicitement considérés comme des contraintes de niveau relatif. Si des liens avec une priorité élevée force un noeud à un certain niveau, une contrainte de niveau relatif avec une plus faible priorité est ignorée.
  • La contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSwimLaneConstraint est toujours évaluée, même si le mode incrémentiel est activé.
    La contrainte a une priorité plus élevée que la contrainte de position relative et la contrainte côte à côte. Vous pouvez indiquer des contraintes côte à côte pour un groupe de noeuds qui appartient au même couloir, mais les contraintes côte à côte de noeuds de différents couloirs sont ignorées. Vous pouvez indiquer des contraintes de position relative entre les noeuds d'un même couloir. Vous pouvez également indiquer des contraintes de position relative entre un groupe entier de couloirs et un autre groupe de couloirs, ce qui permet de classer les couloirs de manière efficace. Cependant, les contraintes de position relative sont ignorées si cela nécessite une scission des couloirs. La contrainte de couloir domine les index de position spécifiés et les contraintes d'extrémité, ce qui signifie que si une contrainte de couloir est utilisée, vous ne pouvez indiquer des index de position ou des contraintes d'extrémité est/ouest pour aucun noeud.
  • La contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSideBySideConstraint est évaluée uniquement si les noeuds correspondants appartiennent au même niveau.
    En général, vous utilisez une contrainte de même niveau pour forcer les noeuds au même niveau, puis une contrainte côte à côte pour forcer les noeuds à un certain classement. Les contraintes côte à côte dominent les contraintes à position relative. Si plusieurs contraintes côte à côte sont en conflit, celle qui a la priorité la plus élevée domine les autres.
  • La contrainte ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativePositionConstraint est également évaluée uniquement si les noeuds correspondants appartiennent au même niveau.
    Elle est dominée par la contrainte côte à côte ; toutefois, les conflits avec les contraintes côte à côte sont rares. Si plusieurs contraintes à position relative sont en conflit, celle qui a la priorité la plus élevée domine les autres.