08-27-周三_17-09-29
This commit is contained in:
45
node_modules/dagre-layout/lib/rank/index.js
generated
vendored
Normal file
45
node_modules/dagre-layout/lib/rank/index.js
generated
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
import { longestPath } from './util'
|
||||
import feasibleTree from './feasible-tree'
|
||||
import networkSimplex from './network-simplex'
|
||||
|
||||
/*
|
||||
* Assigns a rank to each node in the input graph that respects the "minlen"
|
||||
* constraint specified on edges between nodes.
|
||||
*
|
||||
* This basic structure is derived from Gansner, et al., "A Technique for
|
||||
* Drawing Directed Graphs."
|
||||
*
|
||||
* Pre-conditions:
|
||||
*
|
||||
* 1. Graph must be a connected DAG
|
||||
* 2. Graph nodes must be objects
|
||||
* 3. Graph edges must have "weight" and "minlen" attributes
|
||||
*
|
||||
* Post-conditions:
|
||||
*
|
||||
* 1. Graph nodes will have a "rank" attribute based on the results of the
|
||||
* algorithm. Ranks can start at any index (including negative), we'll
|
||||
* fix them up later.
|
||||
*/
|
||||
function rank (g) {
|
||||
switch (g.graph().ranker) {
|
||||
case 'network-simplex': networkSimplexRanker(g); break
|
||||
case 'tight-tree': tightTreeRanker(g); break
|
||||
case 'longest-path': longestPathRanker(g); break
|
||||
default: networkSimplexRanker(g)
|
||||
}
|
||||
}
|
||||
|
||||
// A fast and simple ranker, but results are far from optimal.
|
||||
const longestPathRanker = longestPath
|
||||
|
||||
function tightTreeRanker (g) {
|
||||
longestPath(g)
|
||||
feasibleTree(g)
|
||||
}
|
||||
|
||||
function networkSimplexRanker (g) {
|
||||
networkSimplex(g)
|
||||
}
|
||||
|
||||
export default rank
|
Reference in New Issue
Block a user