home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / awt / geom / ArcIterator.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  2.4 KB  |  187 lines

  1. package java.awt.geom;
  2.  
  3. import java.util.NoSuchElementException;
  4.  
  5. class ArcIterator implements PathIterator {
  6.    // $FF: renamed from: x double
  7.    double field_0;
  8.    // $FF: renamed from: y double
  9.    double field_1;
  10.    // $FF: renamed from: w double
  11.    double field_2;
  12.    // $FF: renamed from: h double
  13.    double field_3;
  14.    double angStRad;
  15.    double angExtDeg;
  16.    AffineTransform affine;
  17.    int index;
  18.    int arcSegs;
  19.    int lineSegs;
  20.  
  21.    ArcIterator(Arc2D var1, AffineTransform var2) {
  22.       this.field_2 = ((RectangularShape)var1).getWidth() / (double)2.0F;
  23.       this.field_3 = ((RectangularShape)var1).getHeight() / (double)2.0F;
  24.       this.field_0 = ((RectangularShape)var1).getX() + this.field_2;
  25.       this.field_1 = ((RectangularShape)var1).getY() + this.field_3;
  26.       this.angStRad = -Math.toRadians(var1.getAngleStart());
  27.       this.angExtDeg = -var1.getAngleExtent();
  28.       this.affine = var2;
  29.       double var3 = Math.abs(this.angExtDeg);
  30.       if (var3 >= (double)360.0F) {
  31.          this.arcSegs = 4;
  32.       } else {
  33.          this.arcSegs = (int)Math.ceil(var3 / (double)90.0F);
  34.       }
  35.  
  36.       switch (var1.getArcType()) {
  37.          case 0:
  38.             this.lineSegs = 0;
  39.             break;
  40.          case 1:
  41.             this.lineSegs = 1;
  42.             break;
  43.          case 2:
  44.             this.lineSegs = 2;
  45.       }
  46.  
  47.       if (this.field_2 < (double)0.0F || this.field_3 < (double)0.0F) {
  48.          this.arcSegs = this.lineSegs = -1;
  49.       }
  50.  
  51.    }
  52.  
  53.    public int getWindingRule() {
  54.       return 1;
  55.    }
  56.  
  57.    public boolean isDone() {
  58.       return this.index > this.arcSegs + this.lineSegs;
  59.    }
  60.  
  61.    public void next() {
  62.       ++this.index;
  63.    }
  64.  
  65.    private static double btan(double var0) {
  66.       var0 /= (double)2.0F;
  67.       double var2 = (double)1.0F - Math.cos(var0);
  68.       double var4 = Math.tan(var0);
  69.       double var6 = Math.sqrt((double)1.0F + var4 * var4) - (double)1.0F + var2;
  70.       return 1.3333333333333333 * var2 * var4 / var6;
  71.    }
  72.  
  73.    public int currentSegment(float[] var1) {
  74.       if (this.isDone()) {
  75.          throw new NoSuchElementException("arc iterator out of bounds");
  76.       } else {
  77.          double var2 = this.angStRad;
  78.          if (this.index == 0) {
  79.             var1[0] = (float)(this.field_0 + Math.cos(var2) * this.field_2);
  80.             var1[1] = (float)(this.field_1 + Math.sin(var2) * this.field_3);
  81.             if (this.affine != null) {
  82.                this.affine.transform(var1, 0, var1, 0, 1);
  83.             }
  84.  
  85.             return 0;
  86.          } else if (this.index > this.arcSegs) {
  87.             if (this.index == this.arcSegs + this.lineSegs) {
  88.                return 4;
  89.             } else {
  90.                var1[0] = (float)this.field_0;
  91.                var1[1] = (float)this.field_1;
  92.                if (this.affine != null) {
  93.                   this.affine.transform(var1, 0, var1, 0, 1);
  94.                }
  95.  
  96.                return 1;
  97.             }
  98.          } else {
  99.             double var4 = this.angExtDeg;
  100.             if (var4 > (double)360.0F) {
  101.                var4 = (double)360.0F;
  102.             } else if (var4 < (double)-360.0F) {
  103.                var4 = (double)-360.0F;
  104.             }
  105.  
  106.             var4 /= (double)this.arcSegs;
  107.             var4 = Math.toRadians(var4);
  108.             var2 += var4 * (double)(this.index - 1);
  109.             double var6 = Math.cos(var2);
  110.             double var8 = Math.sin(var2);
  111.             double var10 = btan(var4);
  112.             var1[0] = (float)(this.field_0 + (var6 - var10 * var8) * this.field_2);
  113.             var1[1] = (float)(this.field_1 + (var8 + var10 * var6) * this.field_3);
  114.             var2 += var4;
  115.             var6 = Math.cos(var2);
  116.             var8 = Math.sin(var2);
  117.             var1[2] = (float)(this.field_0 + (var6 + var10 * var8) * this.field_2);
  118.             var1[3] = (float)(this.field_1 + (var8 - var10 * var6) * this.field_3);
  119.             var1[4] = (float)(this.field_0 + var6 * this.field_2);
  120.             var1[5] = (float)(this.field_1 + var8 * this.field_3);
  121.             if (this.affine != null) {
  122.                this.affine.transform(var1, 0, var1, 0, 3);
  123.             }
  124.  
  125.             return 3;
  126.          }
  127.       }
  128.    }
  129.  
  130.    public int currentSegment(double[] var1) {
  131.       if (this.isDone()) {
  132.          throw new NoSuchElementException("arc iterator out of bounds");
  133.       } else {
  134.          double var2 = this.angStRad;
  135.          if (this.index == 0) {
  136.             var1[0] = this.field_0 + Math.cos(var2) * this.field_2;
  137.             var1[1] = this.field_1 + Math.sin(var2) * this.field_3;
  138.             if (this.affine != null) {
  139.                this.affine.transform(var1, 0, var1, 0, 1);
  140.             }
  141.  
  142.             return 0;
  143.          } else if (this.index > this.arcSegs) {
  144.             if (this.index == this.arcSegs + this.lineSegs) {
  145.                return 4;
  146.             } else {
  147.                var1[0] = this.field_0;
  148.                var1[1] = this.field_1;
  149.                if (this.affine != null) {
  150.                   this.affine.transform(var1, 0, var1, 0, 1);
  151.                }
  152.  
  153.                return 1;
  154.             }
  155.          } else {
  156.             double var4 = this.angExtDeg;
  157.             if (var4 > (double)360.0F) {
  158.                var4 = (double)360.0F;
  159.             } else if (var4 < (double)-360.0F) {
  160.                var4 = (double)-360.0F;
  161.             }
  162.  
  163.             var4 /= (double)this.arcSegs;
  164.             var4 = Math.toRadians(var4);
  165.             var2 += var4 * (double)(this.index - 1);
  166.             double var6 = Math.cos(var2);
  167.             double var8 = Math.sin(var2);
  168.             double var10 = btan(var4);
  169.             var1[0] = this.field_0 + (var6 - var10 * var8) * this.field_2;
  170.             var1[1] = this.field_1 + (var8 + var10 * var6) * this.field_3;
  171.             var2 += var4;
  172.             var6 = Math.cos(var2);
  173.             var8 = Math.sin(var2);
  174.             var1[2] = this.field_0 + (var6 + var10 * var8) * this.field_2;
  175.             var1[3] = this.field_1 + (var8 - var10 * var6) * this.field_3;
  176.             var1[4] = this.field_0 + var6 * this.field_2;
  177.             var1[5] = this.field_1 + var8 * this.field_3;
  178.             if (this.affine != null) {
  179.                this.affine.transform(var1, 0, var1, 0, 3);
  180.             }
  181.  
  182.             return 3;
  183.          }
  184.       }
  185.    }
  186. }
  187.