Skip to content

Commit 76ddad3

Browse files
authored
Merge pull request #108 from devolo/feature/allow-triangleless-sugiyama-graph
Add option to draw edges in Sugiyama-style graphs without arrowheads
2 parents 5d3f6e8 + 9e30905 commit 76ddad3

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

lib/layered/SugiyamaAlgorithm.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class SugiyamaAlgorithm extends Algorithm {
1616
var nodeCount = 1;
1717

1818
SugiyamaAlgorithm(this.configuration) {
19-
renderer = SugiyamaEdgeRenderer(nodeData, edgeData, configuration.bendPointShape);
19+
renderer = SugiyamaEdgeRenderer(nodeData, edgeData, configuration.bendPointShape, configuration.addTriangleToEdge);
2020
}
2121

2222
int get dummyId => 'Dummy ${nodeCount++}'.hashCode;

lib/layered/SugiyamaConfiguration.dart

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class SugiyamaConfiguration {
1818
BendPointShape bendPointShape = SharpBendPointShape();
1919
CoordinateAssignment coordinateAssignment = CoordinateAssignment.Average;
2020

21+
bool addTriangleToEdge = true;
22+
2123
int getLevelSeparation() {
2224
return levelSeparation;
2325
}

lib/layered/SugiyamaEdgeRenderer.dart

+22-9
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ class SugiyamaEdgeRenderer extends ArrowEdgeRenderer {
44
Map<Node, SugiyamaNodeData> nodeData;
55
Map<Edge, SugiyamaEdgeData> edgeData;
66
BendPointShape bendPointShape;
7+
bool addTriangleToEdge;
78

8-
SugiyamaEdgeRenderer(this.nodeData, this.edgeData, this.bendPointShape);
9+
SugiyamaEdgeRenderer(this.nodeData, this.edgeData, this.bendPointShape, this.addTriangleToEdge);
910

1011
var path = Path();
1112

@@ -51,9 +52,6 @@ class SugiyamaEdgeRenderer extends ArrowEdgeRenderer {
5152
bendPoints[size - 4], bendPoints[size - 3], bendPoints[size - 2], bendPoints[size - 1], destination);
5253
}
5354

54-
final triangleCentroid = drawTriangle(
55-
canvas, edgeTrianglePaint ?? trianglePaint, clippedLine[0], clippedLine[1], clippedLine[2], clippedLine[3]);
56-
5755
path.reset();
5856
path.moveTo(bendPoints[0], bendPoints[1]);
5957

@@ -83,7 +81,16 @@ class SugiyamaEdgeRenderer extends ArrowEdgeRenderer {
8381
_drawSharpBendPointsEdge(bendPointsWithoutDuplication);
8482
}
8583

86-
path.lineTo(triangleCentroid[0], triangleCentroid[1]);
84+
if (addTriangleToEdge) {
85+
final triangleCentroid = drawTriangle(
86+
canvas, edgeTrianglePaint ?? trianglePaint, clippedLine[0], clippedLine[1], clippedLine[2], clippedLine[3]);
87+
88+
path.lineTo(triangleCentroid[0], triangleCentroid[1]);
89+
} else {
90+
final stopX = x1 + destination.width / 2;
91+
final stopY = y1 + destination.height / 2;
92+
path.lineTo(stopX, stopY);
93+
}
8794
canvas.drawPath(path, currentPaint);
8895
} else {
8996
final startX = x + source.width / 2;
@@ -93,11 +100,17 @@ class SugiyamaEdgeRenderer extends ArrowEdgeRenderer {
93100

94101
clippedLine = clipLine(startX, startY, stopX, stopY, destination);
95102

96-
final triangleCentroid = drawTriangle(
97-
canvas, edgeTrianglePaint ?? trianglePaint, clippedLine[0], clippedLine[1], clippedLine[2], clippedLine[3]);
103+
if (addTriangleToEdge) {
104+
final triangleCentroid = drawTriangle(
105+
canvas, edgeTrianglePaint ?? trianglePaint, clippedLine[0],
106+
clippedLine[1], clippedLine[2], clippedLine[3]);
98107

99-
canvas.drawLine(
100-
Offset(clippedLine[0], clippedLine[1]), Offset(triangleCentroid[0], triangleCentroid[1]), currentPaint);
108+
canvas.drawLine(
109+
Offset(clippedLine[0], clippedLine[1]), Offset(triangleCentroid[0], triangleCentroid[1]), currentPaint);
110+
} else {
111+
canvas.drawLine(
112+
Offset(clippedLine[0], clippedLine[1]), Offset(stopX, stopY), currentPaint);
113+
}
101114
}
102115
});
103116
}

0 commit comments

Comments
 (0)