Clarify Java code provider menu entry
This commit is contained in:
parent
9027b21a12
commit
dbcc0ffb5e
@ -0,0 +1,95 @@
|
|||||||
|
package net.sf.openrocket.simulation.extension.impl;
|
||||||
|
|
||||||
|
import net.sf.openrocket.simulation.FlightEvent;
|
||||||
|
import net.sf.openrocket.simulation.SimulationConditions;
|
||||||
|
import net.sf.openrocket.simulation.SimulationStatus;
|
||||||
|
import net.sf.openrocket.simulation.exception.SimulationException;
|
||||||
|
import net.sf.openrocket.simulation.extension.AbstractSimulationExtension;
|
||||||
|
import net.sf.openrocket.simulation.listeners.AbstractSimulationListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simulation listener that stops the simulation after a specified number of steps or
|
||||||
|
* after a specified amount of simulation time.
|
||||||
|
*
|
||||||
|
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
||||||
|
*/
|
||||||
|
public class StopSimulation extends AbstractSimulationExtension {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(SimulationConditions conditions) throws SimulationException {
|
||||||
|
conditions.getSimulationListenerList().add(new StopSimulationListener());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Stop Simulation";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Stop simulafter at a configurable simulation time or step count";
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getReportRate() {
|
||||||
|
return config.getInt("reportRate", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReportRate(int reportRate) {
|
||||||
|
config.put("reportRate", reportRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStopStep() {
|
||||||
|
return config.getInt("stopStep", 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStopStep(int stopStep) {
|
||||||
|
config.put("stopStep", stopStep);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStopTime() {
|
||||||
|
return config.getInt("stopTime", 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStopTime(int stopTime) {
|
||||||
|
config.put("stopTime", stopTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StopSimulationListener extends AbstractSimulationListener {
|
||||||
|
|
||||||
|
private int step = 0;
|
||||||
|
|
||||||
|
private long startTime = -1;
|
||||||
|
private long time = -1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleFlightEvent(SimulationStatus status, FlightEvent event) {
|
||||||
|
|
||||||
|
if (event.getType() == FlightEvent.Type.LAUNCH) {
|
||||||
|
System.out.println("Simulation starting.");
|
||||||
|
time = System.nanoTime();
|
||||||
|
startTime = System.nanoTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postStep(SimulationStatus status) throws SimulationException {
|
||||||
|
step++;
|
||||||
|
if ((step % getReportRate()) == 0) {
|
||||||
|
long t = System.nanoTime();
|
||||||
|
|
||||||
|
System.out.printf("Step %4d, time=%.3f, took %d us/step (avg. %d us/step)\n",
|
||||||
|
step, status.getSimulationTime(), (t - time) / 1000 / getReportRate(), (t - startTime) / 1000 / step);
|
||||||
|
time = t;
|
||||||
|
}
|
||||||
|
if (status.getSimulationTime() >= getStopTime() || step >= getStopStep()) {
|
||||||
|
System.out.printf("Stopping simulation, step=%d time=%.3f\n", step, status.getSimulationTime());
|
||||||
|
status.getEventQueue().add(new FlightEvent(FlightEvent.Type.SIMULATION_END,
|
||||||
|
status.getSimulationTime(), null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package net.sf.openrocket.simulation.extension.impl;
|
||||||
|
|
||||||
|
import net.sf.openrocket.plugin.Plugin;
|
||||||
|
import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvider;
|
||||||
|
|
||||||
|
@Plugin
|
||||||
|
public class StopSimulationProvider extends AbstractSimulationExtensionProvider {
|
||||||
|
|
||||||
|
public StopSimulationProvider() {
|
||||||
|
super(StopSimulation.class, "Simulation Conditions", "Stop Simulation");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -7,7 +7,7 @@ import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvide
|
|||||||
public class JavaCodeProvider extends AbstractSimulationExtensionProvider {
|
public class JavaCodeProvider extends AbstractSimulationExtensionProvider {
|
||||||
|
|
||||||
public JavaCodeProvider() {
|
public JavaCodeProvider() {
|
||||||
super(JavaCode.class, "User code", "Java code");
|
super(JavaCode.class, "Scripts", "Java listeners");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
package net.sf.openrocket.simulation.listeners.example;
|
|
||||||
|
|
||||||
import net.sf.openrocket.simulation.FlightEvent;
|
|
||||||
import net.sf.openrocket.simulation.SimulationStatus;
|
|
||||||
import net.sf.openrocket.simulation.exception.SimulationException;
|
|
||||||
import net.sf.openrocket.simulation.listeners.AbstractSimulationListener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A simulation listener that stops the simulation after a specified number of steps or
|
|
||||||
* after a specified amount of simulation time.
|
|
||||||
*
|
|
||||||
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
|
||||||
*/
|
|
||||||
public class StopSimulationListener extends AbstractSimulationListener {
|
|
||||||
|
|
||||||
private final int REPORT = 500;
|
|
||||||
|
|
||||||
private final double stopTime;
|
|
||||||
private final int stopStep;
|
|
||||||
|
|
||||||
private int step = 0;
|
|
||||||
|
|
||||||
private long startTime = -1;
|
|
||||||
private long time = -1;
|
|
||||||
|
|
||||||
public StopSimulationListener() {
|
|
||||||
this(0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StopSimulationListener(double t, int n) {
|
|
||||||
stopTime = t;
|
|
||||||
stopStep = n;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handleFlightEvent(SimulationStatus status, FlightEvent event) {
|
|
||||||
|
|
||||||
if (event.getType() == FlightEvent.Type.LAUNCH) {
|
|
||||||
System.out.println("Simulation starting.");
|
|
||||||
time = System.nanoTime();
|
|
||||||
startTime = System.nanoTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postStep(SimulationStatus status) throws SimulationException {
|
|
||||||
step++;
|
|
||||||
if ((step % REPORT) == 0) {
|
|
||||||
long t = System.nanoTime();
|
|
||||||
|
|
||||||
System.out.printf("Step %4d, time=%.3f, took %d us/step (avg. %d us/step)\n",
|
|
||||||
step, status.getSimulationTime(), (t - time) / 1000 / REPORT, (t - startTime) / 1000 / step);
|
|
||||||
time = t;
|
|
||||||
}
|
|
||||||
if (status.getSimulationTime() >= stopTime || step >= stopStep) {
|
|
||||||
System.out.printf("Stopping simulation, step=%d time=%.3f\n", step, status.getSimulationTime());
|
|
||||||
status.getEventQueue().add(new FlightEvent(FlightEvent.Type.SIMULATION_END,
|
|
||||||
status.getSimulationTime(), null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,52 @@
|
|||||||
|
package net.sf.openrocket.simulation.extension.impl;
|
||||||
|
|
||||||
|
import javax.swing.JComponent;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JSpinner;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import java.awt.event.FocusEvent;
|
||||||
|
import java.awt.event.FocusListener;
|
||||||
|
|
||||||
|
import net.sf.openrocket.document.Simulation;
|
||||||
|
import net.sf.openrocket.gui.SpinnerEditor;
|
||||||
|
import net.sf.openrocket.gui.adaptors.IntegerModel;
|
||||||
|
import net.sf.openrocket.gui.components.BasicSlider;
|
||||||
|
import net.sf.openrocket.plugin.Plugin;
|
||||||
|
import net.sf.openrocket.simulation.extension.AbstractSwingSimulationExtensionConfigurator;
|
||||||
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
|
|
||||||
|
@Plugin
|
||||||
|
public class StopSimulationConfigurator extends AbstractSwingSimulationExtensionConfigurator<StopSimulation> {
|
||||||
|
private JPanel panel;
|
||||||
|
private StopSimulation extension;
|
||||||
|
|
||||||
|
public StopSimulationConfigurator() {
|
||||||
|
super(StopSimulation.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected JComponent getConfigurationComponent(StopSimulation extension, Simulation simulation, JPanel panel) {
|
||||||
|
this.panel = panel;
|
||||||
|
this.extension = extension;
|
||||||
|
|
||||||
|
addRow("Report Rate", "ReportRate", 0, 1000);
|
||||||
|
addRow("Stop Step", "StopStep", 0, 50000);
|
||||||
|
addRow("Stop Time", "StopTime", 0, 1000);
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addRow(String prompt, String fieldName, int min, int max) {
|
||||||
|
panel.add(new JLabel(prompt + ":"));
|
||||||
|
|
||||||
|
IntegerModel m = new IntegerModel(extension, fieldName, min, max);
|
||||||
|
|
||||||
|
JSpinner spin = new JSpinner(m.getSpinnerModel());
|
||||||
|
spin.setEditor(new SpinnerEditor(spin));
|
||||||
|
panel.add(spin, "w 65lp!");
|
||||||
|
|
||||||
|
BasicSlider slider = new BasicSlider(m.getSliderModel());
|
||||||
|
panel.add(slider, "w 75lp, wrap");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user