private int CrossingMinimizationBetweenLayers( [NotNull, ItemNotNull] ref AlternatingLayer alternatingLayer, int actualLayerIndex, int nextLayerIndex, bool enableSameMeasureOptimization, int prevCrossCount, int phase) { // Decide which way we are sweeping (up or down) // Straight = down, reverse = up bool straightSweep = actualLayerIndex < nextLayerIndex; AlternatingLayer nextAlternatingLayer = alternatingLayer.Clone(); // 1 AppendSegmentsToAlternatingLayer(nextAlternatingLayer, straightSweep); // 2 ComputeMeasureValues(alternatingLayer, nextLayerIndex, straightSweep); nextAlternatingLayer.SetPositions(); // 3 nextAlternatingLayer = InitialOrderingOfNextLayer(nextAlternatingLayer, _layers[nextLayerIndex], straightSweep); // 4 PlaceQVertices(nextAlternatingLayer, _layers[nextLayerIndex], straightSweep); nextAlternatingLayer.SetPositions(); // 5 int crossCount = DoCrossCountingAndOptimization( alternatingLayer, nextAlternatingLayer, straightSweep, enableSameMeasureOptimization, phase == 2, prevCrossCount); // 6 nextAlternatingLayer.EnsureAlternatingAndPositions(); alternatingLayer = nextAlternatingLayer; return(crossCount); }
private int CrossingMinimizationBetweenLayers( ref AlternatingLayer alternatingLayer, int actualLayerIndex, int nextLayerIndex, bool enableSameMeasureOptimization, int prevCrossCount, int phase, CancellationToken cancellationToken) { //decide which way we are sweeping (up or down) //straight = down, reverse = up bool straightSweep = (actualLayerIndex < nextLayerIndex); var nextAlternatingLayer = alternatingLayer.Clone(); /* 1 */ AppendSegmentsToAlternatingLayer(nextAlternatingLayer, straightSweep); /* 2 */ ComputeMeasureValues(alternatingLayer, nextLayerIndex, straightSweep, cancellationToken); nextAlternatingLayer.SetPositions(); /* 3 */ nextAlternatingLayer = InitialOrderingOfNextLayer(nextAlternatingLayer, _layers[nextLayerIndex], straightSweep); /* 4 */ PlaceQVertices(nextAlternatingLayer, _layers[nextLayerIndex], straightSweep, cancellationToken); nextAlternatingLayer.SetPositions(); /* 5 */ int crossCount = DoCrossCountingAndOptimization(alternatingLayer, nextAlternatingLayer, straightSweep, enableSameMeasureOptimization, (phase == 2), prevCrossCount, cancellationToken); /* 6 */ nextAlternatingLayer.EnsureAlternatingAndPositions(); alternatingLayer = nextAlternatingLayer; return(crossCount); }