//Title: Fractal_Explorer.java //Version: //Copyright: Copyright (c) 2001 //Author: SyGem Software import java.awt.*; import java.applet.*; import com.sygem.jazz3d3.*; import com.sygem.jazz3d3.primitive.Landscape3d; public class FractalExplorer extends Applet implements Runnable { Thread m_ce; World myWorld; int light1; int pid; int seed = 300; String source[]; int line = 1; Landscape3d land; double min=0; double max=1; Button b_new = new Button("New Landscape"); Button b_rand = new Button("Randomize"); Button b_zero = new Button("Force Edges to Zero"); Button b_single = new Button("Set Single Sided"); Button b_view = new Button("View Source!"); Button b_fractal = new Button("Fractalize"); Button b_smooth = new Button("Smooth"); Button b_random1 = new Button("Add Random Values"); Button b_random2 = new Button("Add Random Values Between"); Button b_colour = new Button("Add Colour"); TextField t_seed = new TextField("300", 10); TextField min_field = new TextField("0.0", 5); TextField max_field = new TextField("1.0", 5); TextField h_field = new TextField("0", 5); TextField r_field = new TextField("255", 3); TextField g_field = new TextField("255", 3); TextField b_field = new TextField("255", 3); //Construct the applet public FractalExplorer() { } //Initialize the applet public void init() { resize(500,300); myWorld = new World(this); setLayout(new BorderLayout()); add("Center", myWorld); Panel p1 = new Panel(); p1.setLayout(new BorderLayout()); p1.add("North",b_new); p1.add("West", new Label("Seed:")); p1.add("Center",t_seed); p1.add("South",b_rand); Panel p2 = new Panel(); p2.setLayout(new BorderLayout()); p2.add("North",b_single); p2.add("Center",b_zero); p2.add("South",b_view); Panel p3 = new Panel(); p3.setLayout(new BorderLayout()); p3.add("Center", b_fractal); p3.add("East", b_smooth); p3.add("South", b_random1); Panel rand_panel = new Panel(); rand_panel.add(min_field); rand_panel.add(max_field); Panel colour_panel = new Panel(); colour_panel.add(h_field); colour_panel.add(r_field); colour_panel.add(g_field); colour_panel.add(b_field); Panel p6 = new Panel(); p6.setLayout(new BorderLayout()); p6.add("North", rand_panel); p6.add("South", colour_panel); Panel p4 = new Panel(); p4.setLayout(new BorderLayout()); p4.add("North", b_random2); p4.add("Center", p6); p4.add("South", b_colour); Panel p5 = new Panel(); p5.setLayout(new BorderLayout()); p5.add("North", p3); p5.add("Center", p4); Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add("North", p1); p.add("South", p2); p.add("Center", p5); add("West", p); RenderSolid flat_shader = new RenderSolid(); land = new Landscape3d(seed,0,-0.35,8); land.setRenderer(flat_shader); pid = myWorld.addObject(land); Light temp_light = new Light(0,-1,1); light1 = myWorld.addLight(temp_light); source = new String[50]; source[0] = new String("landscape3d land = new landscape3d(300,0,0,8)"); } //Start the applet public void start() { if (m_ce == null) { m_ce = new Thread(this); m_ce.start(); } } //Stop the applet public void stop() { if (m_ce != null) { m_ce.stop(); m_ce = null; } } //Destroy the applet public void destroy() { } public void run() { int iCount = 0; long lTime0 = System.currentTimeMillis(); myWorld.prep(); while (true) { myWorld.getParentObject(pid).rotateLocal(0,2,0); myWorld.redraw(); } } public boolean action(Event e, Object s) { if (e.target==b_new) { myWorld.suspend(); myWorld.deleteObject(pid); RenderSolid flat_shader = new RenderSolid(); land = new Landscape3d(seed,0,-0.35,8); land.generateShape(); land.setRenderer(flat_shader); pid = myWorld.addObject(land); myWorld.prepNewObjects(); myWorld.resume(); source = new String[50]; source[0] = new String("landscape3d land = new landscape3d("+seed+",0,0,8)"); line = 1; } if (e.target==b_rand) { seed = (int)(Math.random() * Integer.MAX_VALUE); t_seed.setText(""+seed); } if (e.target==b_single) { land.setSingleSided(true); source[line++] = "land.setSingleSided(true)"; } if (e.target==b_fractal) { myWorld.suspend(); land.fractalize(); land.generateShape(); myWorld.resume(); source[line++] = "land.fractalize()"; System.out.println("Generated shape()"); } if (e.target==b_smooth) { myWorld.suspend(); land.smooth(); land.generateShape(); myWorld.resume(); source[line++] = "land.smooth()"; } if (e.target==b_random1) { myWorld.suspend(); land.addRandomValues(); land.generateShape(); myWorld.resume(); source[line++] = "land.addRandomValues()"; } if (e.target==b_random2) { myWorld.suspend(); min = Double.valueOf(min_field.getText()).doubleValue(); max = Double.valueOf(max_field.getText()).doubleValue(); land.addRandomValues(min, max); land.generateShape(); myWorld.resume(); source[line++] = "land.addRandomValues("+min+","+max+")"; } if (e.target==b_colour) { myWorld.suspend(); int r = Integer.parseInt(r_field.getText()); int g = Integer.parseInt(g_field.getText()); int b = Integer.parseInt(b_field.getText()); double h = Double.valueOf(h_field.getText()).doubleValue(); land.addColour(h,r,g,b); land.generateShape(); myWorld.resume(); source[line++] = "land.addColour("+h+","+r+","+g+","+b+")"; } if (e.target==b_zero) { myWorld.suspend(); land.forceEdgesToZero(); land.generateShape(); myWorld.resume(); source[line++] = "land.forceEdgesToZero()"; } if (e.target==b_view) { System.out.println("Begin landscape source..."); for (int i=0;i