home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / awt / geom / Crossings.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  3.6 KB  |  254 lines

  1. package sun.awt.geom;
  2.  
  3. import java.awt.geom.PathIterator;
  4. import java.util.Enumeration;
  5. import java.util.Vector;
  6.  
  7. public abstract class Crossings {
  8.    public static final boolean debug = false;
  9.    int limit = 0;
  10.    double[] yranges = new double[10];
  11.    double xlo;
  12.    double ylo;
  13.    double xhi;
  14.    double yhi;
  15.    private Vector tmp = new Vector();
  16.  
  17.    public Crossings(double var1, double var3, double var5, double var7) {
  18.       this.xlo = var1;
  19.       this.ylo = var3;
  20.       this.xhi = var5;
  21.       this.yhi = var7;
  22.    }
  23.  
  24.    public final double getXLo() {
  25.       return this.xlo;
  26.    }
  27.  
  28.    public final double getYLo() {
  29.       return this.ylo;
  30.    }
  31.  
  32.    public final double getXHi() {
  33.       return this.xhi;
  34.    }
  35.  
  36.    public final double getYHi() {
  37.       return this.yhi;
  38.    }
  39.  
  40.    public abstract void record(double var1, double var3, int var5);
  41.  
  42.    public void print() {
  43.       System.out.println("Crossings [");
  44.       System.out.println("  bounds = [" + this.ylo + ", " + this.yhi + "]");
  45.  
  46.       for(int var1 = 0; var1 < this.limit; var1 += 2) {
  47.          System.out.println("  [" + this.yranges[var1] + ", " + this.yranges[var1 + 1] + "]");
  48.       }
  49.  
  50.       System.out.println("]");
  51.    }
  52.  
  53.    public final boolean isEmpty() {
  54.       return this.limit == 0;
  55.    }
  56.  
  57.    public abstract boolean covers(double var1, double var3);
  58.  
  59.    public static Crossings findCrossings(Vector var0, double var1, double var3, double var5, double var7) {
  60.       EvenOdd var9 = new EvenOdd(var1, var3, var5, var7);
  61.       Enumeration var10 = var0.elements();
  62.  
  63.       while(var10.hasMoreElements()) {
  64.          Curve var11 = (Curve)var10.nextElement();
  65.          if (var11.accumulateCrossings(var9)) {
  66.             return null;
  67.          }
  68.       }
  69.  
  70.       return var9;
  71.    }
  72.  
  73.    public static Crossings findCrossings(PathIterator var0, double var1, double var3, double var5, double var7) {
  74.       Object var9;
  75.       if (var0.getWindingRule() == 0) {
  76.          var9 = new EvenOdd(var1, var3, var5, var7);
  77.       } else {
  78.          var9 = new NonZero(var1, var3, var5, var7);
  79.       }
  80.  
  81.       double[] var10 = new double[23];
  82.       double var11 = (double)0.0F;
  83.       double var13 = (double)0.0F;
  84.       double var15 = (double)0.0F;
  85.  
  86.       double var17;
  87.       for(var17 = (double)0.0F; !var0.isDone(); var0.next()) {
  88.          int var23 = var0.currentSegment(var10);
  89.          switch (var23) {
  90.             case 0:
  91.                if (var13 != var17 && ((Crossings)var9).accumulateLine(var15, var17, var11, var13)) {
  92.                   return null;
  93.                }
  94.  
  95.                var11 = var15 = var10[0];
  96.                var13 = var17 = var10[1];
  97.                break;
  98.             case 1:
  99.                double var25 = var10[0];
  100.                double var27 = var10[1];
  101.                if (((Crossings)var9).accumulateLine(var15, var17, var25, var27)) {
  102.                   return null;
  103.                }
  104.  
  105.                var15 = var25;
  106.                var17 = var27;
  107.                break;
  108.             case 2:
  109.                double var24 = var10[2];
  110.                double var26 = var10[3];
  111.                if (((Crossings)var9).accumulateQuad(var15, var17, var10)) {
  112.                   return null;
  113.                }
  114.  
  115.                var15 = var24;
  116.                var17 = var26;
  117.                break;
  118.             case 3:
  119.                double var19 = var10[4];
  120.                double var21 = var10[5];
  121.                if (((Crossings)var9).accumulateCubic(var15, var17, var10)) {
  122.                   return null;
  123.                }
  124.  
  125.                var15 = var19;
  126.                var17 = var21;
  127.                break;
  128.             case 4:
  129.                if (var13 != var17 && ((Crossings)var9).accumulateLine(var15, var17, var11, var13)) {
  130.                   return null;
  131.                }
  132.  
  133.                var15 = var11;
  134.                var17 = var13;
  135.          }
  136.       }
  137.  
  138.       if (var13 != var17 && ((Crossings)var9).accumulateLine(var15, var17, var11, var13)) {
  139.          return null;
  140.       } else {
  141.          return (Crossings)var9;
  142.       }
  143.    }
  144.  
  145.    public boolean accumulateLine(double var1, double var3, double var5, double var7) {
  146.       return var3 <= var7 ? this.accumulateLine(var1, var3, var5, var7, 1) : this.accumulateLine(var5, var7, var1, var3, -1);
  147.    }
  148.  
  149.    public boolean accumulateLine(double var1, double var3, double var5, double var7, int var9) {
  150.       if (!(this.yhi <= var3) && !(this.ylo >= var7)) {
  151.          if (var1 >= this.xhi && var5 >= this.xhi) {
  152.             return false;
  153.          } else if (var3 != var7) {
  154.             double var18 = var5 - var1;
  155.             double var20 = var7 - var3;
  156.             double var10;
  157.             double var12;
  158.             if (var3 < this.ylo) {
  159.                var10 = var1 + (this.ylo - var3) * var18 / var20;
  160.                var12 = this.ylo;
  161.             } else {
  162.                var10 = var1;
  163.                var12 = var3;
  164.             }
  165.  
  166.             double var14;
  167.             double var16;
  168.             if (this.yhi < var7) {
  169.                var14 = var1 + (this.yhi - var3) * var18 / var20;
  170.                var16 = this.yhi;
  171.             } else {
  172.                var14 = var5;
  173.                var16 = var7;
  174.             }
  175.  
  176.             if (var10 >= this.xhi && var14 >= this.xhi) {
  177.                return false;
  178.             } else if (!(var10 > this.xlo) && !(var14 > this.xlo)) {
  179.                this.record(var12, var16, var9);
  180.                return false;
  181.             } else {
  182.                return true;
  183.             }
  184.          } else {
  185.             return var1 >= this.xlo || var5 >= this.xlo;
  186.          }
  187.       } else {
  188.          return false;
  189.       }
  190.    }
  191.  
  192.    public boolean accumulateQuad(double var1, double var3, double[] var5) {
  193.       if (var3 < this.ylo && var5[1] < this.ylo && var5[3] < this.ylo) {
  194.          return false;
  195.       } else if (var3 > this.yhi && var5[1] > this.yhi && var5[3] > this.yhi) {
  196.          return false;
  197.       } else if (var1 > this.xhi && var5[0] > this.xhi && var5[2] > this.xhi) {
  198.          return false;
  199.       } else if (var1 < this.xlo && var5[0] < this.xlo && var5[2] < this.xlo) {
  200.          if (var3 < var5[3]) {
  201.             this.record(Math.max(var3, this.ylo), Math.min(var5[3], this.yhi), 1);
  202.          } else if (var3 > var5[3]) {
  203.             this.record(Math.max(var5[3], this.ylo), Math.min(var3, this.yhi), -1);
  204.          }
  205.  
  206.          return false;
  207.       } else {
  208.          Curve.insertQuad(this.tmp, var1, var3, var5);
  209.          Enumeration var6 = this.tmp.elements();
  210.  
  211.          while(var6.hasMoreElements()) {
  212.             Curve var7 = (Curve)var6.nextElement();
  213.             if (var7.accumulateCrossings(this)) {
  214.                return true;
  215.             }
  216.          }
  217.  
  218.          this.tmp.clear();
  219.          return false;
  220.       }
  221.    }
  222.  
  223.    public boolean accumulateCubic(double var1, double var3, double[] var5) {
  224.       if (var3 < this.ylo && var5[1] < this.ylo && var5[3] < this.ylo && var5[5] < this.ylo) {
  225.          return false;
  226.       } else if (var3 > this.yhi && var5[1] > this.yhi && var5[3] > this.yhi && var5[5] > this.yhi) {
  227.          return false;
  228.       } else if (var1 > this.xhi && var5[0] > this.xhi && var5[2] > this.xhi && var5[4] > this.xhi) {
  229.          return false;
  230.       } else if (var1 < this.xlo && var5[0] < this.xlo && var5[2] < this.xlo && var5[4] < this.xlo) {
  231.          if (var3 <= var5[5]) {
  232.             this.record(Math.max(var3, this.ylo), Math.min(var5[5], this.yhi), 1);
  233.          } else {
  234.             this.record(Math.max(var5[5], this.ylo), Math.min(var3, this.yhi), -1);
  235.          }
  236.  
  237.          return false;
  238.       } else {
  239.          Curve.insertCubic(this.tmp, var1, var3, var5);
  240.          Enumeration var6 = this.tmp.elements();
  241.  
  242.          while(var6.hasMoreElements()) {
  243.             Curve var7 = (Curve)var6.nextElement();
  244.             if (var7.accumulateCrossings(this)) {
  245.                return true;
  246.             }
  247.          }
  248.  
  249.          this.tmp.clear();
  250.          return false;
  251.       }
  252.    }
  253. }
  254.