Merge branch 'unstable' into prep-beta

This commit is contained in:
SiboVG 2023-09-15 23:55:30 +02:00
commit 74d3bc79ef
5 changed files with 36 additions and 5 deletions

View File

@ -1504,6 +1504,8 @@ OBJOptionChooser.checkbox.exportChildren = Export children
OBJOptionChooser.checkbox.exportChildren.ttip = If true, export children of the selected components as well. OBJOptionChooser.checkbox.exportChildren.ttip = If true, export children of the selected components as well.
OBJOptionChooser.checkbox.exportChildren.assemblies.ttip = Component assemblies always export their children. OBJOptionChooser.checkbox.exportChildren.assemblies.ttip = Component assemblies always export their children.
OBJOptionChooser.checkbox.exportChildren.noChildren.ttip = Selected components don't have children. OBJOptionChooser.checkbox.exportChildren.noChildren.ttip = Selected components don't have children.
OBJOptionChooser.checkbox.exportMotors = Export motors
OBJOptionChooser.checkbox.exportMotors.ttip = If true, export the motors of the rocket.
OBJOptionChooser.checkbox.exportAppearance = Export appearance OBJOptionChooser.checkbox.exportAppearance = Export appearance
OBJOptionChooser.checkbox.exportAppearance.ttip = If true, export the component appearances to an MTL file. OBJOptionChooser.checkbox.exportAppearance.ttip = If true, export the component appearances to an MTL file.
OBJOptionChooser.checkbox.exportAsSeparateFiles = Export as separate files OBJOptionChooser.checkbox.exportAsSeparateFiles = Export as separate files

View File

