home *** CD-ROM | disk | FTP | other *** search
- package java.awt.geom;
-
- public abstract class Arc2D extends RectangularShape {
- public static final int OPEN = 0;
- public static final int CHORD = 1;
- public static final int PIE = 2;
- private int type;
-
- protected Arc2D(int var1) {
- this.setArcType(var1);
- }
-
- public abstract double getAngleStart();
-
- public abstract double getAngleExtent();
-
- public int getArcType() {
- return this.type;
- }
-
- public Point2D getStartPoint() {
- double var1 = Math.toRadians(-this.getAngleStart());
- double var3 = ((RectangularShape)this).getX() + (Math.cos(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getWidth();
- double var5 = ((RectangularShape)this).getY() + (Math.sin(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getHeight();
- return new Point2D.Double(var3, var5);
- }
-
- public Point2D getEndPoint() {
- double var1 = Math.toRadians(-this.getAngleStart() - this.getAngleExtent());
- double var3 = ((RectangularShape)this).getX() + (Math.cos(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getWidth();
- double var5 = ((RectangularShape)this).getY() + (Math.sin(var1) * (double)0.5F + (double)0.5F) * ((RectangularShape)this).getHeight();
- return new Point2D.Double(var3, var5);
- }
-
- public abstract void setArc(double var1, double var3, double var5, double var7, double var9, double var11, int var13);
-
- public void setArc(Point2D var1, Dimension2D var2, double var3, double var5, int var7) {
- this.setArc(var1.getX(), var1.getY(), var2.getWidth(), var2.getHeight(), var3, var5, var7);
- }
-
- public void setArc(Rectangle2D var1, double var2, double var4, int var6) {
- this.setArc(((RectangularShape)var1).getX(), ((RectangularShape)var1).getY(), ((RectangularShape)var1).getWidth(), ((RectangularShape)var1).getHeight(), var2, var4, var6);
- }
-
- public void setArc(Arc2D var1) {
- this.setArc(((RectangularShape)var1).getX(), ((RectangularShape)var1).getY(), ((RectangularShape)var1).getWidth(), ((RectangularShape)var1).getHeight(), var1.getAngleStart(), var1.getAngleExtent(), var1.type);
- }
-
- public void setArcByCenter(double var1, double var3, double var5, double var7, double var9, int var11) {
- this.setArc(var1 - var5, var3 - var5, var5 * (double)2.0F, var5 * (double)2.0F, var7, var9, var11);
- }
-
- public void setArcByTangent(Point2D var1, Point2D var2, Point2D var3, double var4) {
- double var6 = Math.atan2(var1.getY() - var2.getY(), var1.getX() - var2.getX());
- double var8 = Math.atan2(var3.getY() - var2.getY(), var3.getX() - var2.getX());
- double var10 = var8 - var6;
- if (var10 > Math.PI) {
- var8 -= (Math.PI * 2D);
- } else if (var10 < -Math.PI) {
- var8 += (Math.PI * 2D);
- }
-
- double var12 = (var6 + var8) / (double)2.0F;
- double var14 = Math.abs(var8 - var12);
- double var16 = var4 / Math.sin(var14);
- double var18 = var2.getX() + var16 * Math.cos(var12);
- double var20 = var2.getY() + var16 * Math.sin(var12);
- if (var6 < var8) {
- --var6;
- ++var8;
- } else {
- ++var6;
- --var8;
- }
-
- var6 = Math.toDegrees(-var6);
- var8 = Math.toDegrees(-var8);
- var10 = var8 - var6;
- if (var10 < (double)0.0F) {
- var10 += (double)360.0F;
- } else {
- var10 -= (double)360.0F;
- }
-
- this.setArcByCenter(var18, var20, var4, var6, var10, this.type);
- }
-
- public abstract void setAngleStart(double var1);
-
- public abstract void setAngleExtent(double var1);
-
- public void setAngleStart(Point2D var1) {
- this.setAngleStart(-Math.toDegrees(Math.atan2(var1.getY() - ((RectangularShape)this).getCenterY(), var1.getX() - ((RectangularShape)this).getCenterX())));
- }
-
- public void setAngles(double var1, double var3, double var5, double var7) {
- double var9 = ((RectangularShape)this).getCenterX();
- double var11 = ((RectangularShape)this).getCenterY();
- double var13 = Math.atan2(var11 - var3, var1 - var9);
- double var15 = Math.atan2(var11 - var7, var5 - var9);
- var15 -= var13;
- if (var15 <= (double)0.0F) {
- var15 += (Math.PI * 2D);
- }
-
- this.setAngleStart(Math.toDegrees(var13));
- this.setAngleExtent(Math.toDegrees(var15));
- }
-
- public void setAngles(Point2D var1, Point2D var2) {
- this.setAngles(var1.getX(), var1.getY(), var2.getX(), var2.getY());
- }
-
- public void setArcType(int var1) {
- if (var1 >= 0 && var1 <= 2) {
- this.type = var1;
- } else {
- throw new IllegalArgumentException("invalid type for Arc: " + var1);
- }
- }
-
- public void setFrame(double var1, double var3, double var5, double var7) {
- this.setArc(var1, var3, var5, var7, this.getAngleStart(), this.getAngleExtent(), this.type);
- }
-
- public Rectangle2D getBounds2D() {
- if (((RectangularShape)this).isEmpty()) {
- return this.makeBounds(((RectangularShape)this).getX(), ((RectangularShape)this).getY(), ((RectangularShape)this).getWidth(), ((RectangularShape)this).getHeight());
- } else {
- double var1;
- double var3;
- double var5;
- double var7;
- if (this.getArcType() == 2) {
- var7 = (double)0.0F;
- var5 = (double)0.0F;
- var3 = (double)0.0F;
- var1 = (double)0.0F;
- } else {
- var3 = (double)1.0F;
- var1 = (double)1.0F;
- var7 = (double)-1.0F;
- var5 = (double)-1.0F;
- }
-
- double var9 = (double)0.0F;
-
- for(int var11 = 0; var11 < 6; ++var11) {
- if (var11 < 4) {
- var9 += (double)90.0F;
- if (!this.containsAngle(var9)) {
- continue;
- }
- } else if (var11 == 4) {
- var9 = this.getAngleStart();
- } else {
- var9 += this.getAngleExtent();
- }
-
- double var12 = Math.toRadians(-var9);
- double var14 = Math.cos(var12);
- double var16 = Math.sin(var12);
- var1 = Math.min(var1, var14);
- var3 = Math.min(var3, var16);
- var5 = Math.max(var5, var14);
- var7 = Math.max(var7, var16);
- }
-
- double var22 = ((RectangularShape)this).getWidth();
- double var23 = ((RectangularShape)this).getHeight();
- var5 = (var5 - var1) * (double)0.5F * var22;
- var7 = (var7 - var3) * (double)0.5F * var23;
- var1 = ((RectangularShape)this).getX() + (var1 * (double)0.5F + (double)0.5F) * var22;
- var3 = ((RectangularShape)this).getY() + (var3 * (double)0.5F + (double)0.5F) * var23;
- return this.makeBounds(var1, var3, var5, var7);
- }
- }
-
- protected abstract Rectangle2D makeBounds(double var1, double var3, double var5, double var7);
-
- static double normalizeDegrees(double var0) {
- if (var0 > (double)180.0F) {
- if (var0 <= (double)540.0F) {
- var0 -= (double)360.0F;
- } else {
- var0 = Math.IEEEremainder(var0, (double)360.0F);
- if (var0 == (double)-180.0F) {
- var0 = (double)180.0F;
- }
- }
- } else if (var0 <= (double)-180.0F) {
- if (var0 > (double)-540.0F) {
- var0 += (double)360.0F;
- } else {
- var0 = Math.IEEEremainder(var0, (double)360.0F);
- if (var0 == (double)-180.0F) {
- var0 = (double)180.0F;
- }
- }
- }
-
- return var0;
- }
-
- public boolean containsAngle(double var1) {
- double var3 = this.getAngleExtent();
- boolean var5 = var3 < (double)0.0F;
- if (var5) {
- var3 = -var3;
- }
-
- if (var3 >= (double)360.0F) {
- return true;
- } else {
- var1 = normalizeDegrees(var1) - normalizeDegrees(this.getAngleStart());
- if (var5) {
- var1 = -var1;
- }
-
- if (var1 < (double)0.0F) {
- var1 += (double)360.0F;
- }
-
- return var1 >= (double)0.0F && var1 < var3;
- }
- }
-
- public boolean contains(double var1, double var3) {
- double var5 = ((RectangularShape)this).getWidth();
- if (var5 <= (double)0.0F) {
- return false;
- } else {
- double var7 = (var1 - ((RectangularShape)this).getX()) / var5 - (double)0.5F;
- double var9 = ((RectangularShape)this).getHeight();
- if (var9 <= (double)0.0F) {
- return false;
- } else {
- double var11 = (var3 - ((RectangularShape)this).getY()) / var9 - (double)0.5F;
- double var13 = var7 * var7 + var11 * var11;
- if (var13 >= (double)0.25F) {
- return false;
- } else {
- double var15 = Math.abs(this.getAngleExtent());
- if (var15 >= (double)360.0F) {
- return true;
- } else {
- boolean var17 = this.containsAngle(-Math.toDegrees(Math.atan2(var11, var7)));
- if (this.type == 2) {
- return var17;
- } else {
- if (var17) {
- if (var15 >= (double)180.0F) {
- return true;
- }
- } else if (var15 <= (double)180.0F) {
- return false;
- }
-
- double var18 = Math.toRadians(-this.getAngleStart());
- double var20 = Math.cos(var18);
- double var22 = Math.sin(var18);
- var18 += Math.toRadians(-this.getAngleExtent());
- double var24 = Math.cos(var18);
- double var26 = Math.sin(var18);
- boolean var28 = Line2D.relativeCCW(var20, var22, var24, var26, var1, var3) * Line2D.relativeCCW(var20, var22, var24, var26, (double)0.0F, (double)0.0F) >= 0;
- return var17 ? !var28 : var28;
- }
- }
- }
- }
- }
- }
-
- public boolean intersects(double var1, double var3, double var5, double var7) {
- if (!this.contains(var1, var3) && !this.contains(var1 + var5, var3) && !this.contains(var1, var3 + var7) && !this.contains(var1 + var5, var3 + var7)) {
- var1 -= ((RectangularShape)this).getX() + ((RectangularShape)this).getWidth() / (double)2.0F;
- var3 = (var3 - (((RectangularShape)this).getY() + ((RectangularShape)this).getHeight() / (double)2.0F)) * (double)-1.0F;
- double var15 = ((RectangularShape)this).getWidth() / ((RectangularShape)this).getHeight();
- if (var1 * var1 / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)) < (double)1.0F) {
- if (var1 == (double)0.0F && (((RectangularShape)this).getHeight() / (double)2.0F >= var3 - var7 && ((RectangularShape)this).getHeight() / (double)2.0F <= var3 || (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) >= var3 - var7 && (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) <= var3)) {
- if (this.containsAngle((Math.PI / 2D))) {
- return true;
- }
-
- if (this.containsAngle(Math.PI)) {
- return true;
- }
- }
-
- double var11 = Math.abs(Math.sqrt(((double)1.0F - var1 * var1 / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F))) * ((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)));
- double var9 = Math.abs(Math.atan(var11 * var15 / var1));
- if (var1 > (double)0.0F && (var11 >= var3 - var7 && var11 <= var3 || (double)-1.0F * var11 >= var3 - var7 && (double)-1.0F * var11 <= var3)) {
- if (this.containsAngle(var9 / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle(((Math.PI * 2D) - var9) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
-
- if (var1 < (double)0.0F && (var11 >= var3 - var7 && var11 <= var3 || (double)-1.0F * var11 >= var3 - var7 && (double)-1.0F * var11 <= var3)) {
- if (this.containsAngle((Math.PI - var9) / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI + var9) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
- }
-
- if ((var1 + var5) * (var1 + var5) / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)) < (double)1.0F) {
- if (var1 + var5 == (double)0.0F && (((RectangularShape)this).getHeight() / (double)2.0F >= var3 - var7 && ((RectangularShape)this).getHeight() / (double)2.0F <= var3 || (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) >= var3 - var7 && (double)-1.0F * (((RectangularShape)this).getHeight() / (double)2.0F) <= var3)) {
- if (this.containsAngle((Math.PI / 2D))) {
- return true;
- }
-
- if (this.containsAngle(Math.PI)) {
- return true;
- }
- }
-
- double var22 = Math.abs(Math.sqrt(((double)1.0F - (var1 + var5) * (var1 + var5) / (((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F))) * ((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)));
- double var19 = Math.abs(Math.atan(var22 * var15 / (var1 + var5)));
- if (var1 + var5 > (double)0.0F && (var22 >= var3 - var7 && var22 <= var3 || (double)-1.0F * var22 >= var3 - var7 && (double)-1.0F * var22 <= var3)) {
- if (this.containsAngle(var19 / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle(((Math.PI * 2D) - var19) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
-
- if (var1 + var5 < (double)0.0F && (var22 >= var3 - var7 && var22 <= var3 || (double)-1.0F * var22 >= var3 - var7 && (double)-1.0F * var22 <= var3)) {
- if (this.containsAngle((Math.PI - var19) / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI + var19) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
- }
-
- if (var3 * var3 / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)) < (double)1.0F) {
- if (var3 == (double)0.0F && (((RectangularShape)this).getWidth() / (double)2.0F >= var1 && ((RectangularShape)this).getWidth() / (double)2.0F <= var1 + var5 || (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) >= var1 && (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) <= var1 + var5)) {
- if (this.containsAngle(Math.PI)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI * 2D))) {
- return true;
- }
- }
-
- double var13 = Math.abs(Math.sqrt(((double)1.0F - var3 * var3 / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F))) * ((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)));
- double var20 = Math.abs(Math.atan(var3 / (var13 / var15)));
- if (var3 > (double)0.0F && (var13 >= var1 && var13 <= var1 + var5 || (double)-1.0F * var13 >= var1 && (double)-1.0F * var13 <= var1 + var5)) {
- if (this.containsAngle(var20 / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI - var20) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
-
- if (var3 < (double)0.0F && (var13 >= var1 && var13 <= var1 + var5 || (double)-1.0F * var13 >= var1 && (double)-1.0F * var13 <= var1 + var5)) {
- if (this.containsAngle(((Math.PI * 2D) - var20) / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI + var20) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
- }
-
- if ((var3 - var7) * (var3 - var7) / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F)) < (double)1.0F) {
- if (var3 - var7 == (double)0.0F && (((RectangularShape)this).getWidth() / (double)2.0F >= var1 && ((RectangularShape)this).getWidth() / (double)2.0F <= var1 + var5 || (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) >= var1 && (double)-1.0F * (((RectangularShape)this).getWidth() / (double)2.0F) <= var1 + var5)) {
- if (this.containsAngle(Math.PI)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI * 2D))) {
- return true;
- }
- }
-
- double var23 = Math.abs(Math.sqrt(((double)1.0F - (var3 - var7) * (var3 - var7) / (((RectangularShape)this).getHeight() / (double)2.0F * (((RectangularShape)this).getHeight() / (double)2.0F))) * ((RectangularShape)this).getWidth() / (double)2.0F * (((RectangularShape)this).getWidth() / (double)2.0F)));
- double var21 = Math.abs(Math.atan((var3 - var7) / (var23 / var15)));
- if (var3 - var7 > (double)0.0F && (var23 >= var1 && var23 <= var1 + var5 || (double)-1.0F * var23 >= var1 && (double)-1.0F * var23 <= var1 + var5)) {
- if (this.containsAngle(var21 / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI - var21) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
-
- if (var3 - var7 < (double)0.0F && (var23 >= var1 && var23 <= var1 + var5 || (double)-1.0F * var23 >= var1 && (double)-1.0F * var23 <= var1 + var5)) {
- if (this.containsAngle(((Math.PI * 2D) - var21) / Math.PI * (double)180.0F)) {
- return true;
- }
-
- if (this.containsAngle((Math.PI + var21) / Math.PI * (double)180.0F)) {
- return true;
- }
- }
- }
-
- return false;
- } else {
- return true;
- }
- }
-
- public boolean contains(double var1, double var3, double var5, double var7) {
- return this.contains(var1, var3, var5, var7, (Rectangle2D)null);
- }
-
- public boolean contains(Rectangle2D var1) {
- return this.contains(((RectangularShape)var1).getX(), ((RectangularShape)var1).getY(), ((RectangularShape)var1).getWidth(), ((RectangularShape)var1).getHeight(), var1);
- }
-
- private boolean contains(double var1, double var3, double var5, double var7, Rectangle2D var9) {
- if (this.contains(var1, var3) && this.contains(var1 + var5, var3) && this.contains(var1, var3 + var7) && this.contains(var1 + var5, var3 + var7)) {
- if (this.type == 2 && !(this.getAngleExtent() <= (double)180.0F)) {
- if (var9 == null) {
- var9 = new Rectangle2D.Double(var1, var3, var5, var7);
- }
-
- double var10 = ((RectangularShape)this).getWidth() / (double)2.0F;
- double var12 = ((RectangularShape)this).getHeight() / (double)2.0F;
- double var14 = ((RectangularShape)this).getX() + var10;
- double var16 = ((RectangularShape)this).getY() + var12;
- double var18 = Math.toRadians(-this.getAngleStart());
- double var20 = var14 + var10 * Math.cos(var18);
- double var22 = var16 + var12 * Math.sin(var18);
- if (((Rectangle2D)var9).intersectsLine(var14, var16, var20, var22)) {
- return false;
- } else {
- var18 += Math.toRadians(-this.getAngleExtent());
- var20 = var14 + var10 * Math.cos(var18);
- var22 = var16 + var12 * Math.sin(var18);
- return !((Rectangle2D)var9).intersectsLine(var14, var16, var20, var22);
- }
- } else {
- return true;
- }
- } else {
- return false;
- }
- }
-
- public PathIterator getPathIterator(AffineTransform var1) {
- return new ArcIterator(this, var1);
- }
- }
-