Class DAGLayout<V,​E>

  • All Implemented Interfaces:
    Layout<V,​E>, IterativeContext, org.apache.commons.collections4.Transformer<V,​java.awt.geom.Point2D>

    public class DAGLayout<V,​E>
    extends SpringLayout<V,​E>
    An implementation of Layout suitable for tree-like directed acyclic graphs. Parts of it will probably not terminate if the graph is cyclic! The layout will result in directed edges pointing generally upwards. Any vertices with no successors are considered to be level 0, and tend towards the top of the layout. Any vertex has a level one greater than the maximum level of all its successors.
    • Constructor Detail

      • DAGLayout

        public DAGLayout​(edu.uci.ics.jung.graph.Graph<V,​E> g)
        Creates an instance for the specified graph.
    • Method Detail

      • setRoot

        public void setRoot​(edu.uci.ics.jung.graph.Graph<V,​E> g)
        setRoot calculates the level of each vertex in the graph. Level 0 is allocated to any vertex with no successors. Level n+1 is allocated to any vertex whose successors' maximum level is n.
      • setRoot

        public void setRoot​(V v)
        Set vertex v to be level 0.
      • propagateMinimumLevel

        public void propagateMinimumLevel​(V v)
        A recursive method for allocating the level for each vertex. Ensures that all predecessors of v have a level which is at least one greater than the level of v.
        Parameters:
        v -
      • setSize

        public void setSize​(java.awt.Dimension size)
        Description copied from class: SpringLayout
        Sets the dimensions of the available space for layout to size.
        Specified by:
        setSize in interface Layout<V,​E>
        Overrides:
        setSize in class SpringLayout<V,​E>
      • initialize

        public void initialize()
        Had to override this one as well, to ensure that setRoot() is called.
        Specified by:
        initialize in interface Layout<V,​E>
        Overrides:
        initialize in class SpringLayout<V,​E>
      • moveNodes

        protected void moveNodes()
        Override the moveNodes() method from SpringLayout. The only change we need to make is to make sure that nodes don't float higher than the minY coordinate, as calculated by their minimumLevel.
        Overrides:
        moveNodes in class SpringLayout<V,​E>
      • setLocation

        public void setLocation​(V picked,
                                double x,
                                double y)
        Override forceMove so that if someone moves a node, we can re-layout everything.
        Overrides:
        setLocation in class AbstractLayout<V,​E>
      • setLocation

        public void setLocation​(V picked,
                                java.awt.geom.Point2D p)
        Override forceMove so that if someone moves a node, we can re-layout everything.
        Specified by:
        setLocation in interface Layout<V,​E>
        Overrides:
        setLocation in class AbstractLayout<V,​E>
      • relaxEdges

        protected void relaxEdges()
        Overridden relaxEdges. This one reduces the effect of edges between greatly different levels.
        Overrides:
        relaxEdges in class SpringLayout<V,​E>