[Bugfix] Fixed Various configuration and motor UI bugs
- The active / default configuration is stored in the Rocket's ParameterSet. - Any use of it should be retrieved from here. - Don't Repeat Yourself - RocketPanel updates the rocket's default/active configuration, and only draws that one - updated code for setting new Motor to a MotorInstance (in the MotorMounts)
This commit is contained in:
parent
3ae4b0d277
commit
86e8a96d06
@ -15,7 +15,6 @@ import net.sf.openrocket.motor.MotorInstanceConfiguration;
|
|||||||
import net.sf.openrocket.motor.MotorInstanceId;
|
import net.sf.openrocket.motor.MotorInstanceId;
|
||||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
||||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
import net.sf.openrocket.simulation.MassData;
|
import net.sf.openrocket.simulation.MassData;
|
||||||
import net.sf.openrocket.util.Coordinate;
|
import net.sf.openrocket.util.Coordinate;
|
||||||
@ -125,8 +124,7 @@ public class MassCalculator implements Monitorable {
|
|||||||
if(MotorInstanceId.EMPTY_ID == inst.getMotorID()){
|
if(MotorInstanceId.EMPTY_ID == inst.getMotorID()){
|
||||||
throw new IllegalArgumentException(" detected empty motor from <FlightConfiguration>.getActiveMotors()");
|
throw new IllegalArgumentException(" detected empty motor from <FlightConfiguration>.getActiveMotors()");
|
||||||
}
|
}
|
||||||
MotorMount mount = inst.getMount();
|
if( null == inst.getMount()){
|
||||||
if( null == mount ){
|
|
||||||
throw new NullPointerException(" detected null mount");
|
throw new NullPointerException(" detected null mount");
|
||||||
}
|
}
|
||||||
if( null == inst.getMotor()){
|
if( null == inst.getMotor()){
|
||||||
|
@ -378,22 +378,17 @@ public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorInstance(final FlightConfigurationID fcid, final MotorInstance newMotorInstance){
|
public void setMotorInstance(final FlightConfigurationID fcid, final MotorInstance newMotorInstance){
|
||||||
if( null == fcid){
|
|
||||||
throw new NullPointerException(" null FCID passed passed to 'setMotorInstance(...)': bug ");
|
|
||||||
}
|
|
||||||
if( null == newMotorInstance){
|
if( null == newMotorInstance){
|
||||||
throw new NullPointerException(" null passed as MotorInstance to add to MotorSet ... bug ");
|
throw new NullPointerException(" null passed as MotorInstance to add to MotorSet ... bug ");
|
||||||
|
}else{
|
||||||
|
if( null == newMotorInstance.getMount()){
|
||||||
|
newMotorInstance.setMount(this);
|
||||||
|
}else if( !this.equals( newMotorInstance.getMount())){
|
||||||
|
throw new BugException(" attempt to add a MotorInstance to a second mount, when it's already owned by another mount!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.motors.set(fcid,newMotorInstance);
|
this.motors.set(fcid,newMotorInstance);
|
||||||
|
|
||||||
if( newMotorInstance.isEmpty() ){
|
|
||||||
return;
|
|
||||||
}else if( null == newMotorInstance.getMount()){
|
|
||||||
newMotorInstance.setMount(this);
|
|
||||||
}else if( !this.equals( newMotorInstance.getMount())){
|
|
||||||
throw new BugException(" adding a MotorInstance to a mount that it isn't owned by... ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -219,8 +219,8 @@ public class FlightConfiguration implements FlightConfigurableParameter<FlightCo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.err.println("returning "+toReturn.size()+" active motor instances for this configuration: "+this.fcid.getShortKey());
|
//System.err.println("returning "+toReturn.size()+" active motor instances for this configuration: "+this.fcid.getShortKey());
|
||||||
System.err.println(this.rocket.getConfigurationSet().toDebug());
|
//System.err.println(this.rocket.getConfigurationSet().toDebug());
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,22 +272,17 @@ public class InnerTube extends ThicknessRingComponent implements Clusterable, Ra
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorInstance(final FlightConfigurationID fcid, final MotorInstance newMotorInstance){
|
public void setMotorInstance(final FlightConfigurationID fcid, final MotorInstance newMotorInstance){
|
||||||
if( null == fcid){
|
|
||||||
throw new NullPointerException(" null FCID passed passed to 'setMotorInstance(...)': bug ");
|
|
||||||
}
|
|
||||||
if( null == newMotorInstance){
|
if( null == newMotorInstance){
|
||||||
throw new NullPointerException(" null passed as MotorInstance to add to MotorSet ... bug ");
|
throw new NullPointerException(" null passed as MotorInstance to add to MotorSet ... bug ");
|
||||||
|
}else{
|
||||||
|
if( null == newMotorInstance.getMount()){
|
||||||
|
newMotorInstance.setMount(this);
|
||||||
|
}else if( !this.equals( newMotorInstance.getMount())){
|
||||||
|
throw new BugException(" attempt to add a MotorInstance to a second mount, when it's already owned by another mount!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.motors.set(fcid,newMotorInstance);
|
this.motors.set(fcid,newMotorInstance);
|
||||||
|
|
||||||
if( newMotorInstance.isEmpty() ){
|
|
||||||
return;
|
|
||||||
}else if( null == newMotorInstance.getMount()){
|
|
||||||
newMotorInstance.setMount(this);
|
|
||||||
}else if( !this.equals( newMotorInstance.getMount())){
|
|
||||||
throw new BugException(" adding a MotorInstance to a mount that it isn't owned by... ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -52,6 +52,7 @@ public class MotorConfigurationSet extends ParameterSet<MotorInstance> {
|
|||||||
return buffer.toString();
|
return buffer.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// public void printDebug(FlightConfigurationID curFCID){
|
// public void printDebug(FlightConfigurationID curFCID){
|
||||||
// if( this.map.containsKey(curFCID)){
|
// if( this.map.containsKey(curFCID)){
|
||||||
// // no-op
|
// // no-op
|
||||||
|
@ -601,8 +601,21 @@ public class Rocket extends RocketComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setDefaultConfiguration(final FlightConfigurationID fcid) {
|
||||||
|
checkState();
|
||||||
|
if ( null == fcid ){
|
||||||
|
// silently ignore
|
||||||
|
return;
|
||||||
|
}else if( this.configSet.containsKey(fcid)){
|
||||||
|
configSet.setDefault( configSet.get(fcid));
|
||||||
|
}else{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the name of the flight configuration. A name can be unset by passing
|
* Associate the given ID and flight configuration.
|
||||||
* <code>null</code> or an empty string.
|
* <code>null</code> or an empty string.
|
||||||
*
|
*
|
||||||
* @param id the flight configuration id
|
* @param id the flight configuration id
|
||||||
|
@ -10,6 +10,9 @@ import javax.swing.event.EventListenerList;
|
|||||||
import javax.swing.event.ListDataEvent;
|
import javax.swing.event.ListDataEvent;
|
||||||
import javax.swing.event.ListDataListener;
|
import javax.swing.event.ListDataListener;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
|
import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfigurableParameter;
|
import net.sf.openrocket.rocketcomponent.FlightConfigurableParameter;
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfigurationID;
|
import net.sf.openrocket.rocketcomponent.FlightConfigurationID;
|
||||||
@ -22,7 +25,7 @@ import net.sf.openrocket.util.StateChangeListener;
|
|||||||
*/
|
*/
|
||||||
public class ParameterSetModel<T extends FlightConfigurableParameter<T>> implements ComboBoxModel<FlightConfigurationID>, StateChangeListener {
|
public class ParameterSetModel<T extends FlightConfigurableParameter<T>> implements ComboBoxModel<FlightConfigurationID>, StateChangeListener {
|
||||||
//private static final Translator trans = Application.getTranslator();
|
//private static final Translator trans = Application.getTranslator();
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(ParameterSetModel.class);
|
||||||
//private RocketDescriptor descriptor = Application.getInjector().getInstance(RocketDescriptor.class);
|
//private RocketDescriptor descriptor = Application.getInjector().getInstance(RocketDescriptor.class);
|
||||||
|
|
||||||
private EventListenerList listenerList = new EventListenerList();
|
private EventListenerList listenerList = new EventListenerList();
|
||||||
@ -69,6 +72,7 @@ public class ParameterSetModel<T extends FlightConfigurableParameter<T>> impleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(item instanceof FlightConfigurationID)) {
|
if (!(item instanceof FlightConfigurationID)) {
|
||||||
|
|
||||||
throw new IllegalArgumentException("MotorConfigurationModel item=" + item);
|
throw new IllegalArgumentException("MotorConfigurationModel item=" + item);
|
||||||
}
|
}
|
||||||
FlightConfigurationID fcid= (FlightConfigurationID) item;
|
FlightConfigurationID fcid= (FlightConfigurationID) item;
|
||||||
|
@ -140,7 +140,7 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
private final DescriptionArea selectedModifierDescription;
|
private final DescriptionArea selectedModifierDescription;
|
||||||
private final SimulationModifierTree availableModifierTree;
|
private final SimulationModifierTree availableModifierTree;
|
||||||
|
|
||||||
private final JComboBox<?> simulationSelectionCombo;
|
private final JComboBox<String> simulationSelectionCombo;
|
||||||
private final JComboBox<?> optimizationParameterCombo;
|
private final JComboBox<?> optimizationParameterCombo;
|
||||||
|
|
||||||
private final JComboBox<?> optimizationGoalCombo;
|
private final JComboBox<?> optimizationGoalCombo;
|
||||||
@ -375,7 +375,7 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
disableComponents.add(label);
|
disableComponents.add(label);
|
||||||
sub.add(label, "");
|
sub.add(label, "");
|
||||||
|
|
||||||
simulationSelectionCombo = new JComboBox();
|
simulationSelectionCombo = new JComboBox<String>();
|
||||||
simulationSelectionCombo.setToolTipText(tip);
|
simulationSelectionCombo.setToolTipText(tip);
|
||||||
populateSimulations();
|
populateSimulations();
|
||||||
simulationSelectionCombo.addActionListener(clearHistoryActionListener);
|
simulationSelectionCombo.addActionListener(clearHistoryActionListener);
|
||||||
@ -389,7 +389,7 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
disableComponents.add(label);
|
disableComponents.add(label);
|
||||||
sub.add(label, "");
|
sub.add(label, "");
|
||||||
|
|
||||||
optimizationParameterCombo = new JComboBox();
|
optimizationParameterCombo = new JComboBox<String>();
|
||||||
optimizationParameterCombo.setToolTipText(tip);
|
optimizationParameterCombo.setToolTipText(tip);
|
||||||
populateParameters();
|
populateParameters();
|
||||||
optimizationParameterCombo.addActionListener(clearHistoryActionListener);
|
optimizationParameterCombo.addActionListener(clearHistoryActionListener);
|
||||||
@ -403,7 +403,7 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
disableComponents.add(label);
|
disableComponents.add(label);
|
||||||
sub.add(label, "");
|
sub.add(label, "");
|
||||||
|
|
||||||
optimizationGoalCombo = new JComboBox(new String[] { GOAL_MAXIMIZE, GOAL_MINIMIZE, GOAL_SEEK });
|
optimizationGoalCombo = new JComboBox<String>(new String[] { GOAL_MAXIMIZE, GOAL_MINIMIZE, GOAL_SEEK });
|
||||||
optimizationGoalCombo.setToolTipText(tip);
|
optimizationGoalCombo.setToolTipText(tip);
|
||||||
optimizationGoalCombo.setEditable(false);
|
optimizationGoalCombo.setEditable(false);
|
||||||
optimizationGoalCombo.addActionListener(clearHistoryActionListener);
|
optimizationGoalCombo.addActionListener(clearHistoryActionListener);
|
||||||
@ -502,9 +502,7 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
panel.add(sub, "span 2, grow, wrap para*2");
|
panel.add(sub, "span 2, grow, wrap para*2");
|
||||||
|
|
||||||
// // Rocket figure
|
// // Rocket figure
|
||||||
FlightConfigurationID fcid = getSelectedSimulation().getOptions().getConfigID();
|
figure = new RocketFigure( getSelectedSimulation().getRocket() );
|
||||||
FlightConfiguration config = this.getSelectedSimulation().getRocket().getFlightConfiguration( fcid);
|
|
||||||
figure = new RocketFigure( config );
|
|
||||||
figure.setBorderPixels(1, 1);
|
figure.setBorderPixels(1, 1);
|
||||||
ScaleScrollPane figureScrollPane = new ScaleScrollPane(figure);
|
ScaleScrollPane figureScrollPane = new ScaleScrollPane(figure);
|
||||||
figureScrollPane.setFitting(true);
|
figureScrollPane.setFitting(true);
|
||||||
@ -969,8 +967,6 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Simulation sim = new Simulation(rocket);
|
Simulation sim = new Simulation(rocket);
|
||||||
FlightConfiguration fc = new FlightConfiguration(fcid, rocket);
|
|
||||||
|
|
||||||
String name = createSimulationName(trans.get("basicSimulationName"), descriptor.format(rocket, fcid));
|
String name = createSimulationName(trans.get("basicSimulationName"), descriptor.format(rocket, fcid));
|
||||||
simulations.add(new Named<Simulation>(sim, name));
|
simulations.add(new Named<Simulation>(sim, name));
|
||||||
}
|
}
|
||||||
@ -980,7 +976,7 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
simulations.add(new Named<Simulation>(sim, name));
|
simulations.add(new Named<Simulation>(sim, name));
|
||||||
|
|
||||||
|
|
||||||
simulationSelectionCombo.setModel(new DefaultComboBoxModel(simulations.toArray()));
|
simulationSelectionCombo.setModel(new DefaultComboBoxModel<String>((String[])simulations.toArray()));
|
||||||
simulationSelectionCombo.setSelectedIndex(0);
|
simulationSelectionCombo.setSelectedIndex(0);
|
||||||
if (current != null) {
|
if (current != null) {
|
||||||
for (int i = 0; i < simulations.size(); i++) {
|
for (int i = 0; i < simulations.size(); i++) {
|
||||||
@ -1167,10 +1163,9 @@ public class GeneralOptimizationDialog extends JDialog {
|
|||||||
selectedModifierDescription.setText("");
|
selectedModifierDescription.setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the figure
|
// Update the active configuration
|
||||||
FlightConfigurationID fcid = getSelectedSimulation().getOptions().getConfigID();
|
FlightConfigurationID fcid = getSelectedSimulation().getOptions().getConfigID();
|
||||||
FlightConfiguration config = this.getSelectedSimulation().getRocket().getFlightConfiguration( fcid);
|
getSelectedSimulation().getRocket().setDefaultConfiguration(fcid);
|
||||||
figure.setConfiguration( config);
|
|
||||||
|
|
||||||
updating = false;
|
updating = false;
|
||||||
}
|
}
|
||||||
|
@ -34,23 +34,24 @@ import javax.swing.JPopupMenu;
|
|||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.event.MouseInputAdapter;
|
import javax.swing.event.MouseInputAdapter;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.jogamp.opengl.util.awt.Overlay;
|
||||||
|
|
||||||
import net.sf.openrocket.document.OpenRocketDocument;
|
import net.sf.openrocket.document.OpenRocketDocument;
|
||||||
import net.sf.openrocket.gui.figureelements.CGCaret;
|
import net.sf.openrocket.gui.figureelements.CGCaret;
|
||||||
import net.sf.openrocket.gui.figureelements.CPCaret;
|
import net.sf.openrocket.gui.figureelements.CPCaret;
|
||||||
import net.sf.openrocket.gui.figureelements.FigureElement;
|
import net.sf.openrocket.gui.figureelements.FigureElement;
|
||||||
import net.sf.openrocket.gui.main.Splash;
|
import net.sf.openrocket.gui.main.Splash;
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
||||||
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
import net.sf.openrocket.startup.Preferences;
|
import net.sf.openrocket.startup.Preferences;
|
||||||
import net.sf.openrocket.util.Coordinate;
|
import net.sf.openrocket.util.Coordinate;
|
||||||
import net.sf.openrocket.util.MathUtil;
|
import net.sf.openrocket.util.MathUtil;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import com.jogamp.opengl.util.awt.Overlay;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author Bill Kuker <bkuker@billkuker.com>
|
* @author Bill Kuker <bkuker@billkuker.com>
|
||||||
*/
|
*/
|
||||||
@ -74,7 +75,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
|||||||
private static final int CARET_SIZE = 20;
|
private static final int CARET_SIZE = 20;
|
||||||
|
|
||||||
private final OpenRocketDocument document;
|
private final OpenRocketDocument document;
|
||||||
private final FlightConfiguration configuration;
|
private final Rocket rkt;
|
||||||
private Component canvas;
|
private Component canvas;
|
||||||
|
|
||||||
|
|
||||||
@ -95,9 +96,9 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
|||||||
|
|
||||||
RocketRenderer rr = new FigureRenderer();
|
RocketRenderer rr = new FigureRenderer();
|
||||||
|
|
||||||
public RocketFigure3d(final OpenRocketDocument document, final FlightConfiguration config) {
|
public RocketFigure3d(final OpenRocketDocument document) {
|
||||||
this.document = document;
|
this.document = document;
|
||||||
this.configuration = config;
|
this.rkt = document.getRocket();
|
||||||
this.setLayout(new BorderLayout());
|
this.setLayout(new BorderLayout());
|
||||||
|
|
||||||
//Only initizlize GL if 3d is enabled.
|
//Only initizlize GL if 3d is enabled.
|
||||||
@ -292,8 +293,10 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
|||||||
|
|
||||||
setupView(gl, glu);
|
setupView(gl, glu);
|
||||||
|
|
||||||
|
final FlightConfiguration configuration = rkt.getDefaultConfiguration();
|
||||||
if (pickPoint != null) {
|
if (pickPoint != null) {
|
||||||
gl.glDisable(GLLightingFunc.GL_LIGHTING);
|
gl.glDisable(GLLightingFunc.GL_LIGHTING);
|
||||||
|
|
||||||
final RocketComponent picked = rr.pick(drawable, configuration,
|
final RocketComponent picked = rr.pick(drawable, configuration,
|
||||||
pickPoint, pickEvent.isShiftDown() ? selection : null);
|
pickPoint, pickEvent.isShiftDown() ? selection : null);
|
||||||
if (csl != null) {
|
if (csl != null) {
|
||||||
@ -485,6 +488,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
|||||||
return cachedBounds;
|
return cachedBounds;
|
||||||
} else {
|
} else {
|
||||||
final Bounds b = new Bounds();
|
final Bounds b = new Bounds();
|
||||||
|
final FlightConfiguration configuration = rkt.getDefaultConfiguration();
|
||||||
final Collection<Coordinate> bounds = configuration.getBounds();
|
final Collection<Coordinate> bounds = configuration.getBounds();
|
||||||
for (Coordinate c : bounds) {
|
for (Coordinate c : bounds) {
|
||||||
b.xMax = Math.max(b.xMax, c.x);
|
b.xMax = Math.max(b.xMax, c.x);
|
||||||
|
@ -27,6 +27,7 @@ import net.sf.openrocket.gui.dialogs.flightconfiguration.MotorMountConfiguration
|
|||||||
import net.sf.openrocket.gui.dialogs.motor.MotorChooserDialog;
|
import net.sf.openrocket.gui.dialogs.motor.MotorChooserDialog;
|
||||||
import net.sf.openrocket.motor.Motor;
|
import net.sf.openrocket.motor.Motor;
|
||||||
import net.sf.openrocket.motor.MotorInstance;
|
import net.sf.openrocket.motor.MotorInstance;
|
||||||
|
import net.sf.openrocket.motor.ThrustCurveMotorInstance;
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfigurationID;
|
import net.sf.openrocket.rocketcomponent.FlightConfigurationID;
|
||||||
import net.sf.openrocket.rocketcomponent.IgnitionEvent;
|
import net.sf.openrocket.rocketcomponent.IgnitionEvent;
|
||||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||||
@ -212,11 +213,17 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
|||||||
Motor m = motorChooserDialog.getSelectedMotor();
|
Motor m = motorChooserDialog.getSelectedMotor();
|
||||||
double d = motorChooserDialog.getSelectedDelay();
|
double d = motorChooserDialog.getSelectedDelay();
|
||||||
|
|
||||||
MotorInstance curInstance = curMount.getMotorInstance(fcid);
|
//System.err.println("Just selected motor: "+m+" for config: "+fcid);
|
||||||
if (m != null) {
|
if (m != null) {
|
||||||
curInstance = m.getNewInstance();
|
// DEBUG
|
||||||
|
//System.err.println(" >> new motor: "+m.getDesignation()+" delay: "+d);
|
||||||
|
|
||||||
|
ThrustCurveMotorInstance curInstance = (ThrustCurveMotorInstance) m.getNewInstance();
|
||||||
curInstance.setEjectionDelay(d);
|
curInstance.setEjectionDelay(d);
|
||||||
curMount.setMotorInstance( fcid, curInstance);
|
curMount.setMotorInstance( fcid, curInstance);
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
//System.err.println(" set?: "+curMount.getMotorInstance(fcid).getMotor().getDesignation());
|
||||||
}
|
}
|
||||||
|
|
||||||
fireTableDataChanged();
|
fireTableDataChanged();
|
||||||
@ -281,9 +288,9 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
|
|||||||
|
|
||||||
MotorInstance curMotor = mount.getMotorInstance( configId);
|
MotorInstance curMotor = mount.getMotorInstance( configId);
|
||||||
String motorString = getMotorSpecification( curMotor );
|
String motorString = getMotorSpecification( curMotor );
|
||||||
// if( mount instanceof BodyTube ){
|
// if( mount instanceof InnerTube ){
|
||||||
// System.err.println("Formatting Cell: fcid="+configId.key.substring(0, 8));
|
// System.err.println("Formatting Cell: fcid="+configId.key.substring(0, 8));
|
||||||
// ((BodyTube) mount).printMotorDebug();
|
// System.err.println( ((InnerTube) mount).toDebugString() );
|
||||||
// }
|
// }
|
||||||
// System.err.println("rendering "+configId.getShortKey()+" cell: " );
|
// System.err.println("rendering "+configId.getShortKey()+" cell: " );
|
||||||
// if( rocket.getConfigurationSet().isDefault( configId) ){
|
// if( rocket.getConfigurationSet().isDefault( configId) ){
|
||||||
|
@ -168,7 +168,7 @@ public class DesignReport {
|
|||||||
configuration.setAllStages();
|
configuration.setAllStages();
|
||||||
PdfContentByte canvas = writer.getDirectContent();
|
PdfContentByte canvas = writer.getDirectContent();
|
||||||
|
|
||||||
final PrintFigure figure = new PrintFigure(configuration);
|
final PrintFigure figure = new PrintFigure(rocket);
|
||||||
figure.setRotation(rotation);
|
figure.setRotation(rotation);
|
||||||
|
|
||||||
FigureElement cp = panel.getExtraCP();
|
FigureElement cp = panel.getExtraCP();
|
||||||
|
@ -4,21 +4,22 @@
|
|||||||
package net.sf.openrocket.gui.print;
|
package net.sf.openrocket.gui.print;
|
||||||
|
|
||||||
import net.sf.openrocket.gui.scalefigure.RocketFigure;
|
import net.sf.openrocket.gui.scalefigure.RocketFigure;
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A figure used to override the scale factor in RocketFigure. This allows pinpoint scaling to allow a diagram
|
* A figure used to override the scale factor in RocketFigure. This allows pinpoint scaling to allow a diagram
|
||||||
* to fit in the width of the chosen page size.
|
* to fit in the width of the chosen page size.
|
||||||
*/
|
*/
|
||||||
public class PrintFigure extends RocketFigure {
|
public class PrintFigure extends RocketFigure {
|
||||||
|
private static final long serialVersionUID = -3843219909502782607L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param configuration the configuration
|
* @param configuration the configuration
|
||||||
*/
|
*/
|
||||||
public PrintFigure(final FlightConfiguration configuration) {
|
public PrintFigure(final Rocket rkt) {
|
||||||
super(configuration);
|
super(rkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -59,7 +59,8 @@ public class RocketFigure extends AbstractScaleFigure {
|
|||||||
public static final double SELECTED_WIDTH = 2.0;
|
public static final double SELECTED_WIDTH = 2.0;
|
||||||
|
|
||||||
|
|
||||||
private FlightConfiguration configuration;
|
private Rocket rocket;
|
||||||
|
|
||||||
private RocketComponent[] selection = new RocketComponent[0];
|
private RocketComponent[] selection = new RocketComponent[0];
|
||||||
private double figureWidth = 0, figureHeight = 0;
|
private double figureWidth = 0, figureHeight = 0;
|
||||||
protected int figureWidthPx = 0, figureHeightPx = 0;
|
protected int figureWidthPx = 0, figureHeightPx = 0;
|
||||||
@ -91,10 +92,9 @@ public class RocketFigure extends AbstractScaleFigure {
|
|||||||
/**
|
/**
|
||||||
* Creates a new rocket figure.
|
* Creates a new rocket figure.
|
||||||
*/
|
*/
|
||||||
public RocketFigure(FlightConfiguration configuration) {
|
public RocketFigure(Rocket _rkt) {
|
||||||
super();
|
super();
|
||||||
|
this.rocket = _rkt;
|
||||||
this.configuration = configuration;
|
|
||||||
|
|
||||||
this.rotation = 0.0;
|
this.rotation = 0.0;
|
||||||
this.transformation = Transformation.rotate_x(0.0);
|
this.transformation = Transformation.rotate_x(0.0);
|
||||||
@ -102,15 +102,8 @@ public class RocketFigure extends AbstractScaleFigure {
|
|||||||
updateFigure();
|
updateFigure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FlightConfiguration getConfiguration() {
|
||||||
/**
|
return this.rocket.getDefaultConfiguration();
|
||||||
* Set the configuration displayed by the figure. It may use the same or different rocket.
|
|
||||||
*
|
|
||||||
* @param configuration the configuration to display.
|
|
||||||
*/
|
|
||||||
public void setConfiguration(FlightConfiguration configuration) {
|
|
||||||
this.configuration = configuration;
|
|
||||||
updateFigure();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -184,7 +177,8 @@ public class RocketFigure extends AbstractScaleFigure {
|
|||||||
figureShapes.clear();
|
figureShapes.clear();
|
||||||
|
|
||||||
calculateSize();
|
calculateSize();
|
||||||
getShapes( figureShapes, configuration);
|
FlightConfiguration config = rocket.getDefaultConfiguration();
|
||||||
|
getShapes( figureShapes, config);
|
||||||
|
|
||||||
repaint();
|
repaint();
|
||||||
fireChangeEvent();
|
fireChangeEvent();
|
||||||
@ -340,7 +334,8 @@ public class RocketFigure extends AbstractScaleFigure {
|
|||||||
Color borderColor = ((SwingPreferences)Application.getPreferences()).getMotorBorderColor();
|
Color borderColor = ((SwingPreferences)Application.getPreferences()).getMotorBorderColor();
|
||||||
|
|
||||||
//MotorInstanceConfiguration mic = new MotorInstanceConfiguration(configuration);
|
//MotorInstanceConfiguration mic = new MotorInstanceConfiguration(configuration);
|
||||||
for( MotorInstance curInstance : configuration.getActiveMotors()){
|
FlightConfiguration config = rocket.getDefaultConfiguration();
|
||||||
|
for( MotorInstance curInstance : config.getActiveMotors()){
|
||||||
MotorMount mount = curInstance.getMount();
|
MotorMount mount = curInstance.getMount();
|
||||||
Motor motor = curInstance.getMotor();
|
Motor motor = curInstance.getMotor();
|
||||||
double motorLength = motor.getLength();
|
double motorLength = motor.getLength();
|
||||||
@ -352,11 +347,9 @@ public class RocketFigure extends AbstractScaleFigure {
|
|||||||
Coordinate[] mountLocations = mountComponent.getLocations();
|
Coordinate[] mountLocations = mountComponent.getLocations();
|
||||||
|
|
||||||
double mountLength = mountComponent.getLength();
|
double mountLength = mountComponent.getLength();
|
||||||
System.err.println("motors are drawing wrong... from here?");
|
//System.err.println("Drawing motor from here. Motor: "+motor.getDesignation()+" of length: "+motor.getLength());
|
||||||
for ( Coordinate curMountLocation : mountLocations ){
|
for ( Coordinate curMountLocation : mountLocations ){
|
||||||
Coordinate curMotorLocation = curMountLocation.add( mountLength - motorLength + mount.getMotorOverhang(), 0, 0);
|
Coordinate curMotorLocation = curMountLocation.add( mountLength - motorLength + mount.getMotorOverhang(), 0, 0);
|
||||||
System.err.println("Translating from mount at "+curMountLocation+" to motor at "+curMotorLocation);
|
|
||||||
|
|
||||||
|
|
||||||
Coordinate coord = curMotorLocation;
|
Coordinate coord = curMotorLocation;
|
||||||
{
|
{
|
||||||
@ -523,7 +516,7 @@ public class RocketFigure extends AbstractScaleFigure {
|
|||||||
* The bounds are stored in the variables minX, maxX and maxR.
|
* The bounds are stored in the variables minX, maxX and maxR.
|
||||||
*/
|
*/
|
||||||
private void calculateFigureBounds() {
|
private void calculateFigureBounds() {
|
||||||
Collection<Coordinate> bounds = configuration.getBounds();
|
Collection<Coordinate> bounds = rocket.getDefaultConfiguration().getBounds();
|
||||||
|
|
||||||
if (bounds.isEmpty()) {
|
if (bounds.isEmpty()) {
|
||||||
minX = 0;
|
minX = 0;
|
||||||
|
@ -5,6 +5,8 @@ import java.awt.BorderLayout;
|
|||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.InputEvent;
|
import java.awt.event.InputEvent;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -128,7 +130,6 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
private MassCalculator massCalculator;
|
private MassCalculator massCalculator;
|
||||||
|
|
||||||
private final OpenRocketDocument document;
|
private final OpenRocketDocument document;
|
||||||
private final FlightConfiguration configuration;
|
|
||||||
|
|
||||||
private Caret extraCP = null;
|
private Caret extraCP = null;
|
||||||
private Caret extraCG = null;
|
private Caret extraCG = null;
|
||||||
@ -169,17 +170,17 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
}
|
}
|
||||||
|
|
||||||
public RocketPanel(OpenRocketDocument document) {
|
public RocketPanel(OpenRocketDocument document) {
|
||||||
|
|
||||||
this.document = document;
|
this.document = document;
|
||||||
configuration = document.getDefaultConfiguration();
|
Rocket rkt = document.getRocket();
|
||||||
|
|
||||||
|
|
||||||
// TODO: FUTURE: calculator selection
|
// TODO: FUTURE: calculator selection
|
||||||
aerodynamicCalculator = new BarrowmanCalculator();
|
aerodynamicCalculator = new BarrowmanCalculator();
|
||||||
massCalculator = new MassCalculator();
|
massCalculator = new MassCalculator();
|
||||||
|
|
||||||
// Create figure and custom scroll pane
|
// Create figure and custom scroll pane
|
||||||
figure = new RocketFigure(configuration);
|
figure = new RocketFigure(rkt);
|
||||||
figure3d = new RocketFigure3d(document, configuration);
|
figure3d = new RocketFigure3d(document);
|
||||||
|
|
||||||
figureHolder = new JPanel(new BorderLayout());
|
figureHolder = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
@ -199,7 +200,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
is3d = true;
|
is3d = true;
|
||||||
go2D();
|
go2D();
|
||||||
|
|
||||||
configuration.addChangeListener(new StateChangeListener() {
|
rkt.addChangeListener(new StateChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void stateChanged(EventObject e) {
|
public void stateChanged(EventObject e) {
|
||||||
updateExtras();
|
updateExtras();
|
||||||
@ -207,7 +208,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getRocket().addComponentChangeListener(new ComponentChangeListener() {
|
rkt.addComponentChangeListener(new ComponentChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void componentChanged(ComponentChangeEvent e) {
|
public void componentChanged(ComponentChangeEvent e) {
|
||||||
if (is3d) {
|
if (is3d) {
|
||||||
@ -296,6 +297,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
add(scaleSelector);
|
add(scaleSelector);
|
||||||
|
|
||||||
// Stage selector
|
// Stage selector
|
||||||
|
final FlightConfiguration configuration = document.getDefaultConfiguration();
|
||||||
StageSelector stageSelector = new StageSelector(configuration);
|
StageSelector stageSelector = new StageSelector(configuration);
|
||||||
add(stageSelector);
|
add(stageSelector);
|
||||||
|
|
||||||
@ -305,14 +307,29 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
label.setHorizontalAlignment(JLabel.RIGHT);
|
label.setHorizontalAlignment(JLabel.RIGHT);
|
||||||
add(label, "growx, right");
|
add(label, "growx, right");
|
||||||
|
|
||||||
// ?? this model should operate off of either: the rocket (or the FlightConfigurationSet contained in the rocket... )
|
|
||||||
|
|
||||||
ParameterSetModel<FlightConfiguration> psm = new ParameterSetModel<FlightConfiguration>( configuration.getRocket().getConfigurationSet());
|
ParameterSetModel<FlightConfiguration> psm = new ParameterSetModel<FlightConfiguration>( configuration.getRocket().getConfigurationSet());
|
||||||
JComboBox<FlightConfigurationID> flightConfigurationcomboBox = new JComboBox<FlightConfigurationID>(psm);
|
JComboBox<FlightConfigurationID> flightConfigurationComboBox = new JComboBox<FlightConfigurationID>(psm);
|
||||||
add(flightConfigurationcomboBox, "wrap");
|
add(flightConfigurationComboBox, "wrap");
|
||||||
|
flightConfigurationComboBox.addActionListener(new ActionListener(){
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent ae) {
|
||||||
|
Object source = ae.getSource();
|
||||||
|
if( source instanceof JComboBox ){
|
||||||
|
JComboBox<FlightConfigurationID> box = (JComboBox<FlightConfigurationID>) source;
|
||||||
|
FlightConfiguration newConfig = (FlightConfiguration)box.getSelectedItem();
|
||||||
|
document.getRocket().getConfigurationSet().setDefault( newConfig);
|
||||||
|
updateExtras();
|
||||||
|
updateFigures();
|
||||||
|
// fireChangeEvent();
|
||||||
|
|
||||||
|
System.err.println(" processing actionevent for flight config combo box... cmd: "+ae.getActionCommand());
|
||||||
|
System.err.println(" seld key: "+newConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Create slider and scroll pane
|
// Create slider and scroll pane
|
||||||
|
|
||||||
DoubleModel theta = new DoubleModel(figure, "Rotation",
|
DoubleModel theta = new DoubleModel(figure, "Rotation",
|
||||||
UnitGroup.UNITS_ANGLE, 0, 2 * Math.PI);
|
UnitGroup.UNITS_ANGLE, 0, 2 * Math.PI);
|
||||||
UnitSelector us = new UnitSelector(theta, true);
|
UnitSelector us = new UnitSelector(theta, true);
|
||||||
@ -347,7 +364,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
}
|
}
|
||||||
|
|
||||||
public FlightConfiguration getConfiguration() {
|
public FlightConfiguration getConfiguration() {
|
||||||
return configuration;
|
return document.getDefaultConfiguration();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -550,8 +567,9 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
Coordinate cp, cg;
|
Coordinate cp, cg;
|
||||||
double cpx, cgx;
|
double cpx, cgx;
|
||||||
|
|
||||||
|
FlightConfiguration curConfig = document.getDefaultConfiguration();
|
||||||
// TODO: MEDIUM: User-definable conditions
|
// TODO: MEDIUM: User-definable conditions
|
||||||
FlightConditions conditions = new FlightConditions(configuration);
|
FlightConditions conditions = new FlightConditions(curConfig);
|
||||||
warnings.clear();
|
warnings.clear();
|
||||||
|
|
||||||
if (!Double.isNaN(cpMach)) {
|
if (!Double.isNaN(cpMach)) {
|
||||||
@ -577,13 +595,13 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
|
|
||||||
if (!Double.isNaN(cpTheta)) {
|
if (!Double.isNaN(cpTheta)) {
|
||||||
conditions.setTheta(cpTheta);
|
conditions.setTheta(cpTheta);
|
||||||
cp = aerodynamicCalculator.getCP(configuration, conditions, warnings);
|
cp = aerodynamicCalculator.getCP(curConfig, conditions, warnings);
|
||||||
} else {
|
} else {
|
||||||
cp = aerodynamicCalculator.getWorstCP(configuration, conditions, warnings);
|
cp = aerodynamicCalculator.getWorstCP(curConfig, conditions, warnings);
|
||||||
}
|
}
|
||||||
extraText.setTheta(cpTheta);
|
extraText.setTheta(cpTheta);
|
||||||
|
|
||||||
cg = massCalculator.getCG(configuration, MassCalcType.LAUNCH_MASS);
|
cg = massCalculator.getCG(curConfig, MassCalcType.LAUNCH_MASS);
|
||||||
// System.out.println("CG computed as "+cg+ " CP as "+cp);
|
// System.out.println("CG computed as "+cg+ " CP as "+cp);
|
||||||
|
|
||||||
if (cp.weight > 0.000001)
|
if (cp.weight > 0.000001)
|
||||||
@ -601,7 +619,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
|
|
||||||
// Length bound is assumed to be tight
|
// Length bound is assumed to be tight
|
||||||
double length = 0, diameter = 0;
|
double length = 0, diameter = 0;
|
||||||
Collection<Coordinate> bounds = configuration.getBounds();
|
Collection<Coordinate> bounds = curConfig.getBounds();
|
||||||
if (!bounds.isEmpty()) {
|
if (!bounds.isEmpty()) {
|
||||||
double minX = Double.POSITIVE_INFINITY, maxX = Double.NEGATIVE_INFINITY;
|
double minX = Double.POSITIVE_INFINITY, maxX = Double.NEGATIVE_INFINITY;
|
||||||
for (Coordinate c : bounds) {
|
for (Coordinate c : bounds) {
|
||||||
@ -613,7 +631,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
length = maxX - minX;
|
length = maxX - minX;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (RocketComponent c : configuration.getActiveComponents()) {
|
for (RocketComponent c : curConfig.getActiveComponents()) {
|
||||||
if (c instanceof SymmetricComponent) {
|
if (c instanceof SymmetricComponent) {
|
||||||
double d1 = ((SymmetricComponent) c).getForeRadius() * 2;
|
double d1 = ((SymmetricComponent) c).getForeRadius() * 2;
|
||||||
double d2 = ((SymmetricComponent) c).getAftRadius() * 2;
|
double d2 = ((SymmetricComponent) c).getAftRadius() * 2;
|
||||||
@ -652,18 +670,18 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check whether data is already up to date
|
// Check whether data is already up to date
|
||||||
if (flightDataFunctionalID == configuration.getRocket().getFunctionalModID() &&
|
if (flightDataFunctionalID == curConfig.getRocket().getFunctionalModID() &&
|
||||||
flightDataMotorID == configuration.getFlightConfigurationID()) {
|
flightDataMotorID == curConfig.getFlightConfigurationID()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
flightDataFunctionalID = configuration.getRocket().getFunctionalModID();
|
flightDataFunctionalID = curConfig.getRocket().getFunctionalModID();
|
||||||
flightDataMotorID = configuration.getFlightConfigurationID();
|
flightDataMotorID = curConfig.getFlightConfigurationID();
|
||||||
|
|
||||||
// Stop previous computation (if any)
|
// Stop previous computation (if any)
|
||||||
stopBackgroundSimulation();
|
stopBackgroundSimulation();
|
||||||
|
|
||||||
MotorInstanceConfiguration mic = new MotorInstanceConfiguration( configuration);
|
MotorInstanceConfiguration mic = new MotorInstanceConfiguration( curConfig);
|
||||||
|
|
||||||
// Check that configuration has motors
|
// Check that configuration has motors
|
||||||
if (!mic.hasMotors()){
|
if (!mic.hasMotors()){
|
||||||
@ -676,10 +694,10 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
if(((SwingPreferences) Application.getPreferences()).computeFlightInBackground()){
|
if(((SwingPreferences) Application.getPreferences()).computeFlightInBackground()){
|
||||||
extraText.setCalculatingData(true);
|
extraText.setCalculatingData(true);
|
||||||
|
|
||||||
Rocket duplicate = (Rocket) configuration.getRocket().copy();
|
Rocket duplicate = (Rocket) document.getRocket().copy();
|
||||||
Simulation simulation = ((SwingPreferences) Application.getPreferences()).getBackgroundSimulation(duplicate);
|
Simulation simulation = ((SwingPreferences) Application.getPreferences()).getBackgroundSimulation(duplicate);
|
||||||
simulation.getOptions().setMotorConfigurationID(
|
simulation.getOptions().setMotorConfigurationID(
|
||||||
configuration.getFlightConfigurationID());
|
document.getDefaultConfiguration().getFlightConfigurationID());
|
||||||
|
|
||||||
backgroundSimulationWorker = new BackgroundSimulationWorker(document, simulation);
|
backgroundSimulationWorker = new BackgroundSimulationWorker(document, simulation);
|
||||||
backgroundSimulationExecutor.execute(backgroundSimulationWorker);
|
backgroundSimulationExecutor.execute(backgroundSimulationWorker);
|
||||||
@ -765,9 +783,10 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
|
|||||||
* Adds the extra data to the figure. Currently this includes the CP and CG carets.
|
* Adds the extra data to the figure. Currently this includes the CP and CG carets.
|
||||||
*/
|
*/
|
||||||
private void addExtras() {
|
private void addExtras() {
|
||||||
|
FlightConfiguration curConfig = document.getDefaultConfiguration();
|
||||||
extraCG = new CGCaret(0, 0);
|
extraCG = new CGCaret(0, 0);
|
||||||
extraCP = new CPCaret(0, 0);
|
extraCP = new CPCaret(0, 0);
|
||||||
extraText = new RocketInfo(configuration);
|
extraText = new RocketInfo(curConfig);
|
||||||
updateExtras();
|
updateExtras();
|
||||||
|
|
||||||
figure.clearRelativeExtra();
|
figure.clearRelativeExtra();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user