Exemple #1
0
            public static MultiRectArea getResult(MultiRectArea src1, MultiRectArea src2)
            {
                if (src1 == null || src2 == null || src1.isEmpty() || src2.isEmpty())
                {
                    return(new MultiRectArea());
                }

                MultiRectArea.RectCash dst = new MultiRectArea.RectCash();

                if (!src1.sorted || !src2.sorted ||
                    src1.getRectCount() <= MAX_SIMPLE || src2.getRectCount() <= MAX_SIMPLE)
                {
                    dst.setRect(simpleIntersect(src1, src2), false);
                }
                else
                {
                    java.awt.Rectangle bounds1 = src1.getBounds();
                    java.awt.Rectangle bounds2 = src2.getBounds();
                    java.awt.Rectangle bounds3 = bounds1.intersection(bounds2);
                    if (bounds3.width > 0 && bounds3.height > 0)
                    {
                        intersectRegions(src1.rect, src2.rect, dst, bounds1.height + 2, bounds2.height + 2);
                    }
                }

                return(dst);
            }
Exemple #2
0
            internal MultiRectArea getResult(MultiRectArea src1, MultiRectArea src2)
            {
                if (src1 == null || src1.isEmpty())
                {
                    return(new MultiRectArea(src2));
                }

                if (src2 == null || src2.isEmpty())
                {
                    return(new MultiRectArea(src1));
                }

                dst = new MultiRectArea.RectCash();

                if (!src1.sorted || !src2.sorted ||
                    src1.getRectCount() <= MAX_SIMPLE || src2.getRectCount() <= MAX_SIMPLE)
                {
                    simpleUnion(src1, src2, dst);
                }
                else
                {
                    java.awt.Rectangle bounds1 = src1.getBounds();
                    java.awt.Rectangle bounds2 = src2.getBounds();
                    java.awt.Rectangle bounds3 = bounds1.intersection(bounds2);

                    if (bounds3.width < 0 || bounds3.height < 0)
                    {
                        if (bounds1.y + bounds1.height < bounds2.y)
                        {
                            dst.setRect(addVerRegion(src1.rect, src2.rect), false);
                        }
                        else
                        if (bounds2.y + bounds2.height < bounds1.y)
                        {
                            dst.setRect(addVerRegion(src2.rect, src1.rect), false);
                        }
                        else
                        if (bounds1.x < bounds2.x)
                        {
                            dst.setRect(addHorRegion(src1.rect, src2.rect), false);
                        }
                        else
                        {
                            dst.setRect(addHorRegion(src2.rect, src1.rect), false);
                        }
                    }
                    else
                    {
                        unionRegions(src1.rect, src2.rect, bounds1.height + 2, bounds2.height + 2);
                    }
                }

                return(dst);
            }
Exemple #3
0
 static void simpleUnion(MultiRectArea src1, MultiRectArea src2, MultiRectArea dst)
 {
     if (src1.getRectCount() < src2.getRectCount())
     {
         simpleUnion(src2, src1, dst);
     }
     else
     {
         Subtraction.simpleSubtract(src1, src2, dst);
         int pos  = dst.rect[0];
         int size = src2.rect[0] - 1;
         dst.rect = checkBufSize(dst.rect, size);
         java.lang.SystemJ.arraycopy(src2.rect, 1, dst.rect, pos, size);
         dst.resort();
     }
 }
Exemple #4
0
            public static MultiRectArea getResult(MultiRectArea src1, MultiRectArea src2)
            {
                if (src1 == null || src2 == null || src1.isEmpty() || src2.isEmpty()) {
                return new MultiRectArea();
                }

                MultiRectArea.RectCash dst = new MultiRectArea.RectCash();

                if (!src1.sorted || !src2.sorted ||
                   src1.getRectCount() <= MAX_SIMPLE || src2.getRectCount() <= MAX_SIMPLE)
                {
                dst.setRect(simpleIntersect(src1, src2), false);
                } else {
                java.awt.Rectangle bounds1 = src1.getBounds();
                java.awt.Rectangle bounds2 = src2.getBounds();
                java.awt.Rectangle bounds3 = bounds1.intersection(bounds2);
                if (bounds3.width > 0 && bounds3.height > 0) {
                    intersectRegions(src1.rect, src2.rect, dst, bounds1.height + 2, bounds2.height + 2);
                }
                }

                return dst;
            }
Exemple #5
0
 static void simpleUnion(MultiRectArea src1, MultiRectArea src2, MultiRectArea dst)
 {
     if (src1.getRectCount() < src2.getRectCount()) {
     simpleUnion(src2, src1, dst);
     } else {
     Subtraction.simpleSubtract(src1, src2, dst);
     int pos = dst.rect[0];
     int size = src2.rect[0] - 1;
     dst.rect = checkBufSize(dst.rect, size);
     java.lang.SystemJ.arraycopy(src2.rect,1, dst.rect, pos, size);
     dst.resort();
     }
 }
Exemple #6
0
            internal MultiRectArea getResult(MultiRectArea src1, MultiRectArea src2)
            {
                if (src1 == null || src1.isEmpty()) {
                return new MultiRectArea(src2);
                }

                if (src2 == null || src2.isEmpty()) {
                return new MultiRectArea(src1);
                }

                dst = new MultiRectArea.RectCash();

                if (!src1.sorted || !src2.sorted ||
                   src1.getRectCount() <= MAX_SIMPLE || src2.getRectCount() <= MAX_SIMPLE)
                {
                simpleUnion(src1, src2, dst);
                } else {
                java.awt.Rectangle bounds1 = src1.getBounds();
                java.awt.Rectangle bounds2 = src2.getBounds();
                java.awt.Rectangle bounds3 = bounds1.intersection(bounds2);

                if (bounds3.width < 0 || bounds3.height < 0) {
                    if (bounds1.y + bounds1.height < bounds2.y) {
                        dst.setRect(addVerRegion(src1.rect, src2.rect), false);
                    } else
                        if (bounds2.y + bounds2.height < bounds1.y) {
                            dst.setRect(addVerRegion(src2.rect, src1.rect), false);
                        } else
                            if (bounds1.x < bounds2.x) {
                                dst.setRect(addHorRegion(src1.rect, src2.rect), false);
                            } else {
                                dst.setRect(addHorRegion(src2.rect, src1.rect), false);
                            }
                } else {
                    unionRegions(src1.rect, src2.rect, bounds1.height + 2, bounds2.height + 2);
                }
                }

                return dst;
            }