@ -6,10 +6,16 @@ import net.sf.openrocket.file.wavefrontobj.ObjUtils;
import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.rocketcomponent.Rocket;
public class OBJExportOptions { public class OBJExportOptions {
// ! Update Preferences when adding new options !
/** /**
* If true, export all children of the components as well * If true, export all children of the components as well
*/ */
private boolean exportChildren; private boolean exportChildren;
/**
* If true, export the motors of the components as well.
*/
private boolean exportMotors;
/** /**
* If true, export the appearance of the components to an MTL file. * If true, export the appearance of the components to an MTL file.
*/ */
@ -64,6 +70,14 @@ public class OBJExportOptions {
this.exportChildren = exportChildren; this.exportChildren = exportChildren;
} }
public boolean isExportMotors() {
return exportMotors;
}
public void setExportMotors(boolean exportMotors) {
this.exportMotors = exportMotors;
}
public boolean isRemoveOffset() { public boolean isRemoveOffset() {
return removeOffset; return removeOffset;
} }

View File

@ -262,7 +262,7 @@ public class OBJExporterFactory {
exporter.addToObj(); exporter.addToObj();
// Export motor // Export motor
if (component instanceof MotorMount) { if (component instanceof MotorMount && options.isExportMotors()) {
// Get the motor // Get the motor
MotorConfiguration motoConfig = ((MotorMount) component).getMotorConfig(config.getId()); MotorConfiguration motoConfig = ((MotorMount) component).getMotorConfig(config.getId());
Motor motor = motoConfig.getMotor(); Motor motor = motoConfig.getMotor();

View File

@ -122,6 +122,7 @@ public abstract class Preferences implements ChangeSource {
// OBJ Export options // OBJ Export options
private static final String OBJ_EXPORT_OPTIONS_NODE = "OBJExportOptions"; private static final String OBJ_EXPORT_OPTIONS_NODE = "OBJExportOptions";
private static final String OBJ_EXPORT_CHILDREN = "ExportChildren"; private static final String OBJ_EXPORT_CHILDREN = "ExportChildren";
private static final String OBJ_EXPORT_MOTORS = "ExportMotors";
private static final String OBJ_EXPORT_APPEARANCE = "ExportAppearance"; private static final String OBJ_EXPORT_APPEARANCE = "ExportAppearance";
private static final String OBJ_EXPORT_AS_SEPARATE_FILES = "ExportAsSeparateFiles"; private static final String OBJ_EXPORT_AS_SEPARATE_FILES = "ExportAsSeparateFiles";
private static final String OBJ_REMOVE_OFFSET = "RemoveOffset"; private static final String OBJ_REMOVE_OFFSET = "RemoveOffset";
@ -1040,6 +1041,7 @@ public abstract class Preferences implements ChangeSource {
java.util.prefs.Preferences objExportOptionsNode = preferences.node(OBJ_EXPORT_OPTIONS_NODE); java.util.prefs.Preferences objExportOptionsNode = preferences.node(OBJ_EXPORT_OPTIONS_NODE);
objExportOptionsNode.putBoolean(OBJ_EXPORT_CHILDREN, options.isExportChildren()); objExportOptionsNode.putBoolean(OBJ_EXPORT_CHILDREN, options.isExportChildren());
objExportOptionsNode.putBoolean(OBJ_EXPORT_MOTORS, options.isExportMotors());
objExportOptionsNode.putBoolean(OBJ_EXPORT_APPEARANCE, options.isExportAppearance()); objExportOptionsNode.putBoolean(OBJ_EXPORT_APPEARANCE, options.isExportAppearance());
objExportOptionsNode.putBoolean(OBJ_EXPORT_AS_SEPARATE_FILES, options.isExportAsSeparateFiles()); objExportOptionsNode.putBoolean(OBJ_EXPORT_AS_SEPARATE_FILES, options.isExportAsSeparateFiles());
objExportOptionsNode.putBoolean(OBJ_REMOVE_OFFSET, options.isRemoveOffset()); objExportOptionsNode.putBoolean(OBJ_REMOVE_OFFSET, options.isRemoveOffset());
@ -1069,6 +1071,7 @@ public abstract class Preferences implements ChangeSource {
// By default, we will use options optimized for 3D printing (most-used case) // By default, we will use options optimized for 3D printing (most-used case)
OBJExportOptions options = new OBJExportOptions(rocket); OBJExportOptions options = new OBJExportOptions(rocket);
options.setExportChildren(objExportOptionsNode.getBoolean(OBJ_EXPORT_CHILDREN, false)); options.setExportChildren(objExportOptionsNode.getBoolean(OBJ_EXPORT_CHILDREN, false));
options.setExportMotors(objExportOptionsNode.getBoolean(OBJ_EXPORT_MOTORS, false));
options.setExportAppearance(objExportOptionsNode.getBoolean(OBJ_EXPORT_APPEARANCE, false)); options.setExportAppearance(objExportOptionsNode.getBoolean(OBJ_EXPORT_APPEARANCE, false));
options.setExportAsSeparateFiles(objExportOptionsNode.getBoolean(OBJ_EXPORT_AS_SEPARATE_FILES, false)); options.setExportAsSeparateFiles(objExportOptionsNode.getBoolean(OBJ_EXPORT_AS_SEPARATE_FILES, false));
options.setRemoveOffset(objExportOptionsNode.getBoolean(OBJ_REMOVE_OFFSET, true)); options.setRemoveOffset(objExportOptionsNode.getBoolean(OBJ_REMOVE_OFFSET, true));

View File

@ -46,6 +46,7 @@ public class OBJOptionChooser extends JPanel {
private final JButton optRend; private final JButton optRend;
private final JLabel componentsLabel; private final JLabel componentsLabel;
private final JCheckBox exportChildren; private final JCheckBox exportChildren;
private final JCheckBox exportMotors;
private final JCheckBox exportAppearance; private final JCheckBox exportAppearance;
private final JCheckBox exportAsSeparateFiles; private final JCheckBox exportAsSeparateFiles;
private final JCheckBox removeOffset; private final JCheckBox removeOffset;
@ -146,6 +147,13 @@ public class OBJOptionChooser extends JPanel {
destroyTheMagic(exportChildren); destroyTheMagic(exportChildren);
this.add(exportChildren, "spanx, wrap"); this.add(exportChildren, "spanx, wrap");
//// Export motors
this.exportMotors = new JCheckBox(trans.get("OBJOptionChooser.checkbox.exportMotors"));
this.exportMotors.setToolTipText(trans.get("OBJOptionChooser.checkbox.exportMotors.ttip"));
destroyTheMagic(exportMotors);
addOptimizationListener(exportMotors);
this.add(exportMotors, "spanx, wrap");
//// Remove origin offset //// Remove origin offset
this.removeOffset = new JCheckBox(trans.get("OBJOptionChooser.checkbox.removeOffset")); this.removeOffset = new JCheckBox(trans.get("OBJOptionChooser.checkbox.removeOffset"));
this.removeOffset.setToolTipText(trans.get("OBJOptionChooser.checkbox.removeOffset.ttip")); this.removeOffset.setToolTipText(trans.get("OBJOptionChooser.checkbox.removeOffset.ttip"));
@ -360,6 +368,7 @@ public class OBJOptionChooser extends JPanel {
exportChildren.setToolTipText(trans.get("OBJOptionChooser.checkbox.exportChildren.ttip")); exportChildren.setToolTipText(trans.get("OBJOptionChooser.checkbox.exportChildren.ttip"));
} }
this.exportMotors.setSelected(opts.isExportMotors());
this.exportAppearance.setSelected(opts.isExportAppearance()); this.exportAppearance.setSelected(opts.isExportAppearance());
this.exportAsSeparateFiles.setSelected(opts.isExportAsSeparateFiles()); this.exportAsSeparateFiles.setSelected(opts.isExportAsSeparateFiles());
this.removeOffset.setSelected(opts.isRemoveOffset()); this.removeOffset.setSelected(opts.isRemoveOffset());
@ -391,6 +400,7 @@ public class OBJOptionChooser extends JPanel {
if (alwaysStoreExportChildren || !onlyComponentAssemblies) { if (alwaysStoreExportChildren || !onlyComponentAssemblies) {
opts.setExportChildren(exportChildren.isSelected()); opts.setExportChildren(exportChildren.isSelected());
} }
opts.setExportMotors(exportMotors.isSelected());
opts.setExportAppearance(exportAppearance.isSelected()); opts.setExportAppearance(exportAppearance.isSelected());
opts.setExportAsSeparateFiles(exportAsSeparateFiles.isSelected()); opts.setExportAsSeparateFiles(exportAsSeparateFiles.isSelected());
opts.setRemoveOffset(removeOffset.isSelected()); opts.setRemoveOffset(removeOffset.isSelected());
@ -409,6 +419,7 @@ public class OBJOptionChooser extends JPanel {
OBJExportOptions options = new OBJExportOptions(rocket); OBJExportOptions options = new OBJExportOptions(rocket);
storeOptions(options, true); storeOptions(options, true);
options.setExportMotors(false);
options.setExportAppearance(false); options.setExportAppearance(false);
options.setRemoveOffset(true); options.setRemoveOffset(true);
options.setScaling(1000); options.setScaling(1000);
@ -424,14 +435,15 @@ public class OBJOptionChooser extends JPanel {
* @return True if the settings are optimized for 3D printing, false otherwise * @return True if the settings are optimized for 3D printing, false otherwise
*/ */
private boolean isOptimizedFor3DPrinting(OBJExportOptions options) { private boolean isOptimizedFor3DPrinting(OBJExportOptions options) {
return !options.isExportAppearance() && options.isTriangulate() && options.getLOD() == ObjUtils.LevelOfDetail.HIGH_QUALITY && return !options.isExportMotors() && !options.isExportAppearance() && options.isTriangulate() &&
options.isRemoveOffset() && options.getScaling() == 1000; options.getLOD() == ObjUtils.LevelOfDetail.HIGH_QUALITY && options.isRemoveOffset() && options.getScaling() == 1000;
} }
private void optimizeSettingsForRendering() { private void optimizeSettingsForRendering() {
OBJExportOptions options = new OBJExportOptions(rocket); OBJExportOptions options = new OBJExportOptions(rocket);
storeOptions(options, true); storeOptions(options, true);
options.setExportMotors(true);
options.setExportAppearance(true); options.setExportAppearance(true);
options.setScaling(20); // Idk, pretty arbitrary options.setScaling(20); // Idk, pretty arbitrary
options.setTriangulate(false); options.setTriangulate(false);
@ -446,8 +458,8 @@ public class OBJOptionChooser extends JPanel {
* @return True if the settings are optimized for rendering, false otherwise * @return True if the settings are optimized for rendering, false otherwise
*/ */
private boolean isOptimizedForRendering(OBJExportOptions options) { private boolean isOptimizedForRendering(OBJExportOptions options) {
return options.isExportAppearance() && !options.isTriangulate() && options.getLOD() == ObjUtils.LevelOfDetail.NORMAL_QUALITY && return options.isExportMotors() && options.isExportAppearance() && !options.isTriangulate() &&
options.getScaling() == 20; options.getLOD() == ObjUtils.LevelOfDetail.NORMAL_QUALITY && options.getScaling() == 20;
} }
private static boolean isOnlyComponentAssembliesSelected(List<RocketComponent> selectedComponents) { private static boolean isOnlyComponentAssembliesSelected(List<RocketComponent> selectedComponents) {