Class SpringLayout<V,​E>

  • All Implemented Interfaces:
    com.google.common.base.Function<V,​java.awt.geom.Point2D>, Layout<V,​E>, IterativeContext, java.util.function.Function<V,​java.awt.geom.Point2D>
    Direct Known Subclasses:
    DAGLayout, SpringLayout2

    public class SpringLayout<V,​E>
    extends AbstractLayout<V,​E>
    implements IterativeContext
    The SpringLayout package represents a visualization of a set of nodes. The SpringLayout, which is initialized with a Graph, assigns X/Y locations to each node. When called relax(), the SpringLayout moves the visualization forward one step.
    Author:
    Danyel Fisher, Joshua O'Madadhain
    • Field Detail

      • stretch

        protected double stretch
      • lengthFunction

        protected com.google.common.base.Function<? super E,​java.lang.Integer> lengthFunction
      • repulsion_range_sq

        protected int repulsion_range_sq
      • force_multiplier

        protected double force_multiplier
    • Constructor Detail

      • SpringLayout

        public SpringLayout​(Graph<V,​E> g)
        Constructor for a SpringLayout for a raw graph with associated dimension--the input knows how big the graph is. Defaults to the unit length function.
        Parameters:
        g - the graph on which the layout algorithm is to operate
      • SpringLayout

        public SpringLayout​(Graph<V,​E> g,
                            com.google.common.base.Function<? super E,​java.lang.Integer> length_function)
        Constructor for a SpringLayout for a raw graph with associated component.
        Parameters:
        g - the graph on which the layout algorithm is to operate
        length_function - provides a length for each edge
    • Method Detail

      • getStretch

        public double getStretch()
        Returns:
        the current value for the stretch parameter
      • setSize

        public void setSize​(java.awt.Dimension size)
        Description copied from class: AbstractLayout
        When a visualization is resized, it presumably wants to fix the locations of the vertices and possibly to reinitialize its data. The current method calls initializeLocations followed by initialize_local.
        Specified by:
        setSize in interface Layout<V,​E>
        Overrides:
        setSize in class AbstractLayout<V,​E>
        Parameters:
        size - the space to use to lay out this graph
      • setStretch

        public void setStretch​(double stretch)

        Sets the stretch parameter for this instance. This value specifies how much the degrees of an edge's incident vertices should influence how easily the endpoints of that edge can move (that is, that edge's tendency to change its length).

        The default value is 0.70. Positive values less than 1 cause high-degree vertices to move less than low-degree vertices, and values > 1 cause high-degree vertices to move more than low-degree vertices. Negative values will have unpredictable and inconsistent results.

        Parameters:
        stretch - the stretch parameter
      • getRepulsionRange

        public int getRepulsionRange()
      • setRepulsionRange

        public void setRepulsionRange​(int range)
        Sets the node repulsion range (in drawing area units) for this instance. Outside this range, nodes do not repel each other. The default value is 100. Negative values are treated as their positive equivalents.
        Parameters:
        range - the maximum repulsion range
      • getForceMultiplier

        public double getForceMultiplier()
      • setForceMultiplier

        public void setForceMultiplier​(double force)
        Sets the force multiplier for this instance. This value is used to specify how strongly an edge "wants" to be its default length (higher values indicate a greater attraction for the default length), which affects how much its endpoints move at each timestep. The default value is 1/3. A value of 0 turns off any attempt by the layout to cause edges to conform to the default length. Negative values cause long edges to get longer and short edges to get shorter; use at your own risk.
        Parameters:
        force - an energy field created by all living things that binds the galaxy together
      • initialize

        public void initialize()
        Description copied from interface: Layout
        Initializes fields in the node that may not have been set during the constructor. Must be called before the iterations begin.
        Specified by:
        initialize in interface Layout<V,​E>
      • step

        public void step()
        Relaxation step. Moves all nodes a smidge.
        Specified by:
        step in interface IterativeContext
      • relaxEdges

        protected void relaxEdges()
      • calculateRepulsion

        protected void calculateRepulsion()
      • moveNodes

        protected void moveNodes()
      • isIncremental

        public boolean isIncremental()
        Returns:
        true
      • reset

        public void reset()
        No effect.
        Specified by:
        reset in interface Layout<V,​E>