|
|
@@ -34,7 +34,7 @@ export default class LayerAssignmentStep extends AlgorithmStep<SiguiyamaContext>
|
|
|
if(!edgeSubdivisions)
|
|
|
throw new LayerAssignmentStepError("Edge subdivisions information is undefined!")
|
|
|
|
|
|
- if(graph.isAcyclic())
|
|
|
+ if(!graph.isAcyclic())
|
|
|
throw new LayerAssignmentStepError("Graph is acyclic, can not assign layers to an acyclic graph!");
|
|
|
|
|
|
const layering = this.longestPathAlgorithm(graph);
|
|
|
@@ -128,6 +128,8 @@ export default class LayerAssignmentStep extends AlgorithmStep<SiguiyamaContext>
|
|
|
graph.removeEdge(edgeId);
|
|
|
|
|
|
const fromLayer = layering.getLayerOf(edgeFrom)!;
|
|
|
+ const toLayer = layering.getLayerOf(edgeTo)!;
|
|
|
+ const direction = Math.sign(toLayer - fromLayer);
|
|
|
let previousNode = edgeFrom;
|
|
|
|
|
|
const segments: Edge<Node>[] = [];
|
|
|
@@ -137,7 +139,7 @@ export default class LayerAssignmentStep extends AlgorithmStep<SiguiyamaContext>
|
|
|
const dummy = new DummyNode(0, 0, edgeId, `dummy-${edgeId}-${i}`);
|
|
|
|
|
|
graph.addNode(dummy);
|
|
|
- layering.assign(dummy, fromLayer - i);
|
|
|
+ layering.assign(dummy, fromLayer + direction * i);
|
|
|
dummies.push(dummy);
|
|
|
|
|
|
const segment = new Edge(previousNode, dummy, [], `${edgeId}_segment_${i}`);
|
|
|
@@ -159,4 +161,4 @@ export default class LayerAssignmentStep extends AlgorithmStep<SiguiyamaContext>
|
|
|
|
|
|
subdivisions.set(edgeId, { originalEdge: edge, segments, dummies });
|
|
|
}
|
|
|
-}
|
|
|
+}
|