home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Component;
- import java.awt.Event;
- import java.awt.Graphics;
- import java.util.Stack;
-
- public class CLSFractal extends Applet implements Runnable {
- ContextLSystem cls;
- int fractLevel = 1;
- int repaintDelay = 50;
- boolean incrementalUpdates;
- float startAngle;
- float rotAngle;
- float Xmin;
- float Xmax;
- float Ymin;
- float Ymax;
- int border;
- boolean normalizescaling;
- Thread kicker;
- String savedPath;
-
- public void init() {
- this.cls = new ContextLSystem(this);
- String var1 = ((Applet)this).getParameter("level");
- if (var1 != null) {
- this.fractLevel = Integer.parseInt(var1);
- }
-
- var1 = ((Applet)this).getParameter("incremental");
- if (var1 != null) {
- this.incrementalUpdates = var1.equals("true");
- }
-
- var1 = ((Applet)this).getParameter("delay");
- if (var1 != null) {
- this.repaintDelay = Integer.parseInt(var1);
- }
-
- var1 = ((Applet)this).getParameter("startAngle");
- if (var1 != null) {
- this.startAngle = Float.valueOf(var1);
- }
-
- var1 = ((Applet)this).getParameter("rotAngle");
- if (var1 != null) {
- this.rotAngle = Float.valueOf(var1);
- }
-
- this.rotAngle = this.rotAngle / 360.0F * 2.0F * (float)Math.PI;
- var1 = ((Applet)this).getParameter("border");
- if (var1 != null) {
- this.border = Integer.parseInt(var1);
- }
-
- var1 = ((Applet)this).getParameter("normalizescale");
- if (var1 != null) {
- this.normalizescaling = var1.equals("true");
- }
-
- }
-
- public void run() {
- Thread var1 = Thread.currentThread();
- boolean var2 = false;
-
- while(this.kicker == var1 && this.cls.getLevel() < this.fractLevel) {
- this.cls.generate();
- if (this.kicker == var1 && this.incrementalUpdates) {
- ((Component)this).repaint();
-
- try {
- Thread.sleep((long)this.repaintDelay);
- } catch (InterruptedException var3) {
- }
- } else {
- var2 = true;
- }
- }
-
- if (this.kicker == var1) {
- this.kicker = null;
- if (var2) {
- ((Component)this).repaint();
- }
- }
-
- }
-
- public void start() {
- this.kicker = new Thread(this);
- this.kicker.start();
- }
-
- public void stop() {
- this.kicker = null;
- }
-
- public boolean mouseUp(Event var1, int var2, int var3) {
- this.cls = new ContextLSystem(this);
- this.savedPath = null;
- this.start();
- return true;
- }
-
- public void paint(Graphics var1) {
- String var2 = this.cls.getPath();
- if (var2 == null) {
- super.paint(var1);
- } else {
- if (this.savedPath == null || !this.savedPath.equals(var2)) {
- this.savedPath = var2;
- this.render((Graphics)null, var2);
- }
-
- for(int var3 = 0; var3 < this.border; ++var3) {
- var1.draw3DRect(var3, var3, ((Component)this).size().width - var3 * 2, ((Component)this).size().height - var3 * 2, false);
- }
-
- this.render(var1, var2);
- }
- }
-
- void render(Graphics var1, String var2) {
- Stack var3 = new Stack();
- CLSTurtle var4;
- if (var1 == null) {
- this.Xmin = 1.0E20F;
- this.Ymin = 1.0E20F;
- this.Xmax = -1.0E20F;
- this.Ymax = -1.0E20F;
- var4 = new CLSTurtle(this.startAngle, 0.0F, 0.0F, 0, 0, 1.0F, 1.0F);
- } else {
- float var5 = this.Xmax - this.Xmin;
- if (var5 == 0.0F) {
- var5 = 1.0F;
- }
-
- float var6 = this.Ymax - this.Ymin;
- if (var6 == 0.0F) {
- var6 = 1.0F;
- }
-
- float var7 = (float)(((Component)this).size().width - this.border * 2 - 1) / var5;
- float var8 = (float)(((Component)this).size().height - this.border * 2 - 1) / var6;
- int var9 = this.border;
- int var10 = this.border;
- if (this.normalizescaling) {
- if (var7 < var8) {
- var10 = (int)((float)var10 + ((float)(((Component)this).size().height - this.border * 2) - (this.Ymax - this.Ymin) * var7) / 2.0F);
- var8 = var7;
- } else if (var8 < var7) {
- var9 = (int)((float)var9 + ((float)(((Component)this).size().width - this.border * 2) - (this.Xmax - this.Xmin) * var8) / 2.0F);
- var7 = var8;
- }
- }
-
- var4 = new CLSTurtle(this.startAngle, 0.0F - this.Xmin, 0.0F - this.Ymin, var9, var10, var7, var8);
- }
-
- for(int var11 = 0; var11 < var2.length(); ++var11) {
- switch (var2.charAt(var11)) {
- case '+':
- var4.rotate(this.rotAngle);
- break;
- case '-':
- var4.rotate(-this.rotAngle);
- break;
- case 'F':
- if (var1 == null) {
- this.includePt(var4.X, var4.Y);
- var4.jump();
- this.includePt(var4.X, var4.Y);
- } else {
- var4.draw(var1);
- }
- break;
- case '[':
- var3.push(var4);
- var4 = new CLSTurtle(var4);
- break;
- case ']':
- var4 = (CLSTurtle)var3.pop();
- break;
- case 'f':
- var4.jump();
- }
- }
-
- }
-
- void includePt(float var1, float var2) {
- if (var1 < this.Xmin) {
- this.Xmin = var1;
- }
-
- if (var1 > this.Xmax) {
- this.Xmax = var1;
- }
-
- if (var2 < this.Ymin) {
- this.Ymin = var2;
- }
-
- if (var2 > this.Ymax) {
- this.Ymax = var2;
- }
-
- }
- }
-