All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sim.portrayal.inspector.BubbleChartChartingPropertyInspector Maven / Gradle / Ivy

Go to download

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 Sean Luke and George Mason University
  Licensed under the Academic Free License version 3.0
  See the file "LICENSE" for more information
*/

package sim.portrayal.inspector;
import java.awt.*;
import java.awt.event.*;
import sim.util.*;
import sim.display.*;
import sim.engine.*;
import javax.swing.*;
import sim.util.gui.*;
import sim.util.media.chart.*;
import org.jfree.data.xy.*;
import org.jfree.data.general.*;

public class BubbleChartChartingPropertyInspector extends ChartingPropertyInspector
    {
    double[][] previousValues = new double[3][0]; // sacrificial
            
    protected boolean validChartGenerator(ChartGenerator generator) { return generator instanceof BubbleChartGenerator; }
        
    protected boolean includeAggregationMethodAttributes() { return false; }

    public static String name() { return "Make Bubble Chart"; }
    public static Class[] types() 
        {
        return new Class[]
            {
            new Double2D[0].getClass(), new Int2D[0].getClass(), new Double3D[0].getClass(), new Int3D[0].getClass(),
            ChartUtilities.ProvidesTripleDoubles.class
            };
        }

    public BubbleChartChartingPropertyInspector(Properties properties, int index, Frame parent, final GUIState simulation)
        {
        super(properties,index,parent,simulation);
        setupSeriesAttributes(properties, index);
        }
    
    public BubbleChartChartingPropertyInspector(Properties properties, int index, final GUIState simulation, ChartGenerator generator)
        {
        super(properties, index, simulation, generator);
        setupSeriesAttributes(properties, index);
        }
    
    //I isolated this code from the constructor into this method because I have two constructors now. 
    private void setupSeriesAttributes(Properties properties, int index)
        {
        if (isValidInspector())
            {
            if (getGenerator().getNumSeriesAttributes() == 0)  // recall that we've not been added yet
                {
                // take control
                getGenerator().setTitle("" + properties.getName(index) + " of " + properties.getObject());
                ((XYChartGenerator)getGenerator()).setYAxisLabel("Y " + properties.getName(index));
                ((XYChartGenerator)getGenerator()).setXAxisLabel("X " + properties.getName(index));
                }

            // add our series
            seriesAttributes = ((BubbleChartGenerator)generator).addSeries(previousValues, properties.getName(index), 
                new SeriesChangeListener()
                    {
                    public void seriesChanged(SeriesChangeEvent event) { getStopper().stop(); }
                    });
            }
        }
                
    protected ChartGenerator createNewGenerator()
        {
        return new BubbleChartGenerator()
            {
            public void quit()
                {
                super.quit();
                Stoppable stopper = getStopper();
                if (stopper!=null) stopper.stop();

                // remove the chart from the GUIState's charts
                getCharts(simulation).remove(this);
                }
            };
        }

    public void updateSeries(double time, double lastTime)
        {
        Object obj = properties.getValue(index);
        if (obj==null) return;
        Class cls = obj.getClass();
        double[][] vals = previousValues;  // set it to something in case we don't get anything new.
                
        if (cls.isArray())
            {
            Class comp = cls.getComponentType();
            // this is gonna be long
            if (comp.equals(Double2D.class))
                {
                Double2D[] array = (Double2D[]) obj;
                vals = new double[3][array.length];
                for(int i=0;i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy