home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / JCLASS.BIN / KLG.JAR / jclass / util / JCRectUtil.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-12-05  |  5.0 KB  |  354 lines

  1. package jclass.util;
  2.  
  3. import java.awt.Rectangle;
  4. import java.util.Vector;
  5.  
  6. public class JCRectUtil {
  7.    public static final int LEFTTORIGHT = 0;
  8.    public static final int TOPTOBOTTOM = 1;
  9.  
  10.    static void appendrectnode(JCRectNode var0, JCRectList var1) {
  11.       var0.next = null;
  12.       if (var1.head == null) {
  13.          var1.head = var0;
  14.       }
  15.  
  16.       if (var1.tail != null) {
  17.          var1.tail.next = var0;
  18.       }
  19.  
  20.       var1.tail = var0;
  21.    }
  22.  
  23.    static void appendrect(Rectangle var0, JCRectList var1) {
  24.       JCRectNode var2 = new JCRectNode();
  25.       var2.rect = new Rectangle(var0.x, var0.y, var0.width, var0.height);
  26.       appendrectnode(var2, var1);
  27.    }
  28.  
  29.    static void sort(JCRectList var0, JCRectList var1, int var2) {
  30.       JCRectNode var6 = var0.head;
  31.  
  32.       int var4;
  33.       for(var4 = 0; var6 != null; ++var4) {
  34.          var6 = var6.next;
  35.       }
  36.  
  37.       Vector var7 = new Vector();
  38.       var6 = var0.head;
  39.  
  40.       for(int var3 = 0; var6 != null; ++var3) {
  41.          var7.addElement(var6);
  42.          var6 = var6.next;
  43.       }
  44.  
  45.       Object var5;
  46.       if (var2 == 0) {
  47.          var5 = new JCRectSortLR();
  48.       } else {
  49.          var5 = new JCRectSortTB();
  50.       }
  51.  
  52.       (new JCqsort(var7, (JCSortInterface)var5)).sort(0);
  53.       var1.head = null;
  54.       var1.tail = null;
  55.  
  56.       for(int var8 = 0; var8 < var4; ++var8) {
  57.          appendrectnode((JCRectNode)var7.elementAt(var8), var1);
  58.       }
  59.  
  60.    }
  61.  
  62.    static void normalize(JCRectList var0) {
  63.       for(JCRectNode var1 = var0.head; var1 != null; var1 = var1.next) {
  64.          if (var1.rect.width < 0) {
  65.             Rectangle var10000 = var1.rect;
  66.             var10000.x += var1.rect.width;
  67.             var1.rect.width = -var1.rect.width;
  68.          }
  69.  
  70.          if (var1.rect.height < 0) {
  71.             Rectangle var2 = var1.rect;
  72.             var2.y += var1.rect.height;
  73.             var1.rect.height = -var1.rect.height;
  74.          }
  75.       }
  76.  
  77.    }
  78.  
  79.    static JCRectList[] make(JCRectList var0) {
  80.       if (var0.head == null) {
  81.          Object var12 = null;
  82.          return (JCRectList[])var12;
  83.       } else {
  84.          int var1 = var0.head.rect.y;
  85.          int var2 = 1;
  86.  
  87.          for(JCRectNode var4 = var0.head.next; var4 != null; var4 = var4.next) {
  88.             if (var4.rect.y != var1) {
  89.                var1 = var4.rect.y;
  90.                ++var2;
  91.             }
  92.          }
  93.  
  94.          int var3 = var2 + 1;
  95.          JCRectList[] var6 = new JCRectList[var3];
  96.          if (var6 == null) {
  97.             return var6;
  98.          } else {
  99.             for(int var9 = 0; var9 < var3; ++var9) {
  100.                var6[var9] = new JCRectList();
  101.             }
  102.  
  103.             int var7 = 0;
  104.             JCRectList var5 = var6[var7];
  105.             JCRectNode var10 = var0.head;
  106.             rl_init(var10.rect, var5);
  107.             var1 = var10.rect.y;
  108.  
  109.             for(JCRectNode var11 = var10.next; var11 != null; var11 = var11.next) {
  110.                if (var11.rect.y == var1) {
  111.                   appendrect(var11.rect, var5);
  112.                } else {
  113.                   sort(var5, var5, 0);
  114.                   ++var7;
  115.                   var5 = var6[var7];
  116.                   var1 = var11.rect.y;
  117.                   rl_init(var11.rect, var5);
  118.                }
  119.             }
  120.  
  121.             sort(var5, var5, 0);
  122.             return var6;
  123.          }
  124.       }
  125.    }
  126.  
  127.    static double lg_metric(JCPointRect var0) {
  128.       return (double)(var0.x2 - var0.x1) * (double)(var0.y2 - var0.y1);
  129.    }
  130.  
  131.    static void calc_lg_rect(Rectangle var0, Rectangle var1, Rectangle var2) {
  132.       JCPointRect var3 = new JCPointRect();
  133.       JCPointRect var4 = new JCPointRect();
  134.       JCPointRect var5 = new JCPointRect();
  135.       JCPointRect var6 = new JCPointRect();
  136.       var3.x1 = var1.x;
  137.       var3.x2 = var1.width + var1.x - 1;
  138.       var3.y1 = var1.y;
  139.       var3.y2 = var1.height + var1.y - 1;
  140.       var4.x1 = var2.x;
  141.       var4.x2 = var2.width + var2.x - 1;
  142.       var4.y1 = var2.y;
  143.       var4.y2 = var2.height + var2.y - 1;
  144.       var5.x1 = var0.x;
  145.       var5.x2 = var0.width + var0.x - 1;
  146.       var5.y1 = var0.y;
  147.       var5.y2 = var0.height + var0.y - 1;
  148.       double var9 = (double)(var5.x2 - var5.x1) * (double)(var5.y2 - var5.y1);
  149.       if (var3.x1 == var4.x1 && var3.x2 == var4.x2 && var3.y1 == var4.y1 && var3.y2 == var4.y2) {
  150.          double var7 = (double)(var3.x2 - var3.x1) * (double)(var3.y2 - var3.y1);
  151.          if (var7 > var9) {
  152.             var0.x = var1.x;
  153.             var0.y = var1.y;
  154.             var0.width = var1.width;
  155.             var0.height = var1.height;
  156.             return;
  157.          }
  158.       } else if (Math.abs(var3.y2 - var4.y1) == 1) {
  159.          var6.x1 = Math.max(var3.x1, var4.x1);
  160.          var6.x2 = Math.min(var3.x2, var4.x2);
  161.          var6.y1 = var3.y1;
  162.          var6.y2 = var4.y2;
  163.          if (var6.x1 <= var6.x2) {
  164.             var1.x = var6.x1;
  165.             var1.y = var6.y1;
  166.             var1.width = var6.x2 - var6.x1 + 1;
  167.             var1.height = var6.y2 - var6.y1 + 1;
  168.             double var11 = (double)(var6.x2 - var6.x1) * (double)(var6.y2 - var6.y1);
  169.             if (var11 > var9) {
  170.                var0.x = var1.x;
  171.                var0.y = var1.y;
  172.                var0.width = var1.width;
  173.                var0.height = var1.height;
  174.                return;
  175.             }
  176.          }
  177.       } else if (Math.abs(var3.x2 - var4.x1) == 1) {
  178.          var6.x1 = var3.x1;
  179.          var6.x2 = var4.x2;
  180.          var6.y1 = Math.max(var3.y1, var4.y1);
  181.          var6.y2 = Math.min(var3.y2, var4.y2);
  182.          if (var6.y1 <= var6.y2) {
  183.             var1.x = var6.x1;
  184.             var1.y = var6.y1;
  185.             var1.width = var6.x2 - var6.x1 + 1;
  186.             var1.height = var6.y2 - var6.y1 + 1;
  187.             double var13 = (double)(var6.x2 - var6.x1) * (double)(var6.y2 - var6.y1);
  188.             if (var13 > var9) {
  189.                var0.x = var1.x;
  190.                var0.y = var1.y;
  191.                var0.width = var1.width;
  192.                var0.height = var1.height;
  193.             }
  194.          }
  195.       }
  196.  
  197.    }
  198.  
  199.    static void search_lg_rect(JCRectList[] var0, int var1, JCRectNode var2, Rectangle var3, Rectangle var4) {
  200.       JCRectList var5 = var0[var1];
  201.       if (var5 != null) {
  202.          for(JCRectNode var7 = var2; var7 != null; var7 = var7.next) {
  203.             calc_lg_rect(var3, var4, var7.rect);
  204.          }
  205.  
  206.          int var9 = var1 + 1;
  207.  
  208.          for(JCRectList var8 = var0[var9]; var8.head != null; var8 = var0[var9]) {
  209.             for(JCRectNode var10 = var8.head; var10 != null; var10 = var10.next) {
  210.                Rectangle var6 = new Rectangle(var4.x, var4.y, var4.width, var4.height);
  211.                calc_lg_rect(var3, var6, var10.rect);
  212.                search_lg_rect(var0, var9, var10, var3, var6);
  213.             }
  214.  
  215.             ++var9;
  216.          }
  217.  
  218.       }
  219.    }
  220.  
  221.    static boolean includesrect(Rectangle var0, Rectangle var1) {
  222.       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;
  223.    }
  224.  
  225.    static void appendremaining(Rectangle var0, Rectangle var1, JCRectList var2) {
  226.       Rectangle var8 = new Rectangle();
  227.       if (!includesrect(var0, var1)) {
  228.          if (!var0.intersects(var1)) {
  229.             appendrect(var1, var2);
  230.          } else {
  231.             Rectangle var7 = new Rectangle(var1.x, var1.y, var1.width, var1.height);
  232.             int var6 = var0.y - var7.y;
  233.             if (var6 > 0) {
  234.                var8.x = var7.x;
  235.                var8.y = var7.y;
  236.                var8.width = var7.width;
  237.                var8.height = var6;
  238.                appendrect(var8, var2);
  239.                var7.y += var6;
  240.                var7.height -= var6;
  241.             }
  242.  
  243.             int var4 = var0.y + var0.height;
  244.             var6 = var7.y + var7.height - var4;
  245.             if (var6 > 0) {
  246.                var8.x = var7.x;
  247.                var8.y = var4;
  248.                var8.width = var7.width;
  249.                var8.height = var6;
  250.                appendrect(var8, var2);
  251.                var7.height -= var6;
  252.             }
  253.  
  254.             int var5 = var0.x - var7.x;
  255.             if (var5 > 0) {
  256.                var8.x = var7.x;
  257.                var8.y = var7.y;
  258.                var8.width = var5;
  259.                var8.height = var7.height;
  260.                appendrect(var8, var2);
  261.                var7.x += var5;
  262.                var7.width -= var5;
  263.             }
  264.  
  265.             int var3 = var0.x + var0.width;
  266.             var5 = var7.x + var7.width - var3;
  267.             if (var5 > 0) {
  268.                var8.x = var3;
  269.                var8.y = var7.y;
  270.                var8.width = var5;
  271.                var8.height = var7.height;
  272.                appendrect(var8, var2);
  273.                var7.width -= var5;
  274.             }
  275.  
  276.          }
  277.       }
  278.    }
  279.  
  280.    static Rectangle bounding(Rectangle var0, Rectangle var1) {
  281.       Rectangle var2 = new Rectangle();
  282.       if (var0.width != 0 && var0.height != 0) {
  283.          if (var1.width != 0 && var1.height != 0) {
  284.             var2.x = Math.min(var0.x, var1.x);
  285.             var2.y = Math.min(var0.y, var1.y);
  286.             var2.width = Math.max(var0.x + var0.width, var1.x + var1.width) - var2.x;
  287.             var2.height = Math.max(var0.y + var0.height, var1.y + var1.height) - var2.y;
  288.          } else {
  289.             var2 = var0;
  290.          }
  291.       } else {
  292.          var2 = var1;
  293.       }
  294.  
  295.       return var2;
  296.    }
  297.  
  298.    static void intersect(Rectangle var0, Rectangle var1, Rectangle var2) {
  299.       if (var0 != null && var1 != null && var2 != null) {
  300.          var2.x = var2.y = var2.width = var2.height = 0;
  301.          if (var0.width != 0 && var0.height != 0 && var1.width != 0 && var1.height != 0) {
  302.             var2.x = Math.max(var0.x, var1.x);
  303.             var2.y = Math.max(var0.y, var1.y);
  304.             int var3 = Math.min(var0.x + var0.width, var1.x + var1.width);
  305.             int var4 = Math.min(var0.y + var0.height, var1.y + var1.height);
  306.             var2.width = Math.max(var3 - var2.x, 0);
  307.             var2.height = Math.max(var4 - var2.y, 0);
  308.          }
  309.       }
  310.    }
  311.  
  312.    static boolean isnull(Rectangle var0) {
  313.       return var0.width == 0 || var0.height == 0;
  314.    }
  315.  
  316.    public static void rl_init(Rectangle var0, JCRectList var1) {
  317.       JCRectNode var2 = new JCRectNode();
  318.       var2.rect = new Rectangle(var0.x, var0.y, var0.width, var0.height);
  319.       var1.head = var1.tail = var2;
  320.    }
  321.  
  322.    public static void rl_remove(Rectangle var0, JCRectList var1, JCRectList var2) {
  323.       JCRectList var4 = new JCRectList();
  324.  
  325.       for(JCRectNode var3 = var1.head; var3 != null; var3 = var3.next) {
  326.          appendremaining(var0, var3.rect, var4);
  327.       }
  328.  
  329.       var2.head = var4.head;
  330.       var2.tail = var4.tail;
  331.    }
  332.  
  333.    public static Rectangle largest_rect(JCRectList var0) {
  334.       Object var4 = null;
  335.       normalize(var0);
  336.       sort(var0, var0, 1);
  337.       JCRectList[] var8 = make(var0);
  338.       Rectangle var6 = var8[0].head.rect;
  339.       Rectangle var1 = new Rectangle(var6.x, var6.y, var6.width, var6.height);
  340.       int var7 = 0;
  341.  
  342.       for(JCRectList var5 = var8[var7]; var5.head != null; var5 = var8[var7]) {
  343.          for(JCRectNode var3 = var5.head; var3 != null; var3 = var3.next) {
  344.             Rectangle var2 = new Rectangle(var3.rect.x, var3.rect.y, var3.rect.width, var3.rect.height);
  345.             search_lg_rect(var8, var7, var3, var1, var2);
  346.          }
  347.  
  348.          ++var7;
  349.       }
  350.  
  351.       return var1;
  352.    }
  353. }
  354.