sim.app.lsystem.LSystemWithUI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mason Show documentation
Show all versions of mason Show documentation
MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.
The newest version!
/*
Copyright 2006 by Daniel Kuebrich
Licensed under the Academic Free License version 3.0
See the file "LICENSE" for more information
*/
package sim.app.lsystem;
import sim.engine.*;
import sim.display.*;
import sim.portrayal.continuous.*;
import java.awt.*;
import javax.swing.*;
public class LSystemWithUI extends GUIState
{
public Display2D display;
public JFrame displayFrame;
public static Console c;
private ContinuousPortrayal2D systemPortrayal = new ContinuousPortrayal2D();
public static void main(String[] args)
{
new LSystemWithUI().createController();
}
public LSystemWithUI() { super(new LSystem(System.currentTimeMillis())); }
public LSystemWithUI(SimState state) { super(state); }
public static String getName() { return "Lindenmayer Systems"; }
public void start()
{
super.start();
setupPortrayals();
}
public void load(SimState state)
{
super.load(state);
setupPortrayals();
}
public void setupPortrayals()
{
// this portrayal will draw the objects in the drawEnvironment field...
// which contains all the segments that make up the tree.
systemPortrayal.setField(((LSystem)state).drawEnvironment);
// reschedule the displayer
display.reset();
// redraw the display
display.repaint();
}
public void init(Controller c)
{
super.init(c);
// make the display2d in all of its glory
display = new Display2D(400,400,this); // at 400x400, we've got 4x4 per array position
// No clipping!
// The effect of this call becomes apparent when the display is zoomed out (zoom factor < 1)
// -- instead of drawing the boundaries of your field and clipping there, the display
// instead draws the entire view window, allowing you to view areas that are out of bounds.
// This is useful when your L-system starts to go off the edge of the display.
display.setClipping(false);
displayFrame = display.createFrame();
c.registerFrame(displayFrame); // register the frame so it appears in the "Display" list
displayFrame.setVisible(true);
// attach the portrayals
display.attach(systemPortrayal,"LSystem");
// specify the backdrop color -- what gets painted behind the displays
display.setBackdrop(Color.white);
// setup the defaults
LSystem ls = (LSystem)state;
LSystemData.setVector(ls.l.code, "F");
ls.l.seed = "F";
ls.l.rules.add(new Rule((byte)'F', "F[+F]F[-F]F"));
// You have been granted the power to both create and destroy at whim...
// create and destroy the tabs on the Console anyway.
// Here we remove the Inspectors tab.
// Be careful though! In order to safely remove this, you must make sure that your portrayals have
// the hitObjects function overridden so that it never returns an object to be inspected..
((Console)c).getTabPane().removeTabAt(3);
// add drawUI as tab
DrawUI draw = new DrawUI(this);
((Console)c).getTabPane().addTab("Draw", new JScrollPane(draw));
// add rulesUI as tab
((Console)c).getTabPane().addTab("Rules", new RuleUI(this, draw));
}
public void quit()
{
super.quit();
if (displayFrame!=null) displayFrame.dispose();
displayFrame = null; // let gc
display = null; // let gc
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy