home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.geom;
-
- import java.awt.geom.PathIterator;
- import java.util.Enumeration;
- import java.util.Vector;
-
- public abstract class Crossings {
- public static final boolean debug = false;
- int limit = 0;
- double[] yranges = new double[10];
- double xlo;
- double ylo;
- double xhi;
- double yhi;
- private Vector tmp = new Vector();
-
- public Crossings(double var1, double var3, double var5, double var7) {
- this.xlo = var1;
- this.ylo = var3;
- this.xhi = var5;
- this.yhi = var7;
- }
-
- public final double getXLo() {
- return this.xlo;
- }
-
- public final double getYLo() {
- return this.ylo;
- }
-
- public final double getXHi() {
- return this.xhi;
- }
-
- public final double getYHi() {
- return this.yhi;
- }
-
- public abstract void record(double var1, double var3, int var5);
-
- public void print() {
- System.out.println("Crossings [");
- System.out.println(" bounds = [" + this.ylo + ", " + this.yhi + "]");
-
- for(int var1 = 0; var1 < this.limit; var1 += 2) {
- System.out.println(" [" + this.yranges[var1] + ", " + this.yranges[var1 + 1] + "]");
- }
-
- System.out.println("]");
- }
-
- public final boolean isEmpty() {
- return this.limit == 0;
- }
-
- public abstract boolean covers(double var1, double var3);
-
- public static Crossings findCrossings(Vector var0, double var1, double var3, double var5, double var7) {
- EvenOdd var9 = new EvenOdd(var1, var3, var5, var7);
- Enumeration var10 = var0.elements();
-
- while(var10.hasMoreElements()) {
- Curve var11 = (Curve)var10.nextElement();
- if (var11.accumulateCrossings(var9)) {
- return null;
- }
- }
-
- return var9;
- }
-
- public static Crossings findCrossings(PathIterator var0, double var1, double var3, double var5, double var7) {
- Object var9;
- if (var0.getWindingRule() == 0) {
- var9 = new EvenOdd(var1, var3, var5, var7);
- } else {
- var9 = new NonZero(var1, var3, var5, var7);
- }
-
- double[] var10 = new double[23];
- double var11 = (double)0.0F;
- double var13 = (double)0.0F;
- double var15 = (double)0.0F;
-
- double var17;
- for(var17 = (double)0.0F; !var0.isDone(); var0.next()) {
- int var23 = var0.currentSegment(var10);
- switch (var23) {
- case 0:
- if (var13 != var17 && ((Crossings)var9).accumulateLine(var15, var17, var11, var13)) {
- return null;
- }
-
- var11 = var15 = var10[0];
- var13 = var17 = var10[1];
- break;
- case 1:
- double var25 = var10[0];
- double var27 = var10[1];
- if (((Crossings)var9).accumulateLine(var15, var17, var25, var27)) {
- return null;
- }
-
- var15 = var25;
- var17 = var27;
- break;
- case 2:
- double var24 = var10[2];
- double var26 = var10[3];
- if (((Crossings)var9).accumulateQuad(var15, var17, var10)) {
- return null;
- }
-
- var15 = var24;
- var17 = var26;
- break;
- case 3:
- double var19 = var10[4];
- double var21 = var10[5];
- if (((Crossings)var9).accumulateCubic(var15, var17, var10)) {
- return null;
- }
-
- var15 = var19;
- var17 = var21;
- break;
- case 4:
- if (var13 != var17 && ((Crossings)var9).accumulateLine(var15, var17, var11, var13)) {
- return null;
- }
-
- var15 = var11;
- var17 = var13;
- }
- }
-
- if (var13 != var17 && ((Crossings)var9).accumulateLine(var15, var17, var11, var13)) {
- return null;
- } else {
- return (Crossings)var9;
- }
- }
-
- public boolean accumulateLine(double var1, double var3, double var5, double var7) {
- return var3 <= var7 ? this.accumulateLine(var1, var3, var5, var7, 1) : this.accumulateLine(var5, var7, var1, var3, -1);
- }
-
- public boolean accumulateLine(double var1, double var3, double var5, double var7, int var9) {
- if (!(this.yhi <= var3) && !(this.ylo >= var7)) {
- if (var1 >= this.xhi && var5 >= this.xhi) {
- return false;
- } else if (var3 != var7) {
- double var18 = var5 - var1;
- double var20 = var7 - var3;
- double var10;
- double var12;
- if (var3 < this.ylo) {
- var10 = var1 + (this.ylo - var3) * var18 / var20;
- var12 = this.ylo;
- } else {
- var10 = var1;
- var12 = var3;
- }
-
- double var14;
- double var16;
- if (this.yhi < var7) {
- var14 = var1 + (this.yhi - var3) * var18 / var20;
- var16 = this.yhi;
- } else {
- var14 = var5;
- var16 = var7;
- }
-
- if (var10 >= this.xhi && var14 >= this.xhi) {
- return false;
- } else if (!(var10 > this.xlo) && !(var14 > this.xlo)) {
- this.record(var12, var16, var9);
- return false;
- } else {
- return true;
- }
- } else {
- return var1 >= this.xlo || var5 >= this.xlo;
- }
- } else {
- return false;
- }
- }
-
- public boolean accumulateQuad(double var1, double var3, double[] var5) {
- if (var3 < this.ylo && var5[1] < this.ylo && var5[3] < this.ylo) {
- return false;
- } else if (var3 > this.yhi && var5[1] > this.yhi && var5[3] > this.yhi) {
- return false;
- } else if (var1 > this.xhi && var5[0] > this.xhi && var5[2] > this.xhi) {
- return false;
- } else if (var1 < this.xlo && var5[0] < this.xlo && var5[2] < this.xlo) {
- if (var3 < var5[3]) {
- this.record(Math.max(var3, this.ylo), Math.min(var5[3], this.yhi), 1);
- } else if (var3 > var5[3]) {
- this.record(Math.max(var5[3], this.ylo), Math.min(var3, this.yhi), -1);
- }
-
- return false;
- } else {
- Curve.insertQuad(this.tmp, var1, var3, var5);
- Enumeration var6 = this.tmp.elements();
-
- while(var6.hasMoreElements()) {
- Curve var7 = (Curve)var6.nextElement();
- if (var7.accumulateCrossings(this)) {
- return true;
- }
- }
-
- this.tmp.clear();
- return false;
- }
- }
-
- public boolean accumulateCubic(double var1, double var3, double[] var5) {
- if (var3 < this.ylo && var5[1] < this.ylo && var5[3] < this.ylo && var5[5] < this.ylo) {
- return false;
- } else if (var3 > this.yhi && var5[1] > this.yhi && var5[3] > this.yhi && var5[5] > this.yhi) {
- return false;
- } else if (var1 > this.xhi && var5[0] > this.xhi && var5[2] > this.xhi && var5[4] > this.xhi) {
- return false;
- } else if (var1 < this.xlo && var5[0] < this.xlo && var5[2] < this.xlo && var5[4] < this.xlo) {
- if (var3 <= var5[5]) {
- this.record(Math.max(var3, this.ylo), Math.min(var5[5], this.yhi), 1);
- } else {
- this.record(Math.max(var5[5], this.ylo), Math.min(var3, this.yhi), -1);
- }
-
- return false;
- } else {
- Curve.insertCubic(this.tmp, var1, var3, var5);
- Enumeration var6 = this.tmp.elements();
-
- while(var6.hasMoreElements()) {
- Curve var7 = (Curve)var6.nextElement();
- if (var7.accumulateCrossings(this)) {
- return true;
- }
- }
-
- this.tmp.clear();
- return false;
- }
- }
- }
-