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++; }