| 123456789101112131415161718192021222324252627282930313233343536373839 |
- import _ from 'lodash'
- import util from './util'
- function addBorderSegments (g) {
- function dfs (v) {
- const children = g.children(v)
- const node = g.node(v)
- if (children.length) {
- _.forEach(children, dfs)
- }
- if (_.has(node, 'minRank')) {
- node.borderLeft = []
- node.borderRight = []
- for (let rank = node.minRank, maxRank = node.maxRank + 1;
- rank < maxRank;
- ++rank) {
- addBorderNode(g, 'borderLeft', '_bl', v, node, rank)
- addBorderNode(g, 'borderRight', '_br', v, node, rank)
- }
- }
- }
- _.forEach(g.children(), dfs)
- }
- function addBorderNode (g, prop, prefix, sg, sgNode, rank) {
- const label = { width: 0, height: 0, rank: rank, borderType: prop }
- const prev = sgNode[prop][rank - 1]
- const curr = util.addDummyNode(g, 'border', label, prefix)
- sgNode[prop][rank] = curr
- g.setParent(curr, sg)
- if (prev) {
- g.setEdge(prev, curr, { weight: 1 })
- }
- }
- export default addBorderSegments
|