public void PerimeterViolationArea() { Aver.AreEqual(0, CartesianUtils.CalculatePerimeterViolationArea(new Rectangle(0, 0, 100, 100), new Rectangle(0, 0, 100, 100))); Aver.AreEqual(100, CartesianUtils.CalculatePerimeterViolationArea(new Rectangle(0, 0, 100, 100), new Rectangle(1, 0, 100, 100))); Aver.AreEqual(100, CartesianUtils.CalculatePerimeterViolationArea(new Rectangle(0, 0, 100, 100), new Rectangle(-1, 0, 100, 100))); Aver.AreEqual(20 * 100, CartesianUtils.CalculatePerimeterViolationArea(new Rectangle(0, 0, 100, 100), new Rectangle(-10, -10, 100, 100))); }
private void findPlacementCoordinates(out Rectangle body, out Point target) { Point[] anchorPoints = calcAnchorPoints(1, 1); Rectangle brect = inferBodyRectFromText(new Point(0, 0), Text, Font); Rectangle[] bodyRects = calcBodyRects(anchorPoints, brect.Size); body = bodyRects[(int)m_PreferredPlacement]; target = anchorPoints[(int)m_PreferredPlacement]; int minIdx = 0; int minArea = int.MaxValue; int area; for (int i = 0; i < 8; i++) { Screen screen = Screen.FromRectangle(bodyRects[i]); area = CartesianUtils.CalculatePerimeterViolationArea(screen.Bounds, bodyRects[i]); if (((MapDirection)i == m_PreferredPlacement) && (area == 0)) { body = bodyRects[i]; target = anchorPoints[i]; return; } if (area < minArea) { minArea = area; minIdx = i; } }//for body = bodyRects[minIdx]; target = anchorPoints[minIdx]; }