Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }