コード例 #1
0
 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)));
 }
コード例 #2
0
        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];
        }