Esempio n. 1
0
        public static Polygon CreateRectInstance(Rectangle shape, List<MeshNode> nodesToUse, List<Polygon> polygons)
        {
            MeshNode leftUpper = null;
            MeshNode rightUpper = null;
            MeshNode rightLower = null;
            MeshNode leftLower = null;

            foreach(MeshNode node in nodesToUse)
            {
            // ReSharper disable CompareOfFloatsByEqualityOperator
                // I expect all node coordinates to be rounding-error-free
                if (node.mVector.X == shape.X && node.mVector.Y == shape.Y)
                    leftUpper = node;
                if (node.mVector.X == shape.X+shape.Width && node.mVector.Y == shape.Y)
                    rightUpper = node;
                if (node.mVector.X == shape.X+shape.Width && node.mVector.Y == shape.Y+shape.Height)
                    rightLower = node;
                if (node.mVector.X == shape.X && node.mVector.Y == shape.Y+shape.Height)
                    leftLower = node;
            // ReSharper restore CompareOfFloatsByEqualityOperator
            }
            if (leftUpper == null)
            {
                leftUpper = new MeshNode(shape.X, shape.Y);
                nodesToUse.Add(leftUpper);
                foreach (Polygon polygon in polygons) polygon.TrySplit(leftUpper);
            }
            if (rightUpper == null)
            {
                rightUpper = new MeshNode(shape.X+shape.Width, shape.Y);
                nodesToUse.Add(rightUpper);
                foreach (Polygon polygon in polygons) polygon.TrySplit(rightUpper);
            }
            if (rightLower == null)
            {
                rightLower = new MeshNode(shape.X+shape.Width, shape.Y+shape.Height);
                nodesToUse.Add(rightLower);
                foreach (Polygon polygon in polygons) polygon.TrySplit(rightLower);
            }
            if (leftLower == null)
            {
                leftLower = new MeshNode(shape.X, shape.Y+shape.Height);
                nodesToUse.Add(leftLower);
                foreach (Polygon polygon in polygons) polygon.TrySplit(leftLower);
            }
            Polygon result = new Polygon(new List<MeshNode> {leftUpper, rightUpper, rightLower, leftLower});
            foreach (MeshNode node in nodesToUse) result.TrySplit(node);
            return result;
        }