Class mxCoordinateAssignment

  • All Implemented Interfaces:

    public class mxCoordinateAssignment
    extends java.lang.Object
    implements mxHierarchicalLayoutStage
    Sets the horizontal locations of node and edge dummy nodes on each layer. Uses median down and up weighings as well as heuristics to straighten edges as far as possible.
    • Field Detail

      • intraCellSpacing

        protected double intraCellSpacing
        The minimum buffer between cells on the same rank
      • interRankCellSpacing

        protected double interRankCellSpacing
        The minimum distance between cells on adjacent ranks
      • parallelEdgeSpacing

        protected double parallelEdgeSpacing
        The distance between each parallel edge on each ranks for long edges
      • vertexConnectionBuffer

        protected double vertexConnectionBuffer
        The buffer on either side of a vertex where edges must not connect.
      • maxIterations

        protected int maxIterations
        The number of heuristic iterations to run
      • prefHozEdgeSep

        protected int prefHozEdgeSep
        The preferred horizontal distance between edges exiting a vertex
      • prefVertEdgeOff

        protected int prefVertEdgeOff
        The preferred vertical offset between edges exiting a vertex
      • minEdgeJetty

        protected int minEdgeJetty
        The minimum distance for an edge jetty from a vertex
      • channelBuffer

        protected int channelBuffer
        The size of the vertical buffer in the center of inter-rank channels where edge control points should not be placed
      • jettyPositions

        protected java.util.Map<mxGraphHierarchyEdge,​double[]> jettyPositions
        Map of internal edges and (x,y) pair of positions of the start and end jetty for that edge where it connects to the source and target vertices. Note this should technically be a WeakHashMap, but since JS does not have an equivalent, housekeeping must be performed before using. i.e. check all edges are still in the model and clear the values. Note that the y co-ord is the offset of the jetty, not the absolute point
      • orientation

        protected int orientation
        The position of the root ( start ) node(s) relative to the rest of the laid out graph
      • initialX

        protected double initialX
        The minimum x position node placement starts at
      • limitX

        protected double limitX
        The maximum x value this positioning lays up to
      • currentXDelta

        protected double currentXDelta
        The sum of x-displacements for the current iteration
      • widestRank

        protected int widestRank
        The rank that has the widest x position
      • rankTopY

        protected double[] rankTopY
        Internal cache of top-most values of Y for each rank
      • rankBottomY

        protected double[] rankBottomY
        Internal cache of bottom-most value of Y for each rank
      • widestRankValue

        protected double widestRankValue
        The X-coordinate of the edge of the widest rank
      • rankWidths

        protected double[] rankWidths
        The width of all the ranks
      • rankY

        protected double[] rankY
        The Y-coordinate of all the ranks
      • fineTuning

        protected boolean fineTuning
        Whether or not to perform local optimisations and iterate multiple times through the algorithm
      • disableEdgeStyle

        protected boolean disableEdgeStyle
        Specifies if the STYLE_NOEDGESTYLE flag should be set on edges that are modified by the result. Default is true.
      • edgeStyle

        protected com.mxgraph.layout.hierarchical.stage.mxCoordinateAssignment.HierarchicalEdgeStyle edgeStyle
        The style to apply between cell layers to edge segments
      • nextLayerConnectedCache

        protected mxGraphAbstractHierarchyCell[][] nextLayerConnectedCache
        A store of connections to the layer above for speed
      • groupPadding

        protected int groupPadding
        Padding added to resized parents
      • previousLayerConnectedCache

        protected mxGraphAbstractHierarchyCell[][] previousLayerConnectedCache
        A store of connections to the layer below for speed
    • Constructor Detail

      • mxCoordinateAssignment

        public mxCoordinateAssignment​(mxHierarchicalLayout layout,
                                      double intraCellSpacing,
                                      double interRankCellSpacing,
                                      int orientation,
                                      double initialX,
                                      double parallelEdgeSpacing)
        Creates a coordinate assignment.
        intraCellSpacing - the minimum buffer between cells on the same rank
        interRankCellSpacing - the minimum distance between cells on adjacent ranks
        orientation - the position of the root node(s) relative to the graph
        initialX - the leftmost coordinate node placement starts at
    • Method Detail

      • printStatus

        public void printStatus()
        Utility method to display the x co-ords
      • execute

        public void execute​(java.lang.Object parent)
        A basic horizontal coordinate assignment algorithm
        Specified by:
        execute in interface mxHierarchicalLayoutStage
      • rankMedianPosition

        protected void rankMedianPosition​(int rankValue,
                                          mxGraphHierarchyModel model,
                                          int nextRankValue)
        Performs median minimisation over one rank.
        rankValue - the layer number of this rank
        model - an internal model of the hierarchical layout
        nextRankValue - the layer number whose connected cels are to be laid out relative to
      • rankCoordinates

        protected void rankCoordinates​(int rankValue,
                                       mxGraph graph,
                                       mxGraphHierarchyModel model)
        Sets up the layout in an initial positioning. All the first cells in each rank are moved to the left and the rest of the rank inserted as close together as their size and buffering permits. This method works on just the specified rank.
        rankValue - the current rank being processed
        graph - the facade describing the input graph
        model - an internal model of the hierarchical layout
      • calculateWidestRank

        protected void calculateWidestRank​(mxGraph graph,
                                           mxGraphHierarchyModel model)
        Calculates the width rank in the hierarchy. Also set the y value of each rank whilst performing the calculation
        graph - the facade describing the input graph
        model - an internal model of the hierarchical layout
      • minPath

        protected void minPath​(mxGraphHierarchyModel model)
        Straightens out chains of virtual nodes where possible
        model - an internal model of the hierarchical layout
      • repositionValid

        protected boolean repositionValid​(mxGraphHierarchyModel model,
                                          mxGraphAbstractHierarchyCell cell,
                                          int rank,
                                          double position)
        Determines whether or not a node may be moved to the specified x position on the specified rank
        model - the layout model
        cell - the cell being analysed
        rank - the layer of the cell
        position - the x position being sought
        whether or not the virtual node can be moved to this position
      • setCellLocations

        protected void setCellLocations​(mxGraph graph,
                                        mxGraphHierarchyModel model)
        Sets the cell locations in the facade to those stored after this layout processing step has completed.
        graph - the facade describing the input graph
        model - an internal model of the hierarchical layout
      • adjustParents

        protected void adjustParents​(java.util.Set<java.lang.Object> parentsChanged)
        Adjust parent cells whose child geometries have changed. The default implementation adjusts the group to just fit around the children with a padding.
      • localEdgeProcessing

        protected void localEdgeProcessing​(mxGraphHierarchyModel model)
        Separates the x position of edges as they connect to vertices
        model - an internal model of the hierarchical layout
      • setVertexLocation

        protected void setVertexLocation​(mxGraphAbstractHierarchyCell cell)
        Fixes the position of the specified vertex
        cell - the vertex to position
      • processReversedEdge

        protected void processReversedEdge​(mxGraphHierarchyEdge edge,
                                           java.lang.Object realEdge)
        Hook to add additional processing
        edge - The hierarchical model edge
        realEdge - The real edge in the graph
      • getInterRankCellSpacing

        public double getInterRankCellSpacing()
        Returns the interRankCellSpacing.
      • setInterRankCellSpacing

        public void setInterRankCellSpacing​(double interRankCellSpacing)
        interRankCellSpacing - The interRankCellSpacing to set.
      • getIntraCellSpacing

        public double getIntraCellSpacing()
        Returns the intraCellSpacing.
      • setIntraCellSpacing

        public void setIntraCellSpacing​(double intraCellSpacing)
        intraCellSpacing - The intraCellSpacing to set.
      • getOrientation

        public int getOrientation()
        Returns the orientation.
      • setOrientation

        public void setOrientation​(int orientation)
        orientation - The orientation to set.
      • getLimitX

        public double getLimitX()
        Returns the limitX.
      • setLimitX

        public void setLimitX​(double limitX)
        limitX - The limitX to set.
      • isFineTuning

        public boolean isFineTuning()
        Returns the fineTuning.
      • setFineTuning

        public void setFineTuning​(boolean fineTuning)
        fineTuning - The fineTuning to set.