mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-11-21 19:42:14 +00:00
Merge remote-tracking branch
'origin/GP-737_ghidra007_PR-2964_layout_names' (Closes #2964)
This commit is contained in:
commit
df72f24b58
@ -111,64 +111,64 @@
|
||||
<BLOCKQUOTE>
|
||||
<BLOCKQUOTE>
|
||||
<UL>
|
||||
<LI><A name="Compact_Hierarchical">
|
||||
<LI><A name="Compact Hierarchical"/>
|
||||
<B>Compact Hierarchical</B> is the <B>TidierTree Layout Algorithm</B>. It builds a tree
|
||||
structure and attempts to reduce horizontal space.</LI>
|
||||
|
||||
<LI><A name="Hierarchical">
|
||||
<B>Hierarchical</B> is a basic Tree algorithm. It prioritizes 'important' edges while
|
||||
constructing the tree.</LI>
|
||||
<LI><A name="Hierarchical"/>
|
||||
<B>Hierarchical</B> is a basic Tree algorithm with the root(s) at the top.</LI>
|
||||
|
||||
<LI><A name="Compact Radial">
|
||||
<LI><A name="Compact Radial"/>
|
||||
<B>Compact Radial</B> is the <B>TidierTree Layout Algorithm</B> with the root(s) at the
|
||||
center and child vertices radiating outwards.</LI>
|
||||
|
||||
<LI><B>Hierarchical MinCross</B> is the <B>Sugiyama Layout Algorithm</B>. It attempts to
|
||||
route edges around vertices in order to reduce crossing.There are four layering
|
||||
algorithms:</LI>
|
||||
<LI><A name="Hierarchical MinCross"/>
|
||||
<B>Hierarchical MinCross</B> is the <B>Sugiyama Layout Algorithm with optimizations</B>. It attempts to
|
||||
route edges around vertices in order to reduce crossing. There are four layering
|
||||
algorithms (below)</LI>
|
||||
|
||||
<LI style="list-style: none">
|
||||
<LI><A name="Vertical Hierarchical MinCross"/>
|
||||
<B>Vertical Hierarchical MinCross</B> is the <B>Sugiyama Layout Algorithm with optimizations</B>. It attempts to
|
||||
route edges around vertices in order to reduce crossing. If there is a favored EdgeType, an attempt is made to
|
||||
line up those favored edges so they are vertical in the presentation. There are four layering
|
||||
algorithms:</LI>
|
||||
|
||||
|
||||
<UL>
|
||||
<LI><A name="Hierarchical_MinCross_Top_Down">
|
||||
<B>Top Down</B> - biases the vertices to the top</LI>
|
||||
<LI><B>Top Down</B> - Biases the vertices to the top. Sources on the top row.</LI>
|
||||
|
||||
<LI><A name="Hierarchical_MinCross_Longest_Path">
|
||||
<B>Longest Path</B> - biases the vertices to the bottom</LI>
|
||||
<LI><B>Longest Path</B> - Biases the vertices to the bottom. Sinks are on the bottom row.</LI>
|
||||
|
||||
<LI><A name="Hierarchical_MinCross_Network_Simplex">
|
||||
<B>Network Simplex</B> - layers after finding an 'optimal tree'</LI>
|
||||
<LI><B>Network Simplex</B> - Layers after finding an 'optimal tree' by not considering longer edges.</LI>
|
||||
|
||||
<LI><A name="Hierarchical_MinCross_Coffman_Graham">
|
||||
<B>Coffman Graham</B> - biases the vertices using a scheduling algorithm to minimize
|
||||
length</LI>
|
||||
<LI><B>Coffman Graham</B> - Biases the vertices using a scheduling algorithm to minimize
|
||||
length. Tends to balance the graph around the middle.</LI>
|
||||
</UL>
|
||||
</LI>
|
||||
|
||||
|
||||
<LI><A name="Circle">
|
||||
<B>Circle</B> will arrange vertices in a Circle. If there are not too many edges (less
|
||||
than specified in the jungrapht.circle.reduceEdgeCrossingMaxEdges property with a default
|
||||
of 200), it will attempt to reduce edge crossing by rearranging the vertices.</LI>
|
||||
<LI><A name="Circle"/>
|
||||
<B>Circle</B> will arrange vertices in a Circle. </LI>
|
||||
|
||||
<LI><A name="Force_Balanced">
|
||||
<LI><A name="Force Balanced"/>
|
||||
<B>Force Balanced</B> is a <B>Force Directed Layout Algorithm</B> using the the <B>Kamada
|
||||
Kawai</B> approach. It attempts to balance the graph by considering vertices and edge
|
||||
Kawai</B> algorithm. It attempts to balance the graph by considering vertices and edge
|
||||
connections.</LI>
|
||||
|
||||
<LI><A name="Force_Directed">
|
||||
<LI><A name="Force Directed"/>
|
||||
<B>Force Directed</B> is a <B>Force Directed Layout Algorithm</B> using the
|
||||
<B>Fructermann Reingold</B> approach. It pushes unconnected vertices apart and draws
|
||||
connected vertices together.</LI>
|
||||
|
||||
<LI><A name="Radial">
|
||||
<LI><A name="Radial"/>
|
||||
<B>Radial</B> is a Tree structure with the root(s) at the center and child vertices
|
||||
radiating outwards.</LI>
|
||||
|
||||
<LI><A name="Balloon">
|
||||
<LI><A name="Balloon"/>
|
||||
<B>Balloon</B> is a Tree structure with the root(s) at the centers of circles in a radial
|
||||
pattern</LI>
|
||||
|
||||
<LI><A name="Gem__Graph_Embedder_">
|
||||
<B>GEM</B> is a Force Directed layout with locally separated components</LI>
|
||||
<LI><A name="GEM"/>
|
||||
<B>GEM (Graph Embedder)</B> is a Force Directed layout with locally separated components</LI>
|
||||
</UL>
|
||||
</BLOCKQUOTE>
|
||||
</BLOCKQUOTE>
|
||||
|
@ -51,7 +51,6 @@ import org.jungrapht.visualization.renderers.Renderer;
|
||||
import org.jungrapht.visualization.renderers.Renderer.VertexLabel;
|
||||
import org.jungrapht.visualization.renderers.Renderer.VertexLabel.Position;
|
||||
import org.jungrapht.visualization.selection.MutableSelectedState;
|
||||
import org.jungrapht.visualization.selection.VertexEndpointsSelectedEdgeSelectedState;
|
||||
import org.jungrapht.visualization.transform.*;
|
||||
import org.jungrapht.visualization.transform.shape.MagnifyImageLensSupport;
|
||||
import org.jungrapht.visualization.transform.shape.MagnifyShapeTransformer;
|
||||
@ -755,7 +754,17 @@ public class DefaultGraphDisplay implements GraphDisplay {
|
||||
for (String layoutName : names) {
|
||||
ActionState<String> state = new ActionState<>(layoutName,
|
||||
DefaultDisplayGraphIcons.LAYOUT_ALGORITHM_ICON, layoutName);
|
||||
state.setHelpLocation(new HelpLocation(ACTION_OWNER, layoutName));
|
||||
|
||||
// condense hierarchical action help to the top-level help description
|
||||
String anchor = layoutName;
|
||||
if (layoutName.contains(LayoutFunction.VERT_MIN_CROSS)) {
|
||||
anchor = LayoutFunction.VERT_MIN_CROSS;
|
||||
}
|
||||
else if (layoutName.contains(LayoutFunction.MIN_CROSS)) {
|
||||
anchor = LayoutFunction.MIN_CROSS;
|
||||
}
|
||||
|
||||
state.setHelpLocation(new HelpLocation(ACTION_OWNER, anchor));
|
||||
actionStates.add(state);
|
||||
}
|
||||
return actionStates;
|
||||
|
@ -41,18 +41,20 @@ class LayoutFunction
|
||||
static final String CIRCLE = "Circle";
|
||||
static final String TIDIER_TREE = "Compact Hierarchical";
|
||||
static final String TIDIER_RADIAL_TREE = "Compact Radial";
|
||||
static final String MIN_CROSS = "Hierarchical MinCross"; //not an alg, just a parent category
|
||||
static final String MIN_CROSS_TOP_DOWN = "Hierarchical MinCross Top Down";
|
||||
static final String MIN_CROSS_LONGEST_PATH = "Hierarchical MinCross Longest Path";
|
||||
static final String MIN_CROSS_NETWORK_SIMPLEX = "Hierarchical MinCross Network Simplex";
|
||||
static final String MIN_CROSS_COFFMAN_GRAHAM = "Hierarchical MinCross Coffman Graham";
|
||||
static final String EXP_MIN_CROSS_TOP_DOWN = "Experimental Hierarchical MinCross Top Down";
|
||||
static final String EXP_MIN_CROSS_LONGEST_PATH = "Experimental Hierarchical MinCross Longest Path";
|
||||
static final String EXP_MIN_CROSS_NETWORK_SIMPLEX = "Experimental Hierarchical MinCross Network Simplex";
|
||||
static final String EXP_MIN_CROSS_COFFMAN_GRAHAM = "Experimental Hierarchical MinCross Coffman Graham";
|
||||
static final String VERT_MIN_CROSS = "Vertical Hierarchical MinCross"; //not an alg, just a parent category
|
||||
static final String VERT_MIN_CROSS_TOP_DOWN = "Vertical Hierarchical MinCross Top Down";
|
||||
static final String VERT_MIN_CROSS_LONGEST_PATH = "Vertical Hierarchical MinCross Longest Path";
|
||||
static final String VERT_MIN_CROSS_NETWORK_SIMPLEX = "Vertical Hierarchical MinCross Network Simplex";
|
||||
static final String VERT_MIN_CROSS_COFFMAN_GRAHAM = "Vertical Hierarchical MinCross Coffman Graham";
|
||||
static final String TREE = "Hierarchical";
|
||||
static final String RADIAL = "Radial";
|
||||
static final String BALLOON = "Balloon";
|
||||
static final String GEM = "Gem (Graph Embedder)";
|
||||
static final String GEM = "GEM";
|
||||
|
||||
Predicate<AttributedEdge> favoredEdgePredicate;
|
||||
Comparator<AttributedEdge> edgeTypeComparator;
|
||||
@ -66,10 +68,10 @@ class LayoutFunction
|
||||
return new String[] { TIDIER_TREE, TREE,
|
||||
TIDIER_RADIAL_TREE, MIN_CROSS_TOP_DOWN, MIN_CROSS_LONGEST_PATH,
|
||||
MIN_CROSS_NETWORK_SIMPLEX, MIN_CROSS_COFFMAN_GRAHAM, CIRCLE,
|
||||
EXP_MIN_CROSS_TOP_DOWN,
|
||||
EXP_MIN_CROSS_LONGEST_PATH,
|
||||
EXP_MIN_CROSS_NETWORK_SIMPLEX,
|
||||
EXP_MIN_CROSS_COFFMAN_GRAHAM,
|
||||
VERT_MIN_CROSS_TOP_DOWN,
|
||||
VERT_MIN_CROSS_LONGEST_PATH,
|
||||
VERT_MIN_CROSS_NETWORK_SIMPLEX,
|
||||
VERT_MIN_CROSS_COFFMAN_GRAHAM,
|
||||
KAMADA_KAWAI, FRUCTERMAN_REINGOLD, RADIAL, BALLOON, GEM
|
||||
};
|
||||
}
|
||||
@ -112,25 +114,25 @@ class LayoutFunction
|
||||
.<AttributedVertex, AttributedEdge> edgeAwareBuilder()
|
||||
.edgeComparator(edgeTypeComparator)
|
||||
.layering(Layering.COFFMAN_GRAHAM);
|
||||
case EXP_MIN_CROSS_TOP_DOWN:
|
||||
case VERT_MIN_CROSS_TOP_DOWN:
|
||||
return EiglspergerLayoutAlgorithm
|
||||
.<AttributedVertex, AttributedEdge> edgeAwareBuilder()
|
||||
.edgeComparator(edgeTypeComparator)
|
||||
.favoredEdgePredicate(favoredEdgePredicate)
|
||||
.layering(Layering.TOP_DOWN);
|
||||
case EXP_MIN_CROSS_LONGEST_PATH:
|
||||
case VERT_MIN_CROSS_LONGEST_PATH:
|
||||
return EiglspergerLayoutAlgorithm
|
||||
.<AttributedVertex, AttributedEdge> edgeAwareBuilder()
|
||||
.edgeComparator(edgeTypeComparator)
|
||||
.favoredEdgePredicate(favoredEdgePredicate)
|
||||
.layering(Layering.LONGEST_PATH);
|
||||
case EXP_MIN_CROSS_NETWORK_SIMPLEX:
|
||||
case VERT_MIN_CROSS_NETWORK_SIMPLEX:
|
||||
return EiglspergerLayoutAlgorithm
|
||||
.<AttributedVertex, AttributedEdge> edgeAwareBuilder()
|
||||
.edgeComparator(edgeTypeComparator)
|
||||
.favoredEdgePredicate(favoredEdgePredicate)
|
||||
.layering(Layering.NETWORK_SIMPLEX);
|
||||
case EXP_MIN_CROSS_COFFMAN_GRAHAM:
|
||||
case VERT_MIN_CROSS_COFFMAN_GRAHAM:
|
||||
return EiglspergerLayoutAlgorithm
|
||||
.<AttributedVertex, AttributedEdge> edgeAwareBuilder()
|
||||
.edgeComparator(edgeTypeComparator)
|
||||
|
Loading…
Reference in New Issue
Block a user