/// <summary> /// Gets the possible sides for the given label and the given derivative point. /// </summary> /// <returns>An enumeration of the possible sides (-1 or 1).</returns> static double[] GetPossibleSides(Label.PlacementSide side, Point derivative) { if (derivative.Length == 0) { side = Label.PlacementSide.Any; } switch (side) { case Label.PlacementSide.Port: return(new double[] { -1 }); case Label.PlacementSide.Starboard: return(new double[] { 1 }); case Label.PlacementSide.Top: if (ApproximateComparer.Close(derivative.X, 0)) { // If the line is vertical, Top becomes Left return(GetPossibleSides(Label.PlacementSide.Left, derivative)); } return(new double[] { derivative.X < 0 ? 1 : -1 }); case Label.PlacementSide.Bottom: if (ApproximateComparer.Close(derivative.X, 0)) { // If the line is vertical, Bottom becomes Right return(GetPossibleSides(Label.PlacementSide.Right, derivative)); } return(new double[] { derivative.X < 0 ? -1 : 1 }); case Label.PlacementSide.Left: if (ApproximateComparer.Close(derivative.Y, 0)) { // If the line is horizontal, Left becomes Top return(GetPossibleSides(Label.PlacementSide.Top, derivative)); } return(new double[] { derivative.Y < 0 ? -1 : 1 }); case Label.PlacementSide.Right: if (ApproximateComparer.Close(derivative.Y, 0)) { // If the line is horizontal, Right becomes Bottom return(GetPossibleSides(Label.PlacementSide.Bottom, derivative)); } return(new double[] { derivative.Y < 0 ? 1 : -1 }); default: return(new double[] { -1, 1 }); } }
private static IEnumerable <double> GetPossibleSides(Label.PlacementSide side, Point derivative) { MethodInfo methodInfo = typeof(EdgeLabelPlacement).GetMethod("GetPossibleSides", BindingFlags.Static | BindingFlags.NonPublic); return((IEnumerable <double>)methodInfo.Invoke(null, new object[] { side, derivative })); }