Class AbstractVisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>

  • Type Parameters:
    V - the vertex type
    E - the edge type
    All Implemented Interfaces:
    com.google.common.base.Function<V,​java.awt.geom.Point2D>, edu.uci.ics.jung.algorithms.layout.Layout<V,​E>, VisualGraphLayout<V,​E>

    public abstract class AbstractVisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>
    extends edu.uci.ics.jung.algorithms.layout.AbstractLayout<V,​E>
    implements VisualGraphLayout<V,​E>
    A base layout that marries the Visual Graph and Jung layout interfaces. This class allows you to create new layouts while stubbing the Jung layout methods.

    This class essentially takes in client-produced grid row and column indices and produces layout locations for those values.

    This an implementation the Jung Layout interface that handles most of the layout implementation for you. Things to know:

    • You should call initialize() inside of your constructor
    • You must implement performInitialGridLayout(VisualGraph) - this is where you align your vertices (and optionally edge articulations) on a grid. This grid will be translated into layout space points for you.
    • If you wish to use articulation points in your edges, you must override usesEdgeArticulations() to return true.

    By default, this class will create x-position values that are aligned with the column's x-position. You can override getVertexLocation(VisualVertex, Column, Row, Rectangle) in order to center the vertex within its column getCenteredVertexLocation(VisualVertex, Column, Row, Rectangle). Also note though that if your layout returns true for isCondensedLayout(), then the centering will be condensed and slightly off.

    See Also:
    GridLocationMap, LayoutPositions
    • Field Detail

      • layoutName

        protected java.lang.String layoutName
      • layoutInitialized

        protected boolean layoutInitialized
    • Constructor Detail

      • AbstractVisualGraphLayout

        protected AbstractVisualGraphLayout​(edu.uci.ics.jung.graph.Graph<V,​E> graph,
                                            java.lang.String layoutName)
    • Method Detail

      • getLayoutName

        public java.lang.String getLayoutName()
        Returns the name of this layout
        Returns:
        the name of this layout
      • setTaskMonitor

        public void setTaskMonitor​(TaskMonitor monitor)
      • getEdgeRenderer

        public edu.uci.ics.jung.visualization.renderers.BasicEdgeRenderer<V,​E> getEdgeRenderer()
        Description copied from interface: VisualGraphLayout
        Returns an optional edge renderer. This is used to render each edge.
        Specified by:
        getEdgeRenderer in interface VisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>
        Returns:
        an optional edge renderer
      • getEdgeShapeTransformer

        public com.google.common.base.Function<E,​java.awt.Shape> getEdgeShapeTransformer()
        Description copied from interface: VisualGraphLayout
        Returns an optional edge shape transformer. This is used to create shapes for each edge.
        Specified by:
        getEdgeShapeTransformer in interface VisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>
        Returns:
        an optional edge shape transformer
      • getEdgeLabelRenderer

        public edu.uci.ics.jung.visualization.renderers.Renderer.EdgeLabel<V,​E> getEdgeLabelRenderer()
        Description copied from interface: VisualGraphLayout
        Returns an optional custom edge label renderer. This is used to add labels to the edges.
        Specified by:
        getEdgeLabelRenderer in interface VisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>
        Returns:
        an optional renderer
      • usesEdgeArticulations

        public boolean usesEdgeArticulations()
        Description copied from interface: VisualGraphLayout
        Returns true if this layout uses articulated edges. All VisualEdges have the ability to articulate. This method servers as a shortcut for algorithms so that they need not loop over all edges to determine if they have articulations. (Looping over large graphs is time intensive.)

        What are articulations?

        Specified by:
        usesEdgeArticulations in interface VisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>
        Returns:
        true if this layout uses articulated edges.
      • reset

        public void reset()
        Specified by:
        reset in interface edu.uci.ics.jung.algorithms.layout.Layout<V extends VisualVertex,​E extends VisualEdge<V>>
      • isCondensedLayout

        protected boolean isCondensedLayout()
        Returns true if this layout is in a condensed mode, which means to reduce space between vertices and edges. This is useful to save space. Subclasses may choose to have this setting controlled via an option that the user can toggle.
        Returns:
        true for a condensed layout
      • initialize

        public void initialize()
        Specified by:
        initialize in interface edu.uci.ics.jung.algorithms.layout.Layout<V extends VisualVertex,​E extends VisualEdge<V>>
      • calculateLocations

        public LayoutPositions<V,​E> calculateLocations​(VisualGraph<V,​E> visualGraph,
                                                             TaskMonitor taskMonitor)
        Description copied from interface: VisualGraphLayout
        Signals to again layout the current graph. The locations generated by the layout will be returned, but not actually applied to the graph. This allows clients to generate new locations and then apply them in a delayed fashion, like for animation.
        Specified by:
        calculateLocations in interface VisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>
        Parameters:
        visualGraph - the graph that contains the vertices to layout
        taskMonitor - the task monitor used to report progress or to cancel
      • createClonedLayout

        public abstract AbstractVisualGraphLayout<V,​E> createClonedLayout​(VisualGraph<V,​E> newGraph)
        This class has implemented cloneLayout(VisualGraph) in order to properly initialize location information in the layout so that subclasses do not have to. Each subclass still needs to create the new instance of the layout that is being cloned, as this class does not know how to do so.
        Parameters:
        newGraph - the new graph for the new layout
        Returns:
        the new layout
      • cloneLayout

        public VisualGraphLayout<V,​E> cloneLayout​(VisualGraph<V,​E> newGraph)
        Description copied from interface: VisualGraphLayout
        Creates a new version of this layout using the given graph. Also, the new layout will have the same state as this layout (i.e., vertex positions (and edge articulations, if applicable)).
        Specified by:
        cloneLayout in interface VisualGraphLayout<V extends VisualVertex,​E extends VisualEdge<V>>
        Parameters:
        newGraph - the new graph for the new layout
        Returns:
        the new layout
      • initializeClonedLayout

        protected void initializeClonedLayout​(AbstractVisualGraphLayout<V,​E> newLayout)
        Takes the given layout and copies the layout information this layout into that layout
        Parameters:
        newLayout - the new layout to update
      • applyNewLocations

        protected void applyNewLocations​(java.util.Map<V,​java.awt.geom.Point2D> newLocations)
      • applyNewArticulations

        protected void applyNewArticulations​(java.util.Map<E,​java.util.List<java.awt.geom.Point2D>> edgeArticulations)
      • getVertexLocation

        protected java.awt.geom.Point2D getVertexLocation​(V v,
                                                          Column col,
                                                          Row<V> row,
                                                          java.awt.Rectangle bounds)
      • getCenteredVertexLocation

        protected java.awt.geom.Point2D getCenteredVertexLocation​(V v,
                                                                  Column col,
                                                                  Row<V> row,
                                                                  java.awt.Rectangle bounds)
        Returns a location for the given vertex that is centered within its cell
        Parameters:
        v - the vertex
        col - the vertex's column in the grid
        row - the vertex's row in the grid
        bounds - the bounds of the vertex in the layout space
        Returns:
        the centered location
      • getEdgeLocation

        protected java.awt.geom.Point2D getEdgeLocation​(Column col,
                                                        Row<V> row)
      • getCenteredEdgeLocation

        protected java.awt.geom.Point2D getCenteredEdgeLocation​(Column col,
                                                                Row<V> row)
      • condenseVertices

        protected void condenseVertices​(java.util.List<Row<V>> rows,
                                        java.util.Map<V,​java.awt.geom.Point2D> newLocations,
                                        VisualGraphVertexShapeTransformer<V> transformer,
                                        double centerX,
                                        double centerY)
      • condenseEdges

        protected void condenseEdges​(java.util.List<Row<V>> rows,
                                     java.util.Map<E,​java.util.List<java.awt.geom.Point2D>> newEdgeArticulations,
                                     double centerX,
                                     double centerY)
      • getCondenseFactor

        protected double getCondenseFactor()
        The amount (from 0 to 1.0) by which to condense the vertices of the graph when that feature is enabled. The default is .5 (50%). A value of 1.0 would be fully-condensed such that all vertices are aligned on the x-axis on the center of the graph.
        Returns:
        the condense factor
      • setLocation

        public void setLocation​(V v,
                                java.awt.geom.Point2D location)
        Specified by:
        setLocation in interface edu.uci.ics.jung.algorithms.layout.Layout<V extends VisualVertex,​E extends VisualEdge<V>>
        Overrides:
        setLocation in class edu.uci.ics.jung.algorithms.layout.AbstractLayout<V extends VisualVertex,​E extends VisualEdge<V>>