home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VCafe / WDESAMPL.BIN / CLSFractal.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-03-21  |  3.9 KB  |  211 lines

  1. import java.applet.Applet;
  2. import java.awt.Component;
  3. import java.awt.Event;
  4. import java.awt.Graphics;
  5. import java.util.Stack;
  6.  
  7. public class CLSFractal extends Applet implements Runnable {
  8.    ContextLSystem cls;
  9.    int fractLevel = 1;
  10.    int repaintDelay = 50;
  11.    boolean incrementalUpdates;
  12.    float startAngle;
  13.    float rotAngle;
  14.    float Xmin;
  15.    float Xmax;
  16.    float Ymin;
  17.    float Ymax;
  18.    int border;
  19.    boolean normalizescaling;
  20.    Thread kicker;
  21.    String savedPath;
  22.  
  23.    public void init() {
  24.       this.cls = new ContextLSystem(this);
  25.       String var1 = ((Applet)this).getParameter("level");
  26.       if (var1 != null) {
  27.          this.fractLevel = Integer.parseInt(var1);
  28.       }
  29.  
  30.       var1 = ((Applet)this).getParameter("incremental");
  31.       if (var1 != null) {
  32.          this.incrementalUpdates = var1.equals("true");
  33.       }
  34.  
  35.       var1 = ((Applet)this).getParameter("delay");
  36.       if (var1 != null) {
  37.          this.repaintDelay = Integer.parseInt(var1);
  38.       }
  39.  
  40.       var1 = ((Applet)this).getParameter("startAngle");
  41.       if (var1 != null) {
  42.          this.startAngle = Float.valueOf(var1);
  43.       }
  44.  
  45.       var1 = ((Applet)this).getParameter("rotAngle");
  46.       if (var1 != null) {
  47.          this.rotAngle = Float.valueOf(var1);
  48.       }
  49.  
  50.       this.rotAngle = this.rotAngle / 360.0F * 2.0F * (float)Math.PI;
  51.       var1 = ((Applet)this).getParameter("border");
  52.       if (var1 != null) {
  53.          this.border = Integer.parseInt(var1);
  54.       }
  55.  
  56.       var1 = ((Applet)this).getParameter("normalizescale");
  57.       if (var1 != null) {
  58.          this.normalizescaling = var1.equals("true");
  59.       }
  60.  
  61.    }
  62.  
  63.    public void run() {
  64.       Thread var1 = Thread.currentThread();
  65.       boolean var2 = false;
  66.  
  67.       while(this.kicker == var1 && this.cls.getLevel() < this.fractLevel) {
  68.          this.cls.generate();
  69.          if (this.kicker == var1 && this.incrementalUpdates) {
  70.             ((Component)this).repaint();
  71.  
  72.             try {
  73.                Thread.sleep((long)this.repaintDelay);
  74.             } catch (InterruptedException var3) {
  75.             }
  76.          } else {
  77.             var2 = true;
  78.          }
  79.       }
  80.  
  81.       if (this.kicker == var1) {
  82.          this.kicker = null;
  83.          if (var2) {
  84.             ((Component)this).repaint();
  85.          }
  86.       }
  87.  
  88.    }
  89.  
  90.    public void start() {
  91.       this.kicker = new Thread(this);
  92.       this.kicker.start();
  93.    }
  94.  
  95.    public void stop() {
  96.       this.kicker = null;
  97.    }
  98.  
  99.    public boolean mouseUp(Event var1, int var2, int var3) {
  100.       this.cls = new ContextLSystem(this);
  101.       this.savedPath = null;
  102.       this.start();
  103.       return true;
  104.    }
  105.  
  106.    public void paint(Graphics var1) {
  107.       String var2 = this.cls.getPath();
  108.       if (var2 == null) {
  109.          super.paint(var1);
  110.       } else {
  111.          if (this.savedPath == null || !this.savedPath.equals(var2)) {
  112.             this.savedPath = var2;
  113.             this.render((Graphics)null, var2);
  114.          }
  115.  
  116.          for(int var3 = 0; var3 < this.border; ++var3) {
  117.             var1.draw3DRect(var3, var3, ((Component)this).size().width - var3 * 2, ((Component)this).size().height - var3 * 2, false);
  118.          }
  119.  
  120.          this.render(var1, var2);
  121.       }
  122.    }
  123.  
  124.    void render(Graphics var1, String var2) {
  125.       Stack var3 = new Stack();
  126.       CLSTurtle var4;
  127.       if (var1 == null) {
  128.          this.Xmin = 1.0E20F;
  129.          this.Ymin = 1.0E20F;
  130.          this.Xmax = -1.0E20F;
  131.          this.Ymax = -1.0E20F;
  132.          var4 = new CLSTurtle(this.startAngle, 0.0F, 0.0F, 0, 0, 1.0F, 1.0F);
  133.       } else {
  134.          float var5 = this.Xmax - this.Xmin;
  135.          if (var5 == 0.0F) {
  136.             var5 = 1.0F;
  137.          }
  138.  
  139.          float var6 = this.Ymax - this.Ymin;
  140.          if (var6 == 0.0F) {
  141.             var6 = 1.0F;
  142.          }
  143.  
  144.          float var7 = (float)(((Component)this).size().width - this.border * 2 - 1) / var5;
  145.          float var8 = (float)(((Component)this).size().height - this.border * 2 - 1) / var6;
  146.          int var9 = this.border;
  147.          int var10 = this.border;
  148.          if (this.normalizescaling) {
  149.             if (var7 < var8) {
  150.                var10 = (int)((float)var10 + ((float)(((Component)this).size().height - this.border * 2) - (this.Ymax - this.Ymin) * var7) / 2.0F);
  151.                var8 = var7;
  152.             } else if (var8 < var7) {
  153.                var9 = (int)((float)var9 + ((float)(((Component)this).size().width - this.border * 2) - (this.Xmax - this.Xmin) * var8) / 2.0F);
  154.                var7 = var8;
  155.             }
  156.          }
  157.  
  158.          var4 = new CLSTurtle(this.startAngle, 0.0F - this.Xmin, 0.0F - this.Ymin, var9, var10, var7, var8);
  159.       }
  160.  
  161.       for(int var11 = 0; var11 < var2.length(); ++var11) {
  162.          switch (var2.charAt(var11)) {
  163.             case '+':
  164.                var4.rotate(this.rotAngle);
  165.                break;
  166.             case '-':
  167.                var4.rotate(-this.rotAngle);
  168.                break;
  169.             case 'F':
  170.                if (var1 == null) {
  171.                   this.includePt(var4.X, var4.Y);
  172.                   var4.jump();
  173.                   this.includePt(var4.X, var4.Y);
  174.                } else {
  175.                   var4.draw(var1);
  176.                }
  177.                break;
  178.             case '[':
  179.                var3.push(var4);
  180.                var4 = new CLSTurtle(var4);
  181.                break;
  182.             case ']':
  183.                var4 = (CLSTurtle)var3.pop();
  184.                break;
  185.             case 'f':
  186.                var4.jump();
  187.          }
  188.       }
  189.  
  190.    }
  191.  
  192.    void includePt(float var1, float var2) {
  193.       if (var1 < this.Xmin) {
  194.          this.Xmin = var1;
  195.       }
  196.  
  197.       if (var1 > this.Xmax) {
  198.          this.Xmax = var1;
  199.       }
  200.  
  201.       if (var2 < this.Ymin) {
  202.          this.Ymin = var2;
  203.       }
  204.  
  205.       if (var2 > this.Ymax) {
  206.          this.Ymax = var2;
  207.       }
  208.  
  209.    }
  210. }
  211.