// Union of reg1 and reg2 public static void Union(Region reg1, Region reg2) { if (reg1 == reg2 | reg2.rects.Length == 0) { return; } if (reg1.rects.Length == 0) { reg1.rects = (RectangleF[])reg2.rects.Clone(); reg1.extent = reg2.extent; return; } // Region 1 completely subsumes region 2 RectangleF reg1Extent = reg1.extent; RectangleF reg2Extent = reg2.extent; if (reg1.rects.Length == 1 && reg1Extent.Left <= reg2Extent.Left && reg1Extent.Top <= reg2Extent.Top && reg1Extent.Right >= reg2Extent.Right && reg1Extent.Bottom >= reg2Extent.Bottom) { return; } // Region 2 completely subsumes region 1 if (reg2.rects.Length == 1 && (reg2Extent.Left <= reg1Extent.Left) && reg2Extent.Top <= reg1Extent.Top && reg2Extent.Right >= reg1Extent.Right && reg2Extent.Bottom >= reg1Extent.Bottom) { reg1.rects = (RectangleF[])reg2.rects.Clone(); reg1.extent = reg2.extent; return; } Region union = RegionOperation(reg1, reg2, RegionOperationType.Union); reg1.rects = union.rects; reg1.extent = RectangleF.Union(reg1.extent, reg2.extent); }