Class VisualEdgeRenderer<V extends VisualVertex,E extends VisualEdge<V>>
- java.lang.Object
-
- edu.uci.ics.jung.visualization.renderers.BasicEdgeRenderer<V,E>
-
- ghidra.graph.viewer.edge.VisualEdgeRenderer<V,E>
-
- Type Parameters:
V
- the vertex typeE
- the edge type
- All Implemented Interfaces:
edu.uci.ics.jung.visualization.renderers.Renderer.Edge<V,E>
- Direct Known Subclasses:
ArticulatedEdgeRenderer
,VisualGraphEdgeSatelliteRenderer
public abstract class VisualEdgeRenderer<V extends VisualVertex,E extends VisualEdge<V>> extends edu.uci.ics.jung.visualization.renderers.BasicEdgeRenderer<V,E>
Edge render for theVisualGraph
systemImplementation Notes
Jung Vertex/Edge Rendering
Jung creates shapes for vertices (see
VertexShapeFactory
) that are centered. They do this by getting the width/height of the shape and then creating an x/y value that is half of the width and height, respectively. This has the effect of the vertex appearing centered over its connected edge. We mimic that with ourVisualGraphVertexShapeTransformer
so that our edge rendering code is similar to Jung's.If we ever decide instead to not center our shapes, then this renderer would have to be updated to itself center the edge shape created herein, like this:
Rectangle b1 = s1.getBounds(); Rectangle b2 = s2.getBounds(); // translate the edge to be centered in the vertex int w1 = b1.width >> 1; int h1 = b1.height >> 1; int w2 = b2.width >> 1; int h2 = b2.height >> 1; float tx1 = x1 + w1; float ty1 = y1 + h1; float tx2 = x2 + w2; float ty2 = y2 + h2; Shape edgeShape = getEdgeShape(rc, graph, e, tx1, ty1, tx2, ty2, isLoop, xs1);
Also, there are other spots in the system where we account for this center that would have to be changed, such as the
AbstractVisualGraphLayout
, which needs the centering offsets to handle vertex clipping.
-
-
Constructor Summary
Constructors Constructor Description VisualEdgeRenderer()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
drawSimpleEdge(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, E e)
java.awt.Color
getBaseColor(edu.uci.ics.jung.graph.Graph<V,E> g, E e)
protected java.awt.Shape
getCompactShape(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, V vertex)
Uses the render context to create a compact shape for the given vertexabstract java.awt.Shape
getEdgeShape(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.graph.Graph<V,E> graph, E e, float x1, float y1, float x2, float y2, boolean isLoop, java.awt.Shape vertexShape)
Returns the edge shape for the given pointsjava.awt.Shape
getFullShape(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, V vertex)
Uses the render context to create a compact shape for the given vertexjava.awt.Color
getHighlightColor(edu.uci.ics.jung.graph.Graph<V,E> g, E e)
protected java.awt.Shape
getVertexShapeForArrow(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, V v)
protected boolean
isEmphasiszed(E e)
protected boolean
isInFocusedVertexPath(E e)
protected boolean
isInHoveredVertexPath(E e)
protected boolean
isSelected(E e)
void
setBaseColor(java.awt.Color color)
void
setDashingPatternOffset(float dashingPatterOffset)
Sets the offset value for painting dashed lines.void
setHighlightColor(java.awt.Color highlightColor)
protected java.awt.Shape
transformFromLayoutToView(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, V vertex, java.awt.Shape shape)
-
-
-
Method Detail
-
setDashingPatternOffset
public void setDashingPatternOffset(float dashingPatterOffset)
Sets the offset value for painting dashed lines. This allows clients to animate the lines being drawn for edges in the edge direction.- Parameters:
dashingPatterOffset
- the offset value
-
setBaseColor
public void setBaseColor(java.awt.Color color)
-
setHighlightColor
public void setHighlightColor(java.awt.Color highlightColor)
-
getHighlightColor
public java.awt.Color getHighlightColor(edu.uci.ics.jung.graph.Graph<V,E> g, E e)
-
isInHoveredVertexPath
protected boolean isInHoveredVertexPath(E e)
-
isInFocusedVertexPath
protected boolean isInFocusedVertexPath(E e)
-
isSelected
protected boolean isSelected(E e)
-
isEmphasiszed
protected boolean isEmphasiszed(E e)
-
drawSimpleEdge
public void drawSimpleEdge(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, E e)
- Overrides:
drawSimpleEdge
in classedu.uci.ics.jung.visualization.renderers.BasicEdgeRenderer<V extends VisualVertex,E extends VisualEdge<V>>
-
getVertexShapeForArrow
protected java.awt.Shape getVertexShapeForArrow(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, V v)
-
getEdgeShape
public abstract java.awt.Shape getEdgeShape(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.graph.Graph<V,E> graph, E e, float x1, float y1, float x2, float y2, boolean isLoop, java.awt.Shape vertexShape)
Returns the edge shape for the given points- Parameters:
rc
- the render context for the graphgraph
- the graphe
- the edge to shapex1
- the start vertex point x; layout spacey1
- the start vertex point y; layout spacex2
- the end vertex point x; layout spacey2
- the end vertex point y; layout spaceisLoop
- true if the start == end, which is a self-loopvertexShape
- the vertex shape (used in the case of a loop to draw a circle from the shape to itself)- Returns:
- the edge shape
-
getFullShape
public java.awt.Shape getFullShape(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, V vertex)
Uses the render context to create a compact shape for the given vertex- Parameters:
rc
- the render contextlayout
- the layoutvertex
- the vertex- Returns:
- the vertex shape
- See Also:
VertexShapeProvider.getFullShape()
-
getCompactShape
protected java.awt.Shape getCompactShape(edu.uci.ics.jung.visualization.RenderContext<V,E> rc, edu.uci.ics.jung.algorithms.layout.Layout<V,E> layout, V vertex)
Uses the render context to create a compact shape for the given vertex- Parameters:
rc
- the render contextlayout
- the layoutvertex
- the vertex- Returns:
- the vertex shape
- See Also:
VertexShapeProvider.getCompactShape()
-
-