Vorgabenprioritäten (HL)

Ein Satz von Vorgaben kann Konflikte verursachen. Das bedeutet, dass nicht alle Vorgaben gleichzeitig erfüllt werden können. Beispielsweise ist es nicht möglich, mit einer Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint zu erzwingen, dass zwei Knoten in derselben Ebene platziert werden, und gleichzeitig mit einer Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalRelativeLevelConstraint, dass einer der Knoten auf einer höheren Ebene als der andere platziert wird. In diesem Fall muss eine der beiden Vorgaben während des Layouts ignoriert werden.
Im Allgemeinen werden Vorgabenkonflikte gelöst, indem die Vorgaben mit der niedrigsten Priorität ignoriert werden, während die Vorgaben mit der höchsten Priorität erfüllt werden. Die folgenden Regeln erläutert die Vorgabenprioritäten ausführlich.
  • Die Vorgaben, die die Ebene beeinflussen, in der ein Knoten platziert wird, werden vor den Vorgaben angewendet, die die Position des Knotens innerhalb einer Ebene beeinflussen.
  • Die Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalExtremityConstraint wird in eine Folge von Vorgaben mit hoher Priorität umgesetzt.
    Die Grenzvorgabe für die südliche Seite wird beispielsweise in mehrere Vorgaben für die Verwendung derselben Ebene und in mehrere Vorgaben für relative Ebenenpositionierung umgesetzt.
  • Diese Vorgaben geraten nie in Konflikt miteinander. Sie dominieren alle anderen Vorgaben, selbst den angegebenen Ebenenindex.
  • Die Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalLevelRangeConstraint (und die direkte Spezifikation des Ebenenindex) hat die zweithöchste Priorität.
    Wenn die Platzierung von zwei Knoten in derselben Ebene erzwungen wird, aber nicht schneidende Ebenenbereiche für die beiden Knoten angegeben sind, wird der Ebenenbereich ignoriert. Sehen Sie sich das folgende Beispiel an:
    layout.addConstraint(new ibm_ilog.graphlayout.hierarchical.HierarchicalSameLevelConstraint(node1,node2));
    layout.setSpecNodeLevelIndex(node1, 5);
    layout.setSpecNodeLevelIndex(node2, 10);
    
    In diesem Beispiel werden node1 und node2 in der Ebene 5 platziert. Die widersprüchliche Spezifikation layout.setSpecNodeLevelIndex(node2, 10) wird ignoriert.
  • Die Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativeLevelConstraint wird von der Vorgabe für die Verwendung derselbe Ebene, von der Vorgabe für den Ebenenbereich und von der direkten Spezifikation der Ebenenindizes dominiert.
    Wenn mehrere relative Ebenenvorgaben miteinander in Konflikt stehen, dominiert die mit der höchsten angegebenen Priorität. Alle Links werden implizit jedoch auch als Vorgaben für die relative Positionierung verstanden. Wenn Links mit einer hohen Priorität die Platzierung eines Knotens auf einer bestimmten Ebene erzwingen, wird die Vorgabe für die relative Ebenenpositionierung mit der niedrigeren Priorität ignoriert.
  • Die Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSwimLaneConstraint wird immer ausgewertet, selbst im inkrementellen Modus.
    Die Vorgabe hat eine höhere Priorität als die Vorgabe für die relative Position und die Vorgabe für die Positionierung nebeneinander. Sie können Vorgaben für die Positionierung nebeneinander für eine Gruppe von Knoten festlegen, die zu derselben Bahn gehören, aber Vorgaben für die Positionierung nebeneinander für Knoten anderer Bahnen werden ignoriert. Sie können Vorgaben für die relative Positionierung zwischen Knoten derselben Bahn festlegen. Sie können auch Vorgaben für die relative Positionierung zwischen einer vollständigen Bahngruppe und einer anderen festlegen, womit effektiv die Bahnen sortiert werden. Vorgaben für die relative Position werden jedoch ignoriert, wenn sie dazu führen, dass die Bahnen auseinanderbrechen. Die Vorgabe für Bahnen dominiert die angegebenen Positionsindizes, d. h., wenn eine Vorgabe für Bahnen verwendet wird, können Sie weder Positionsindizes noch Vorgaben für westliche/östliche Grenzen für einen Knoten festlegen.
  • Die Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSideBySideConstraint wird nur ausgewertet, wenn die entsprechenden Knoten zu derselben Ebene gehören.
    Gewöhnlich verwenden Sie Vorgabe für die Verwendung derselben Ebene, um die Platzierung von Knoten auf derselben Ebene zu erzwingen, und anschließend Vorgabe für die Platzierung nebeneinander, um die Platzierung der Knoten in einer bestimmten Reihenfolge zu erzwingen. Die Vorgaben für die Positionierung nebeneinander dominieren die Vorgaben für die relative Positionierung. Wenn mehrere Vorgaben für die Positionierung nebeneinander miteinander in Konflikt stehen, dominiert die mit der höchsten angegebenen Priorität die anderen.
  • Die Vorgabe des Typs ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalRelativePositionConstraint wird ebenfalls nur ausgewertet, wenn die entsprechenden Knoten zu derselben Ebene gehören.
    Sie wird von der Vorgabe für die Positionierung nebeneinander dominiert. Konflikte mit Vorgaben für die Positionierung nebeneinander sind jedoch selten. Wenn mehrere Vorgaben für die relative Positionierung miteinander in Konflikt stehen, dominiert die mit der höchsten angegebenen Priorität die anderen.