Refactor ElkSharp hybrid routing and document speed path
This commit is contained in:
@@ -23,31 +23,48 @@ public sealed class ElkSharpWorkflowRenderLayoutEngine : INamedWorkflowRenderGra
|
||||
ArgumentNullException.ThrowIfNull(graph);
|
||||
|
||||
request ??= new WorkflowRenderLayoutRequest();
|
||||
var direction = request.Direction == WorkflowRenderLayoutDirection.LeftToRight
|
||||
? ElkLayoutDirection.LeftToRight
|
||||
: ElkLayoutDirection.TopToBottom;
|
||||
var effort = request.Effort switch
|
||||
{
|
||||
WorkflowRenderLayoutEffort.Draft => ElkLayoutEffort.Draft,
|
||||
WorkflowRenderLayoutEffort.Balanced => ElkLayoutEffort.Balanced,
|
||||
_ => ElkLayoutEffort.Best,
|
||||
};
|
||||
var elkGraph = new ElkGraph
|
||||
{
|
||||
Id = graph.Id,
|
||||
Nodes = graph.Nodes.Select(MapNode).ToArray(),
|
||||
Edges = graph.Edges.Select(MapEdge).ToArray(),
|
||||
};
|
||||
var layoutOptions = new ElkLayoutOptions
|
||||
{
|
||||
Direction = direction,
|
||||
NodeSpacing = request.NodeSpacing,
|
||||
LayerSpacing = request.LayerSpacing,
|
||||
Effort = effort,
|
||||
OrderingIterations = request.OrderingIterations,
|
||||
PlacementIterations = request.PlacementIterations,
|
||||
};
|
||||
if (direction == ElkLayoutDirection.LeftToRight
|
||||
&& effort == ElkLayoutEffort.Best)
|
||||
{
|
||||
layoutOptions = layoutOptions with
|
||||
{
|
||||
IterativeRouting = new IterativeRoutingOptions
|
||||
{
|
||||
Enabled = true,
|
||||
Mode = IterativeRoutingMode.HybridDeterministic,
|
||||
MaxRepairWaves = 1,
|
||||
MaxParallelRepairBuilds = Math.Max(1, Environment.ProcessorCount),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
var elkResult = await elkLayoutEngine.LayoutAsync(
|
||||
elkGraph,
|
||||
new ElkLayoutOptions
|
||||
{
|
||||
Direction = request.Direction == WorkflowRenderLayoutDirection.LeftToRight
|
||||
? ElkLayoutDirection.LeftToRight
|
||||
: ElkLayoutDirection.TopToBottom,
|
||||
NodeSpacing = request.NodeSpacing,
|
||||
LayerSpacing = request.LayerSpacing,
|
||||
Effort = request.Effort switch
|
||||
{
|
||||
WorkflowRenderLayoutEffort.Draft => ElkLayoutEffort.Draft,
|
||||
WorkflowRenderLayoutEffort.Balanced => ElkLayoutEffort.Balanced,
|
||||
_ => ElkLayoutEffort.Best,
|
||||
},
|
||||
OrderingIterations = request.OrderingIterations,
|
||||
PlacementIterations = request.PlacementIterations,
|
||||
},
|
||||
layoutOptions,
|
||||
cancellationToken);
|
||||
|
||||
return new WorkflowRenderLayoutResult
|
||||
|
||||
Reference in New Issue
Block a user