/*
Copyright 2006 by Ankur Desai, Sean Luke, and George Mason University
Licensed under the Academic Free License version 3.0
See the file "LICENSE" for more information
*/
package sim.app.pso3d;
import java.awt.Color;
import javax.swing.JFrame;
import sim.display.Console;
import sim.display.Controller;
import sim.display.GUIState;
import sim.engine.SimState;
import sim.util.gui.SimpleColorMap;
import sim.display3d.*;
import sim.portrayal3d.simple.*;
import sim.portrayal3d.continuous.*;
import javax.media.j3d.*;
/**
@author Ankur Desai and Joey Harrison
*/
public class PSO3DWithUI extends GUIState
{
public Display3D display;
public JFrame displayFrame;
public static void main(String[] args)
{
new PSO3DWithUI().createController();
}
public Object getSimulationInspectedObject() { return state; }
public static String getName() { return "Particle Swarm Optimization 3D"; }
ContinuousPortrayal3D swarmPortrayal = new ContinuousPortrayal3D();
public PSO3DWithUI()
{
super(new PSO3D(System.currentTimeMillis()));
}
public PSO3DWithUI(SimState state)
{
super(state);
}
public void start()
{
super.start();
setupPortrayals();
}
public void load(SimState state)
{
super.load(state);
setupPortrayals();
}
public void setupPortrayals()
{
// display.destroySceneGraph();
PSO3D swarm = (PSO3D) state;
final SimpleColorMap map = new SimpleColorMap(
swarm.fitnessFunctionLowerBound[swarm.fitnessFunction], 1000, Color.blue, Color.red);
swarmPortrayal.setField(swarm.space);
for (int x = 0; x < swarm.space.allObjects.numObjs; x++)
{
final Particle3D p = (Particle3D) (swarm.space.allObjects.objs[x]);
swarmPortrayal.setPortrayalForObject(p, new CubePortrayal3D(Color.green, 0.05f)
{
public TransformGroup getModel(Object obj,TransformGroup j3dModel)
{
Appearance appearance = appearanceForColor(map.getColor(p.getFitness()));
TransformGroup model = super.getModel(obj, j3dModel);
Shape3D shape = (Shape3D) (model.getChild(0));
shape.setAppearance(appearance);
return model;
}
});
}
display.attach(new WireFrameBoxPortrayal3D(-5.12, -5.12, -5.12, 5.12, 5.12, 5.12), "Bounds");
display.createSceneGraph();
display.reset();
}
public void init(Controller c)
{
super.init(c);
double w = 10.24;
display = new Display3D(600, 600, this);
display.attach(swarmPortrayal, "Swarm");
display.scale(1.0 / w);
displayFrame = display.createFrame();
displayFrame.setTitle("PSO 3D Display");
c.registerFrame(displayFrame); // register the frame so it appears in
// the "Display" list
displayFrame.setVisible(true);
}
public void quit()
{
super.quit();
if (displayFrame != null)
displayFrame.dispose();
displayFrame = null;
display = null;
}
}