diff --git a/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm b/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm index ae6bf805d0..30810d250d 100644 --- a/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm +++ b/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm @@ -111,63 +111,65 @@
diff --git a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java index 00690e8436..a08296ff63 100644 --- a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java +++ b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java @@ -45,10 +45,10 @@ class LayoutFunction 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_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"; @@ -66,10 +66,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 +112,25 @@ class LayoutFunction .-
- +
- Compact Hierarchical is the TidierTree Layout Algorithm. It builds a tree structure and attempts to reduce horizontal space.
-- - Hierarchical is a basic Tree algorithm. It prioritizes 'important' edges while - constructing the tree.
+- + Hierarchical is a basic Tree algorithm with the root(s) at the top.
-- +
-- Compact Radial is the TidierTree Layout Algorithm with the root(s) at the center and child vertices radiating outwards.
-- Hierarchical MinCross is the Sugiyama Layout Algorithm. It attempts to - route edges around vertices in order to reduce crossing.There are four layering - algorithms:
+- Hierarchical MinCross is the Sugiyama Layout Algorithm with optimizations. It attempts to + route edges around vertices in order to reduce crossing. There are four layering + algorithms (below)
-- +
- Vertical Hierarchical MinCross is the Sugiyama Layout Algorithm with optimizations. 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:
+ +-
- - Top Down - biases the vertices to the top
+- + Top Down - Biases the vertices to the top. Sources on the top row.
-- - Longest Path - biases the vertices to the bottom
+- + Longest Path - Biases the vertices to the bottom. Sinks are on the bottom row.
-- - Network Simplex - layers after finding an 'optimal tree'
+- + Network Simplex - Layers after finding an 'optimal tree' by not considering longer edges.
-- - Coffman Graham - biases the vertices using a scheduling algorithm to minimize - length
+- + Coffman Graham - Biases the vertices using a scheduling algorithm to minimize + length. Tends to balance the graph around the middle.
- - Circle 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.
+- + Circle will arrange vertices in a Circle.
-- +
- Force Balanced is a Force Directed Layout Algorithm using the the Kamada - Kawai approach. It attempts to balance the graph by considering vertices and edge + Kawai algorithm. It attempts to balance the graph by considering vertices and edge connections.
-- +
- Force Directed is a Force Directed Layout Algorithm using the Fructermann Reingold approach. It pushes unconnected vertices apart and draws connected vertices together.
-- +
- Radial is a Tree structure with the root(s) at the center and child vertices radiating outwards.
-- +
- Balloon is a Tree structure with the root(s) at the centers of circles in a radial pattern
-- +
- GEM is a Force Directed layout with locally separated components
edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .layering(Layering.COFFMAN_GRAHAM); - case EXP_MIN_CROSS_TOP_DOWN: + case VERT_MIN_CROSS_TOP_DOWN: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .favoredEdgePredicate(favoredEdgePredicate) .layering(Layering.TOP_DOWN); - case EXP_MIN_CROSS_LONGEST_PATH: + case VERT_MIN_CROSS_LONGEST_PATH: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .favoredEdgePredicate(favoredEdgePredicate) .layering(Layering.LONGEST_PATH); - case EXP_MIN_CROSS_NETWORK_SIMPLEX: + case VERT_MIN_CROSS_NETWORK_SIMPLEX: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .favoredEdgePredicate(favoredEdgePredicate) .layering(Layering.NETWORK_SIMPLEX); - case EXP_MIN_CROSS_COFFMAN_GRAHAM: + case VERT_MIN_CROSS_COFFMAN_GRAHAM: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator)