home *** CD-ROM | disk | FTP | other *** search
- package jclass.util;
-
- import java.awt.Rectangle;
- import java.util.Vector;
-
- public class JCRectUtil {
- public static final int LEFTTORIGHT = 0;
- public static final int TOPTOBOTTOM = 1;
-
- static void appendrectnode(JCRectNode var0, JCRectList var1) {
- var0.next = null;
- if (var1.head == null) {
- var1.head = var0;
- }
-
- if (var1.tail != null) {
- var1.tail.next = var0;
- }
-
- var1.tail = var0;
- }
-
- static void appendrect(Rectangle var0, JCRectList var1) {
- JCRectNode var2 = new JCRectNode();
- var2.rect = new Rectangle(var0.x, var0.y, var0.width, var0.height);
- appendrectnode(var2, var1);
- }
-
- static void sort(JCRectList var0, JCRectList var1, int var2) {
- JCRectNode var6 = var0.head;
-
- int var4;
- for(var4 = 0; var6 != null; ++var4) {
- var6 = var6.next;
- }
-
- Vector var7 = new Vector();
- var6 = var0.head;
-
- for(int var3 = 0; var6 != null; ++var3) {
- var7.addElement(var6);
- var6 = var6.next;
- }
-
- Object var5;
- if (var2 == 0) {
- var5 = new JCRectSortLR();
- } else {
- var5 = new JCRectSortTB();
- }
-
- (new JCqsort(var7, (JCSortInterface)var5)).sort(0);
- var1.head = null;
- var1.tail = null;
-
- for(int var8 = 0; var8 < var4; ++var8) {
- appendrectnode((JCRectNode)var7.elementAt(var8), var1);
- }
-
- }
-
- static void normalize(JCRectList var0) {
- for(JCRectNode var1 = var0.head; var1 != null; var1 = var1.next) {
- if (var1.rect.width < 0) {
- Rectangle var10000 = var1.rect;
- var10000.x += var1.rect.width;
- var1.rect.width = -var1.rect.width;
- }
-
- if (var1.rect.height < 0) {
- Rectangle var2 = var1.rect;
- var2.y += var1.rect.height;
- var1.rect.height = -var1.rect.height;
- }
- }
-
- }
-
- static JCRectList[] make(JCRectList var0) {
- if (var0.head == null) {
- Object var12 = null;
- return (JCRectList[])var12;
- } else {
- int var1 = var0.head.rect.y;
- int var2 = 1;
-
- for(JCRectNode var4 = var0.head.next; var4 != null; var4 = var4.next) {
- if (var4.rect.y != var1) {
- var1 = var4.rect.y;
- ++var2;
- }
- }
-
- int var3 = var2 + 1;
- JCRectList[] var6 = new JCRectList[var3];
- if (var6 == null) {
- return var6;
- } else {
- for(int var9 = 0; var9 < var3; ++var9) {
- var6[var9] = new JCRectList();
- }
-
- int var7 = 0;
- JCRectList var5 = var6[var7];
- JCRectNode var10 = var0.head;
- rl_init(var10.rect, var5);
- var1 = var10.rect.y;
-
- for(JCRectNode var11 = var10.next; var11 != null; var11 = var11.next) {
- if (var11.rect.y == var1) {
- appendrect(var11.rect, var5);
- } else {
- sort(var5, var5, 0);
- ++var7;
- var5 = var6[var7];
- var1 = var11.rect.y;
- rl_init(var11.rect, var5);
- }
- }
-
- sort(var5, var5, 0);
- return var6;
- }
- }
- }
-
- static double lg_metric(JCPointRect var0) {
- return (double)(var0.x2 - var0.x1) * (double)(var0.y2 - var0.y1);
- }
-
- static void calc_lg_rect(Rectangle var0, Rectangle var1, Rectangle var2) {
- JCPointRect var3 = new JCPointRect();
- JCPointRect var4 = new JCPointRect();
- JCPointRect var5 = new JCPointRect();
- JCPointRect var6 = new JCPointRect();
- var3.x1 = var1.x;
- var3.x2 = var1.width + var1.x - 1;
- var3.y1 = var1.y;
- var3.y2 = var1.height + var1.y - 1;
- var4.x1 = var2.x;
- var4.x2 = var2.width + var2.x - 1;
- var4.y1 = var2.y;
- var4.y2 = var2.height + var2.y - 1;
- var5.x1 = var0.x;
- var5.x2 = var0.width + var0.x - 1;
- var5.y1 = var0.y;
- var5.y2 = var0.height + var0.y - 1;
- double var9 = (double)(var5.x2 - var5.x1) * (double)(var5.y2 - var5.y1);
- if (var3.x1 == var4.x1 && var3.x2 == var4.x2 && var3.y1 == var4.y1 && var3.y2 == var4.y2) {
- double var7 = (double)(var3.x2 - var3.x1) * (double)(var3.y2 - var3.y1);
- if (var7 > var9) {
- var0.x = var1.x;
- var0.y = var1.y;
- var0.width = var1.width;
- var0.height = var1.height;
- return;
- }
- } else if (Math.abs(var3.y2 - var4.y1) == 1) {
- var6.x1 = Math.max(var3.x1, var4.x1);
- var6.x2 = Math.min(var3.x2, var4.x2);
- var6.y1 = var3.y1;
- var6.y2 = var4.y2;
- if (var6.x1 <= var6.x2) {
- var1.x = var6.x1;
- var1.y = var6.y1;
- var1.width = var6.x2 - var6.x1 + 1;
- var1.height = var6.y2 - var6.y1 + 1;
- double var11 = (double)(var6.x2 - var6.x1) * (double)(var6.y2 - var6.y1);
- if (var11 > var9) {
- var0.x = var1.x;
- var0.y = var1.y;
- var0.width = var1.width;
- var0.height = var1.height;
- return;
- }
- }
- } else if (Math.abs(var3.x2 - var4.x1) == 1) {
- var6.x1 = var3.x1;
- var6.x2 = var4.x2;
- var6.y1 = Math.max(var3.y1, var4.y1);
- var6.y2 = Math.min(var3.y2, var4.y2);
- if (var6.y1 <= var6.y2) {
- var1.x = var6.x1;
- var1.y = var6.y1;
- var1.width = var6.x2 - var6.x1 + 1;
- var1.height = var6.y2 - var6.y1 + 1;
- double var13 = (double)(var6.x2 - var6.x1) * (double)(var6.y2 - var6.y1);
- if (var13 > var9) {
- var0.x = var1.x;
- var0.y = var1.y;
- var0.width = var1.width;
- var0.height = var1.height;
- }
- }
- }
-
- }
-
- static void search_lg_rect(JCRectList[] var0, int var1, JCRectNode var2, Rectangle var3, Rectangle var4) {
- JCRectList var5 = var0[var1];
- if (var5 != null) {
- for(JCRectNode var7 = var2; var7 != null; var7 = var7.next) {
- calc_lg_rect(var3, var4, var7.rect);
- }
-
- int var9 = var1 + 1;
-
- for(JCRectList var8 = var0[var9]; var8.head != null; var8 = var0[var9]) {
- for(JCRectNode var10 = var8.head; var10 != null; var10 = var10.next) {
- Rectangle var6 = new Rectangle(var4.x, var4.y, var4.width, var4.height);
- calc_lg_rect(var3, var6, var10.rect);
- search_lg_rect(var0, var9, var10, var3, var6);
- }
-
- ++var9;
- }
-
- }
- }
-
- static boolean includesrect(Rectangle var0, Rectangle var1) {
- return var0.x <= var1.x && var0.y <= var1.y && var0.x + var0.width >= var1.x + var1.width && var0.y + var0.height >= var1.y + var1.height;
- }
-
- static void appendremaining(Rectangle var0, Rectangle var1, JCRectList var2) {
- Rectangle var8 = new Rectangle();
- if (!includesrect(var0, var1)) {
- if (!var0.intersects(var1)) {
- appendrect(var1, var2);
- } else {
- Rectangle var7 = new Rectangle(var1.x, var1.y, var1.width, var1.height);
- int var6 = var0.y - var7.y;
- if (var6 > 0) {
- var8.x = var7.x;
- var8.y = var7.y;
- var8.width = var7.width;
- var8.height = var6;
- appendrect(var8, var2);
- var7.y += var6;
- var7.height -= var6;
- }
-
- int var4 = var0.y + var0.height;
- var6 = var7.y + var7.height - var4;
- if (var6 > 0) {
- var8.x = var7.x;
- var8.y = var4;
- var8.width = var7.width;
- var8.height = var6;
- appendrect(var8, var2);
- var7.height -= var6;
- }
-
- int var5 = var0.x - var7.x;
- if (var5 > 0) {
- var8.x = var7.x;
- var8.y = var7.y;
- var8.width = var5;
- var8.height = var7.height;
- appendrect(var8, var2);
- var7.x += var5;
- var7.width -= var5;
- }
-
- int var3 = var0.x + var0.width;
- var5 = var7.x + var7.width - var3;
- if (var5 > 0) {
- var8.x = var3;
- var8.y = var7.y;
- var8.width = var5;
- var8.height = var7.height;
- appendrect(var8, var2);
- var7.width -= var5;
- }
-
- }
- }
- }
-
- static Rectangle bounding(Rectangle var0, Rectangle var1) {
- Rectangle var2 = new Rectangle();
- if (var0.width != 0 && var0.height != 0) {
- if (var1.width != 0 && var1.height != 0) {
- var2.x = Math.min(var0.x, var1.x);
- var2.y = Math.min(var0.y, var1.y);
- var2.width = Math.max(var0.x + var0.width, var1.x + var1.width) - var2.x;
- var2.height = Math.max(var0.y + var0.height, var1.y + var1.height) - var2.y;
- } else {
- var2 = var0;
- }
- } else {
- var2 = var1;
- }
-
- return var2;
- }
-
- static void intersect(Rectangle var0, Rectangle var1, Rectangle var2) {
- if (var0 != null && var1 != null && var2 != null) {
- var2.x = var2.y = var2.width = var2.height = 0;
- if (var0.width != 0 && var0.height != 0 && var1.width != 0 && var1.height != 0) {
- var2.x = Math.max(var0.x, var1.x);
- var2.y = Math.max(var0.y, var1.y);
- int var3 = Math.min(var0.x + var0.width, var1.x + var1.width);
- int var4 = Math.min(var0.y + var0.height, var1.y + var1.height);
- var2.width = Math.max(var3 - var2.x, 0);
- var2.height = Math.max(var4 - var2.y, 0);
- }
- }
- }
-
- static boolean isnull(Rectangle var0) {
- return var0.width == 0 || var0.height == 0;
- }
-
- public static void rl_init(Rectangle var0, JCRectList var1) {
- JCRectNode var2 = new JCRectNode();
- var2.rect = new Rectangle(var0.x, var0.y, var0.width, var0.height);
- var1.head = var1.tail = var2;
- }
-
- public static void rl_remove(Rectangle var0, JCRectList var1, JCRectList var2) {
- JCRectList var4 = new JCRectList();
-
- for(JCRectNode var3 = var1.head; var3 != null; var3 = var3.next) {
- appendremaining(var0, var3.rect, var4);
- }
-
- var2.head = var4.head;
- var2.tail = var4.tail;
- }
-
- public static Rectangle largest_rect(JCRectList var0) {
- Object var4 = null;
- normalize(var0);
- sort(var0, var0, 1);
- JCRectList[] var8 = make(var0);
- Rectangle var6 = var8[0].head.rect;
- Rectangle var1 = new Rectangle(var6.x, var6.y, var6.width, var6.height);
- int var7 = 0;
-
- for(JCRectList var5 = var8[var7]; var5.head != null; var5 = var8[var7]) {
- for(JCRectNode var3 = var5.head; var3 != null; var3 = var3.next) {
- Rectangle var2 = new Rectangle(var3.rect.x, var3.rect.y, var3.rect.width, var3.rect.height);
- search_lg_rect(var8, var7, var3, var1, var2);
- }
-
- ++var7;
- }
-
- return var1;
- }
- }
-