Class mxMedianHybridCrossingReduction

java.lang.Object
com.mxgraph.layout.hierarchical.stage.mxMedianHybridCrossingReduction
All Implemented Interfaces:
mxHierarchicalLayoutStage

public class mxMedianHybridCrossingReduction extends Object implements mxHierarchicalLayoutStage
Performs a vertex ordering within ranks as described by Gansner et al 1993
  • Field Details

    • layout

      protected mxHierarchicalLayout layout
      Reference to the enclosing layout algorithm
    • maxIterations

      protected int maxIterations
      The maximum number of iterations to perform whilst reducing edge crossings
    • nestedBestRanks

      protected mxGraphAbstractHierarchyCell[][] nestedBestRanks
      Stores each rank as a collection of cells in the best order found for each layer so far
    • currentBestCrossings

      protected int currentBestCrossings
      The total number of crossings found in the best configuration so far
    • iterationsWithoutImprovement

      protected int iterationsWithoutImprovement
    • maxNoImprovementIterations

      protected int maxNoImprovementIterations
  • Constructor Details

    • mxMedianHybridCrossingReduction

      public mxMedianHybridCrossingReduction(mxHierarchicalLayout layout)
      Constructor that has the roots specified
  • Method Details

    • execute

      public void execute(Object parent)
      Performs a vertex ordering within ranks as described by Gansner et al 1993
      Specified by:
      execute in interface mxHierarchicalLayoutStage
    • calculateCrossings

      private int calculateCrossings(mxGraphHierarchyModel model)
      Calculates the total number of edge crossing in the current graph
      Parameters:
      model - the internal model describing the hierarchy
      Returns:
      the current number of edge crossings in the hierarchy graph model in the current candidate layout
    • calculateRankCrossing

      protected int calculateRankCrossing(int i, mxGraphHierarchyModel model)
      Calculates the number of edges crossings between the specified rank and the rank below it
      Parameters:
      i - the topmost rank of the pair ( higher rank value )
      model - the internal hierarchy model of the graph
      Returns:
      the number of edges crossings with the rank beneath
    • transpose

      private void transpose(int mainLoopIteration, mxGraphHierarchyModel model)
      Takes each possible adjacent cell pair on each rank and checks if swapping them around reduces the number of crossing
      Parameters:
      mainLoopIteration - the iteration number of the main loop
      model - the internal model describing the hierarchy
    • weightedMedian

      private void weightedMedian(int iteration, mxGraphHierarchyModel model)
      Sweeps up or down the layout attempting to minimise the median placement of connected cells on adjacent ranks
      Parameters:
      iteration - the iteration number of the main loop
      model - the internal model describing the hierarchy
    • medianRank

      private void medianRank(int rankValue, boolean downwardSweep)
      Attempts to minimise the median placement of connected cells on this rank and one of the adjacent ranks
      Parameters:
      rankValue - the layer number of this rank
      downwardSweep - whether or not this is a downward sweep through the graph
    • medianValue

      private double medianValue(Collection<mxGraphAbstractHierarchyCell> connectedCells, int rankValue)
      Calculates the median rank order positioning for the specified cell using the connected cells on the specified rank
      Parameters:
      connectedCells - the cells on the specified rank connected to the specified cell
      rankValue - the rank that the connected cell lie upon
      Returns:
      the median rank ordering value of the connected cells