Exemple #1
0
        void CalculateLabelsX()
        {
            int          i;
            ISolverShell solver = ConstrainedOrdering.CreateSolver();

            for (i = 0; i < pairArray.Length; i++)
            {
                solver.AddVariableWithIdealPosition(i, labelCenters[i], GetLabelWeight(pairArray[i]));
            }

            //add non overlapping constraints between to neighbor labels
            double prevLabelWidth = GetMaxLabelWidth(pairArray[0]);

            for (i = 0; i < pairArray.Length - 1; i++)
            {
                solver.AddLeftRightSeparationConstraint(i, i + 1,
                                                        (prevLabelWidth +
                                                         (prevLabelWidth = GetMaxLabelWidth(pairArray[i + 1]))) / 2 +
                                                        settings.NodeSeparation);
            }

            for (i = 0; i < labelCenters.Length; i++)
            {
                double x = labelCenters[i] = solver.GetVariableResolvedPosition(i);
                foreach (Label label in PairLabels(pairArray[i]))
                {
                    label.Center = new Point(x, label.Center.Y);
                }
            }
        }
 void ExtractPositionsFromSolver(int[] layer, ISolverShell solver, double[] positions)
 {
     solver.Solve();
     for (int i = 0; i < layer.Length; i++)
     {
         database.Anchors[layer[i]].X = positions[i] = solver.GetVariableResolvedPosition(layer[i]);
     }
 }
        void SetXPositions()
        {
            ISolverShell solver = InitSolverWithoutOrder();

            ImproveWithAdjacentSwaps();
            PutLayerNodeSeparationsIntoSolver(solver);
            solver.Solve();
            SortLayers(solver);
            for (int i = 0; i < LayerArrays.Y.Length; i++)
            {
                database.Anchors[i].X = solver.GetVariableResolvedPosition(i);
            }
        }
        void SortLayerBasedOnSolution(int[] layer, ISolverShell solver)
        {
            int length    = layer.Length;
            var positions = new double[length];
            int k         = 0;

            foreach (int v in layer)
            {
                positions[k++] = solver.GetVariableResolvedPosition(v);
            }

            Array.Sort(positions, layer);
            int i = 0;

            foreach (int v in layer)
            {
                LayerArrays.X[v] = i++;
            }
        }
 void ExtractPositionsFromSolver(int[] layer, ISolverShell solver, double[] positions) {
     solver.Solve();
     for (int i = 0; i < layer.Length; i++)
         database.Anchors[layer[i]].X = positions[i] = solver.GetVariableResolvedPosition(layer[i]);
 }
        void SortLayerBasedOnSolution(int[] layer, ISolverShell solver) {
            int length = layer.Length;
            var positions = new double[length];
            int k = 0;
            foreach (int v in layer)
                positions[k++] = solver.GetVariableResolvedPosition(v);

            Array.Sort(positions, layer);
            int i = 0;
            foreach (int v in layer)
                LayerArrays.X[v] = i++;
        }