diff --git a/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java b/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java index 9169348c6..b974de7a5 100644 --- a/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java +++ b/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java @@ -531,8 +531,13 @@ public class OpenRocketSaver extends RocketSaver { // Write events for (FlightEvent event : branch.getEvents()) { - writeln(""); + String eventStr = ""; + writeln(eventStr); } // Write the data diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java b/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java index 82428f119..dfecc84ab 100644 --- a/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java +++ b/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java @@ -113,6 +113,8 @@ class DocumentConfig { // RocketComponent setters.put("RocketComponent:name", new StringSetter( Reflection.findMethod(RocketComponent.class, "setName", String.class))); + setters.put("RocketComponent:id", new StringSetter( + Reflection.findMethod(RocketComponent.class, "setID", String.class))); setters.put("RocketComponent:color", new ColorSetter( Reflection.findMethod(RocketComponent.class, "setColor", Color.class))); setters.put("RocketComponent:linestyle", new EnumSetter( diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java b/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java index d44303c9b..8884cae8e 100644 --- a/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java +++ b/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java @@ -8,6 +8,8 @@ import net.sf.openrocket.file.simplesax.AbstractElementHandler; import net.sf.openrocket.file.simplesax.ElementHandler; import net.sf.openrocket.file.simplesax.PlainTextHandler; import net.sf.openrocket.l10n.Translator; +import net.sf.openrocket.rocketcomponent.Rocket; +import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.simulation.FlightDataBranch; import net.sf.openrocket.simulation.FlightDataType; import net.sf.openrocket.simulation.FlightEvent; @@ -126,6 +128,8 @@ class FlightDataBranchHandler extends AbstractElementHandler { if (element.equals("event")) { double time; FlightEvent.Type type; + String sourceID; + RocketComponent source = null; try { time = DocumentConfig.stringToDouble(attributes.get("time")); @@ -139,8 +143,20 @@ class FlightDataBranchHandler extends AbstractElementHandler { warnings.add("Illegal event specification, ignoring."); return; } + + // Get the event source + Rocket rocket = context.getOpenRocketDocument().getRocket(); + sourceID = attributes.get("source"); + if (sourceID != null) { + for (RocketComponent child : rocket.getAllChildren()) { + if (child.getID().equals(sourceID)) { + source = child; + break; + } + } + } - branch.addEvent(new FlightEvent(type, time)); + branch.addEvent(new FlightEvent(type, time, source)); return; } diff --git a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java index 04d031cd9..0bc98071c 100644 --- a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java +++ b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java @@ -36,6 +36,7 @@ public class RocketComponentSaver { protected void addParams(net.sf.openrocket.rocketcomponent.RocketComponent c, List elements) { elements.add("" + TextUtil.escapeXML(c.getName()) + ""); + elements.add("" + TextUtil.escapeXML(c.getID()) + ""); ComponentPreset preset = c.getPresetComponent(); if (preset != null) { diff --git a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java index 01b5b6820..4241f4fd0 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java +++ b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java @@ -1206,8 +1206,16 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab mutex.verify(); this.id = UniqueID.uuid(); } - - + + /** + * Set the ID for this component. + * Generally not recommended to directly set the ID, this is done automatically. Only use this in case you have to. + * @param newID new ID + */ + public void setID(String newID) { + mutex.verify(); + this.id = newID; + } /** diff --git a/fileformat.txt b/fileformat.txt index dafe8745a..aa3093182 100644 --- a/fileformat.txt +++ b/fileformat.txt @@ -63,3 +63,6 @@ The following file format versions exist: Rename to ( remains for backward compatibility) Rename to ( remains for backward compatibility) Rename to ( remains for backward compatibility) + +1.9: Introduced with OpenRocket 23.xx. + Added ID for each rocket component, to in turn add this ID as a source for flight events. \ No newline at end of file