From ba630ab37ef0afc1d83514ab7c425e5c7e342fe5 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 14:58:58 -0700 Subject: [PATCH 01/17] move AirStart extension files from .../impl/ to .../example add getDescription() to AirStart extension --- .../simulation/extension/{impl => example}/AirStart.java | 5 +++++ .../extension/{impl => example}/AirStartProvider.java | 0 .../extension/{impl => example}/AirStartConfigurator.java | 0 3 files changed, 5 insertions(+) rename core/src/net/sf/openrocket/simulation/extension/{impl => example}/AirStart.java (94%) rename core/src/net/sf/openrocket/simulation/extension/{impl => example}/AirStartProvider.java (100%) rename swing/src/net/sf/openrocket/simulation/extension/{impl => example}/AirStartConfigurator.java (100%) diff --git a/core/src/net/sf/openrocket/simulation/extension/impl/AirStart.java b/core/src/net/sf/openrocket/simulation/extension/example/AirStart.java similarity index 94% rename from core/src/net/sf/openrocket/simulation/extension/impl/AirStart.java rename to core/src/net/sf/openrocket/simulation/extension/example/AirStart.java index e591685b3..f4e77219a 100644 --- a/core/src/net/sf/openrocket/simulation/extension/impl/AirStart.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/AirStart.java @@ -28,6 +28,11 @@ public class AirStart extends AbstractSimulationExtension { name = L10N.replace(name, "{vel}", UnitGroup.UNITS_VELOCITY.toStringUnit(getLaunchVelocity())); return name; } + + @Override + public String getDescription() { + return "Start simulation with a configurable altitude and velocity"; + } public double getLaunchAltitude() { return config.getDouble("launchAltitude", 0.0); diff --git a/core/src/net/sf/openrocket/simulation/extension/impl/AirStartProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/AirStartProvider.java similarity index 100% rename from core/src/net/sf/openrocket/simulation/extension/impl/AirStartProvider.java rename to core/src/net/sf/openrocket/simulation/extension/example/AirStartProvider.java diff --git a/swing/src/net/sf/openrocket/simulation/extension/impl/AirStartConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/example/AirStartConfigurator.java similarity index 100% rename from swing/src/net/sf/openrocket/simulation/extension/impl/AirStartConfigurator.java rename to swing/src/net/sf/openrocket/simulation/extension/example/AirStartConfigurator.java From c3d2d5fc167b470729dd66c838707472c5b2fa2a Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 15:10:54 -0700 Subject: [PATCH 02/17] Move CSV listener example to extension --- .../example/CSVSave.java} | 133 ++++++++++-------- .../extension/example/CSVSaveProvider.java | 13 ++ 2 files changed, 86 insertions(+), 60 deletions(-) rename core/src/net/sf/openrocket/simulation/{listeners/example/CSVSaveListener.java => extension/example/CSVSave.java} (70%) create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java diff --git a/core/src/net/sf/openrocket/simulation/listeners/example/CSVSaveListener.java b/core/src/net/sf/openrocket/simulation/extension/example/CSVSave.java similarity index 70% rename from core/src/net/sf/openrocket/simulation/listeners/example/CSVSaveListener.java rename to core/src/net/sf/openrocket/simulation/extension/example/CSVSave.java index 05a55fa29..7f4dd250d 100644 --- a/core/src/net/sf/openrocket/simulation/listeners/example/CSVSaveListener.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/CSVSave.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.listeners.example; +package net.sf.openrocket.simulation.extension.impl; import java.io.File; import java.io.FileNotFoundException; @@ -9,12 +9,14 @@ import net.sf.openrocket.rocketcomponent.FinSet; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.simulation.FlightDataType; 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; -public class CSVSaveListener extends AbstractSimulationListener { +public class CSVSave extends AbstractSimulationExtension { private static enum Types { TIME { @@ -218,78 +220,89 @@ public class CSVSaveListener extends AbstractSimulationListener { private File file; private PrintStream output = null; - + + @Override + public String getDescription() { + return "dump a CSV file with a predetermined set of flight variables to a CSV file while running"; + } @Override - public boolean handleFlightEvent(SimulationStatus status, FlightEvent event) throws SimulationException { + public void initialize(SimulationConditions conditions) throws SimulationException { + conditions.getSimulationListenerList().add(new CSVSaveListener()); + } + + private class CSVSaveListener extends AbstractSimulationListener { - if (event.getType() == FlightEvent.Type.LAUNCH) { - int n = 1; + @Override + public boolean handleFlightEvent(SimulationStatus status, FlightEvent event) throws SimulationException { - if (output != null) { - System.err.println("WARNING: Ending simulation logging to CSV file " + - "(SIMULATION_END not encountered)."); + if (event.getType() == FlightEvent.Type.LAUNCH) { + int n = 1; + + if (output != null) { + System.err.println("WARNING: Ending simulation logging to CSV file " + + "(SIMULATION_END not encountered)."); + output.close(); + output = null; + } + + do { + file = new File(String.format(FILENAME_FORMAT, n)); + n++; + } while (file.exists()); + + System.err.println("Opening file " + file + " for CSV output."); + try { + output = new PrintStream(file); + } catch (FileNotFoundException e) { + System.err.println("ERROR OPENING FILE: " + e); + } + + final Types[] types = Types.values(); + StringBuilder s = new StringBuilder("# " + types[0].toString()); + for (int i = 1; i < types.length; i++) { + s.append("," + types[i].toString()); + } + output.println(s); + + } else if (event.getType() == FlightEvent.Type.SIMULATION_END && output != null) { + + System.err.println("Ending simulation logging to CSV file: " + file); output.close(); output = null; + + } else if (event.getType() != FlightEvent.Type.ALTITUDE) { + + if (output != null) { + output.println("# Event " + event); + } else { + System.err.println("WARNING: Event " + event + " encountered without open file"); + } + } - do { - file = new File(String.format(FILENAME_FORMAT, n)); - n++; - } while (file.exists()); - - System.err.println("Opening file " + file + " for CSV output."); - try { - output = new PrintStream(file); - } catch (FileNotFoundException e) { - System.err.println("ERROR OPENING FILE: " + e); - } + return true; + } + + @Override + public void postStep(SimulationStatus status) throws SimulationException { final Types[] types = Types.values(); - StringBuilder s = new StringBuilder("# " + types[0].toString()); - for (int i = 1; i < types.length; i++) { - s.append("," + types[i].toString()); - } - output.println(s); - - } else if (event.getType() == FlightEvent.Type.SIMULATION_END && output != null) { - - System.err.println("Ending simulation logging to CSV file: " + file); - output.close(); - output = null; - - } else if (event.getType() != FlightEvent.Type.ALTITUDE) { + StringBuilder s; if (output != null) { - output.println("# Event " + event); + + s = new StringBuilder("" + types[0].getValue(status)); + for (int i = 1; i < types.length; i++) { + s.append("," + types[i].getValue(status)); + } + output.println(s); + } else { - System.err.println("WARNING: Event " + event + " encountered without open file"); + + System.err.println("WARNING: stepTaken called with no open file " + + "(t=" + status.getSimulationTime() + ")"); } - } - - return true; - } - - @Override - public void postStep(SimulationStatus status) throws SimulationException { - - final Types[] types = Types.values(); - StringBuilder s; - - if (output != null) { - - s = new StringBuilder("" + types[0].getValue(status)); - for (int i = 1; i < types.length; i++) { - s.append("," + types[i].getValue(status)); - } - output.println(s); - - } else { - - System.err.println("WARNING: stepTaken called with no open file " + - "(t=" + status.getSimulationTime() + ")"); - } - } } diff --git a/core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java new file mode 100644 index 000000000..ec8c0da24 --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java @@ -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 CSVSaveProvider extends AbstractSimulationExtensionProvider { + + public CSVSaveProvider() { + super(CSVSave.class, "Reports", "CSV Save"); + } + +} From 17a4f1ffdbf9f3801cd85cda896e841e46b37dbb Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 15:17:17 -0700 Subject: [PATCH 03/17] Convert DampingMoment listener to simulation extension --- .../extension/example/DampingMoment.java | 147 ++++++++++++++++++ .../example/DampingMomentProvider.java | 13 ++ .../listeners/example/DampingMoment.java | 116 -------------- 3 files changed, 160 insertions(+), 116 deletions(-) create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java delete mode 100644 core/src/net/sf/openrocket/simulation/listeners/example/DampingMoment.java diff --git a/core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java b/core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java new file mode 100644 index 000000000..effbded87 --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java @@ -0,0 +1,147 @@ +package net.sf.openrocket.simulation.extension.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import net.sf.openrocket.aerodynamics.AerodynamicCalculator; +import net.sf.openrocket.aerodynamics.AerodynamicForces; +import net.sf.openrocket.aerodynamics.FlightConditions; +import net.sf.openrocket.aerodynamics.WarningSet; +import net.sf.openrocket.motor.MotorConfiguration; +import net.sf.openrocket.rocketcomponent.FlightConfiguration; +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.simulation.FlightDataBranch; +import net.sf.openrocket.simulation.FlightDataType; +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; +import net.sf.openrocket.unit.UnitGroup; + +public class DampingMoment extends AbstractSimulationExtension { + private static final Logger log = LoggerFactory.getLogger(DampingMoment.class); + + // Save it as a FlightDataType + private static final FlightDataType cdm = FlightDataType.getType("Damping moment coefficient", "Cdm", UnitGroup.UNITS_COEFFICIENT); + private static final ArrayList types = new ArrayList(); + + DampingMoment() { + types.add(cdm); + } + + @Override + public List getFlightDataTypes() { + return types; + } + + @Override + public void initialize(SimulationConditions conditions) throws SimulationException { + log.debug("initializing..."); + conditions.getSimulationListenerList().add(new DampingMomentListener()); + } + + @Override + public String getName() { + return "Damping Moment Coeficient(Cdm)"; + } + + @Override + public String getDescription() { + return "Calculate damping moment coefficient after every simulation step and publish to FlightData as Cdm"; + } + + private class DampingMomentListener extends AbstractSimulationListener { + + @Override + public FlightConditions postFlightConditions(SimulationStatus status, FlightConditions flightConditions) throws SimulationException { + + //status.getFlightData().setValue(cdm, aerodynamicPart + propulsivePart); + status.getFlightData().setValue(cdm, calculate(status, flightConditions)); + + return flightConditions; + } + + private double calculate(SimulationStatus status, FlightConditions flightConditions) { + + // Work out the propulsive/jet damping part of the moment. + + // dm/dt = (thrust - ma)/v + FlightDataBranch data = status.getFlightData(); + + List mpAll = data.get(FlightDataType.TYPE_MOTOR_MASS); + List time = data.get(FlightDataType.TYPE_TIME); + if (mpAll == null || time == null) { + return Double.NaN; + } + + int len = mpAll.size(); + + // This isn't as accurate as I would like + double mdot = Double.NaN; + if (len > 2) { + // Using polynomial interpolator for derivative. Doesn't help much + //double[] x = { time.get(len-5), time.get(len-4), time.get(len-3), time.get(len-2), time.get(len-1) }; + //double[] y = { mpAll.get(len-5), mpAll.get(len-4), mpAll.get(len-3), mpAll.get(len-2), mpAll.get(len-1) }; + //PolyInterpolator interp = new PolyInterpolator(x); + //double[] coeff = interp.interpolator(y); + //double dt = .01; + //mdot = (interp.eval(x[4], coeff) - interp.eval(x[4]-dt, coeff))/dt; + + mdot = (mpAll.get(len - 1) - mpAll.get(len - 2)) / (time.get(len - 1) - time.get(len - 2)); + } + + double cg = data.getLast(FlightDataType.TYPE_CG_LOCATION); + + // find the maximum distance from nose to nozzle. + double nozzleDistance = 0; + FlightConfiguration config = status.getConfiguration(); + for (MotorConfiguration inst : config.getActiveMotors()) { + double x_position= inst.getX(); + double x = x_position + inst.getMotor().getLaunchCGx(); + if (x > nozzleDistance) { + nozzleDistance = x; + } + } + + // now can get the propulsive part + double propulsivePart = mdot * Math.pow(nozzleDistance - cg, 2); + + // Work out the aerodynamic part of the moment. + double aerodynamicPart = 0; + + AerodynamicCalculator aerocalc = status.getSimulationConditions().getAerodynamicCalculator(); + + // Must go through each component ... + Map forces = aerocalc.getForceAnalysis(status.getConfiguration(), flightConditions, status.getWarnings()); + for (Map.Entry entry : forces.entrySet()) { + + RocketComponent comp = entry.getKey(); + + if (!comp.isAerodynamic()) + continue; + + //System.out.println(comp.toString()); + + double CNa = entry.getValue().getCNa(); //? + double Cp = entry.getValue().getCP().length(); + double z = comp.getAxialOffset(); + + aerodynamicPart += CNa * Math.pow(z - Cp, 2); + } + + double v = flightConditions.getVelocity(); + double rho = flightConditions.getAtmosphericConditions().getDensity(); + double ar = flightConditions.getRefArea(); + + aerodynamicPart = aerodynamicPart * .5 * rho * v * ar; + + return aerodynamicPart + propulsivePart; + } + } + +} diff --git a/core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java new file mode 100644 index 000000000..992e0f1d4 --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java @@ -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 DampingMomentProvider extends AbstractSimulationExtensionProvider { + + public DampingMomentProvider() { + super(DampingMoment.class, "Post-step flight conditions", "Damping Moment Coefficient (Cdm)"); + } + +} diff --git a/core/src/net/sf/openrocket/simulation/listeners/example/DampingMoment.java b/core/src/net/sf/openrocket/simulation/listeners/example/DampingMoment.java deleted file mode 100644 index 6d5839e07..000000000 --- a/core/src/net/sf/openrocket/simulation/listeners/example/DampingMoment.java +++ /dev/null @@ -1,116 +0,0 @@ -package net.sf.openrocket.simulation.listeners.example; - -import java.util.List; -import java.util.Map; - -import net.sf.openrocket.aerodynamics.AerodynamicCalculator; -import net.sf.openrocket.aerodynamics.AerodynamicForces; -import net.sf.openrocket.aerodynamics.FlightConditions; -import net.sf.openrocket.aerodynamics.WarningSet; -import net.sf.openrocket.motor.MotorConfiguration; -import net.sf.openrocket.rocketcomponent.FlightConfiguration; -import net.sf.openrocket.rocketcomponent.RocketComponent; -import net.sf.openrocket.simulation.FlightDataBranch; -import net.sf.openrocket.simulation.FlightDataType; -import net.sf.openrocket.simulation.SimulationStatus; -import net.sf.openrocket.simulation.exception.SimulationException; -import net.sf.openrocket.simulation.listeners.AbstractSimulationListener; -import net.sf.openrocket.unit.UnitGroup; - -public class DampingMoment extends AbstractSimulationListener { - - private static final FlightDataType type = FlightDataType.getType("Damping moment coefficient", "Cdm", UnitGroup.UNITS_COEFFICIENT); - - // unused - //private static final FlightDataType[] typeList = { type }; - - @Override - public FlightConditions postFlightConditions(SimulationStatus status, FlightConditions flightConditions) throws SimulationException { - - // Save it as a flightdatatype - - //status.getFlightData().setValue(type, aerodynamicPart + propulsivePart); - status.getFlightData().setValue(type, calculate(status, flightConditions)); - - return flightConditions; - } - - private double calculate(SimulationStatus status, FlightConditions flightConditions) { - - // Work out the propulsive/jet damping part of the moment. - - // dm/dt = (thrust - ma)/v - FlightDataBranch data = status.getFlightData(); - - List mpAll = data.get(FlightDataType.TYPE_MOTOR_MASS); - List time = data.get(FlightDataType.TYPE_TIME); - if (mpAll == null || time == null) { - return Double.NaN; - } - - int len = mpAll.size(); - - // This isn't as accurate as I would like - double mdot = Double.NaN; - if (len > 2) { - // Using polynomial interpolator for derivative. Doesn't help much - //double[] x = { time.get(len-5), time.get(len-4), time.get(len-3), time.get(len-2), time.get(len-1) }; - //double[] y = { mpAll.get(len-5), mpAll.get(len-4), mpAll.get(len-3), mpAll.get(len-2), mpAll.get(len-1) }; - //PolyInterpolator interp = new PolyInterpolator(x); - //double[] coeff = interp.interpolator(y); - //double dt = .01; - //mdot = (interp.eval(x[4], coeff) - interp.eval(x[4]-dt, coeff))/dt; - - mdot = (mpAll.get(len - 1) - mpAll.get(len - 2)) / (time.get(len - 1) - time.get(len - 2)); - } - - double cg = data.getLast(FlightDataType.TYPE_CG_LOCATION); - - // find the maximum distance from nose to nozzle. - double nozzleDistance = 0; - FlightConfiguration config = status.getConfiguration(); - for (MotorConfiguration inst : config.getActiveMotors()) { - double x_position= inst.getX(); - double x = x_position + inst.getMotor().getLaunchCGx(); - if (x > nozzleDistance) { - nozzleDistance = x; - } - } - - // now can get the propulsive part - double propulsivePart = mdot * Math.pow(nozzleDistance - cg, 2); - - // Work out the aerodynamic part of the moment. - double aerodynamicPart = 0; - - AerodynamicCalculator aerocalc = status.getSimulationConditions().getAerodynamicCalculator(); - - // Must go through each component ... - Map forces = aerocalc.getForceAnalysis(status.getConfiguration(), flightConditions, status.getWarnings()); - for (Map.Entry entry : forces.entrySet()) { - - RocketComponent comp = entry.getKey(); - - if (!comp.isAerodynamic()) - continue; - - //System.out.println(comp.toString()); - - double CNa = entry.getValue().getCNa(); //? - double Cp = entry.getValue().getCP().length(); - double z = comp.getAxialOffset(); - - aerodynamicPart += CNa * Math.pow(z - Cp, 2); - } - - double v = flightConditions.getVelocity(); - double rho = flightConditions.getAtmosphericConditions().getDensity(); - double ar = flightConditions.getRefArea(); - - aerodynamicPart = aerodynamicPart * .5 * rho * v * ar; - - return aerodynamicPart + propulsivePart; - - } - -} From f427cad09f841f9d727f4dd51d1df9fb547a32db Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 15:22:28 -0700 Subject: [PATCH 04/17] convert PrintSimulation listener to extension --- .../extension/example/PrintSimulation.java | 53 +++++++++++++++++++ .../example/PrintSimulationProvider.java | 13 +++++ .../example/PrintSimulationListener.java | 34 ------------ 3 files changed, 66 insertions(+), 34 deletions(-) create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java delete mode 100644 core/src/net/sf/openrocket/simulation/listeners/example/PrintSimulationListener.java diff --git a/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java new file mode 100644 index 000000000..8101a206d --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java @@ -0,0 +1,53 @@ +package net.sf.openrocket.simulation.extension.impl; + +import net.sf.openrocket.simulation.FlightDataBranch; +import net.sf.openrocket.simulation.FlightDataType; +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; + +public class PrintSimulation extends AbstractSimulationExtension { + + @Override + public void initialize(SimulationConditions conditions) throws SimulationException { + conditions.getSimulationListenerList().add(new PrintSimulationListener()); + } + + @Override + public String getName() { + return "Print Simulation Values"; + } + + @Override + public String getDescription() { + return "Print summary of simulation progress to standard output after every step"; + } + + private class PrintSimulationListener extends AbstractSimulationListener { + + @Override + public boolean handleFlightEvent(SimulationStatus status, FlightEvent event) throws SimulationException { + System.out.println("*** handleEvent *** " + event.toString() + + " position=" + status.getRocketPosition() + " velocity=" + status.getRocketVelocity()); + return true; + } + + @Override + public void postStep(SimulationStatus status) throws SimulationException { + FlightDataBranch data = status.getFlightData(); + System.out.printf("*** stepTaken *** time=%.3f position=" + status.getRocketPosition() + + " velocity=" + status.getRocketVelocity() + "=%.3f\n", status.getSimulationTime(), status.getRocketVelocity().length()); + System.out.printf(" thrust=%.3fN drag==%.3fN mass=%.3fkg " + + "accZ=%.3fm/s2 acc=%.3fm/s2\n", + data.getLast(FlightDataType.TYPE_THRUST_FORCE), + data.getLast(FlightDataType.TYPE_DRAG_FORCE), + data.getLast(FlightDataType.TYPE_MASS), + data.getLast(FlightDataType.TYPE_ACCELERATION_Z), + data.getLast(FlightDataType.TYPE_ACCELERATION_TOTAL)); + } + } + +} diff --git a/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java new file mode 100644 index 000000000..97eb4bdfe --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java @@ -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 PrintSimulationProvider extends AbstractSimulationExtensionProvider { + + public PrintSimulationProvider() { + super(PrintSimulation.class, "Reports", "Print Simulation"); + } + +} diff --git a/core/src/net/sf/openrocket/simulation/listeners/example/PrintSimulationListener.java b/core/src/net/sf/openrocket/simulation/listeners/example/PrintSimulationListener.java deleted file mode 100644 index ac070d2bc..000000000 --- a/core/src/net/sf/openrocket/simulation/listeners/example/PrintSimulationListener.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.sf.openrocket.simulation.listeners.example; - -import net.sf.openrocket.simulation.FlightDataBranch; -import net.sf.openrocket.simulation.FlightDataType; -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; - - -public class PrintSimulationListener extends AbstractSimulationListener { - - @Override - public boolean handleFlightEvent(SimulationStatus status, FlightEvent event) throws SimulationException { - System.out.println("*** handleEvent *** " + event.toString() + - " position=" + status.getRocketPosition() + " velocity=" + status.getRocketVelocity()); - return true; - } - - @Override - public void postStep(SimulationStatus status) throws SimulationException { - FlightDataBranch data = status.getFlightData(); - System.out.printf("*** stepTaken *** time=%.3f position=" + status.getRocketPosition() + - " velocity=" + status.getRocketVelocity() + "=%.3f\n", status.getSimulationTime(), status.getRocketVelocity().length()); - System.out.printf(" thrust=%.3fN drag==%.3fN mass=%.3fkg " + - "accZ=%.3fm/s2 acc=%.3fm/s2\n", - data.getLast(FlightDataType.TYPE_THRUST_FORCE), - data.getLast(FlightDataType.TYPE_DRAG_FORCE), - data.getLast(FlightDataType.TYPE_MASS), - data.getLast(FlightDataType.TYPE_ACCELERATION_Z), - data.getLast(FlightDataType.TYPE_ACCELERATION_TOTAL)); - } - -} From 9027b21a128caa4821469514414beb4e32b5f293 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 15:29:16 -0700 Subject: [PATCH 05/17] Convert Roll control example listener to simulation extension --- .../extension/example/RollControl.java | 206 ++++++++++++++++++ .../example/RollControlProvider.java | 13 ++ .../example/RollControlListener.java | 114 ---------- .../examples/Roll-stabilized rocket.ork | Bin 142633 -> 0 bytes .../examples/Simulation Extension.ork | Bin 0 -> 109775 bytes .../example/RollControlConfigurator.java | 83 +++++++ 6 files changed, 302 insertions(+), 114 deletions(-) create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/RollControl.java create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java delete mode 100644 core/src/net/sf/openrocket/simulation/listeners/example/RollControlListener.java delete mode 100644 swing/resources/datafiles/examples/Roll-stabilized rocket.ork create mode 100644 swing/resources/datafiles/examples/Simulation Extension.ork create mode 100644 swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java diff --git a/core/src/net/sf/openrocket/simulation/extension/example/RollControl.java b/core/src/net/sf/openrocket/simulation/extension/example/RollControl.java new file mode 100644 index 000000000..95bad06ba --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/RollControl.java @@ -0,0 +1,206 @@ +package net.sf.openrocket.simulation.extension.impl; + +import java.util.ArrayList; +import java.util.List; + +import net.sf.openrocket.aerodynamics.FlightConditions; +import net.sf.openrocket.rocketcomponent.FinSet; +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.simulation.FlightDataType; +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; +import net.sf.openrocket.unit.UnitGroup; +import net.sf.openrocket.util.MathUtil; + +/** + * An example listener that applies a PI-controller to adjust the cant of fins + * to control the rocket's roll rate + * + * @author Sampo Niskanen + * + * One note: making aerodynamic changes during the simulation results in the simulation + * running *extremely* slowly + */ +public class RollControl extends AbstractSimulationExtension { + + // save fin cant angle as a FlightDataType + private static final ArrayList types = new ArrayList(); + private static final FlightDataType FIN_CANT_TYPE = FlightDataType.getType("Control fin cant", "\u03B1fc", UnitGroup.UNITS_ANGLE); + + @Override + public void initialize(SimulationConditions conditions) throws SimulationException { + conditions.getSimulationListenerList().add(new RollControlListener()); + } + + @Override + public String getName() { + return "Roll Control"; + } + + @Override + public String getDescription() { + return "Use a PID control to control a rocket's roll. The current cant angle of the control finset is published to flight data as \u03B1fc. " + + "Since this extension modifies design parameters during the simulation, it causes the simulation to run much more slowly."; + } + + @Override + public List getFlightDataTypes() { + return types; + } + + RollControl() { + types.add(FIN_CANT_TYPE); + } + + public String getControlFinName() { + return config.getString("controlFinName", "CONTROL"); + } + + public void setControlFinName(String name) { + config.put("controlFinName", name); + fireChangeEvent(); + } + + public double getStartTime() { + return config.getDouble("startTime", 0.5); + } + + public void setStartTime(double startTime) { + config.put("startTime", startTime); + fireChangeEvent(); + } + + // Desired roll rate (rad/sec) + public double getSetPoint() { + return config.getDouble("setPoint", 0.0); + } + + public void setSetPoint(double rollRate) { + config.put("setPoint", rollRate); + fireChangeEvent(); + } + + // Maximum control fin turn rate (rad/sec) + public double getFinRate() { + return config.getDouble("finRate", 10 * Math.PI/180); + } + + public void setFinRate(double finRate) { + config.put("finRate", finRate); + fireChangeEvent(); + } + + // Maximum control fin angle (rad) + public double getMaxFinAngle() { + return config.getDouble("maxFinAngle", 15 * Math.PI / 180); + } + + public void setMaxFinAngle(double maxFin) { + config.put("maxFinAngle", maxFin); + fireChangeEvent(); + } + + public double getKP() { + return config.getDouble("KP", 0.007); + } + + public void setKP(double KP) { + config.put("KP", KP); + fireChangeEvent(); + } + + public double getKI() { + return config.getDouble("KI", 0.2); + } + + public void setKI(double KI) { + config.put("KI", KI); + fireChangeEvent(); + } + + private class RollControlListener extends AbstractSimulationListener { + private FinSet finset; + + private double rollRate; + + private double prevTime = 0; + private double intState = 0; + + private double initialFinPosition; + private double finPosition = 0; + + @Override + public void startSimulation(SimulationStatus status) throws SimulationException { + + // Find the fin set + finset = null; + for (RocketComponent c : status.getConfiguration().getActiveComponents()) { + if ((c instanceof FinSet) && c.getName().equals(getControlFinName())) { + finset = (FinSet) c; + break; + } + } + if (finset == null) { + throw new SimulationException("A fin set with name '" + getControlFinName() + "' was not found"); + } + + // remember the initial fin position so we can set it back after running the simulation + initialFinPosition = finset.getCantAngle(); + } + + @Override + public FlightConditions postFlightConditions(SimulationStatus status, FlightConditions flightConditions) { + // Store the current roll rate for later use + rollRate = flightConditions.getRollRate(); + return null; + } + + @Override + public void postStep(SimulationStatus status) throws SimulationException { + // Activate PID controller only after a specific time + if (status.getSimulationTime() < getStartTime()) { + prevTime = status.getSimulationTime(); + return; + } + + // Determine time step + double deltaT = status.getSimulationTime() - prevTime; + prevTime = status.getSimulationTime(); + + // PID controller + double error = getSetPoint() - rollRate; + + double p = getKP() * error; + intState += error * deltaT; + double i = getKI() * intState; + + double value = p + i; + + // Limit the fin turn rate + if (finPosition < value) { + finPosition = Math.min(finPosition + getFinRate() * deltaT, value); + } else { + finPosition = Math.max(finPosition - getFinRate() * deltaT, value); + } + + // Clamp the fin angle between bounds + if (Math.abs(value) > getMaxFinAngle()) { + System.err.printf("Attempting to set angle %.1f at t=%.3f, clamping.\n", + value * 180 / Math.PI, status.getSimulationTime()); + value = MathUtil.clamp(value, -getMaxFinAngle(), getMaxFinAngle()); + } + + // Set the control fin cant and store the data + finset.setCantAngle(finPosition); + status.getFlightData().setValue(FIN_CANT_TYPE, finPosition); + } + + @Override + public void endSimulation(SimulationStatus status, SimulationException exception) { + finset.setCantAngle(initialFinPosition); + } + } +} diff --git a/core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java new file mode 100644 index 000000000..571da4079 --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java @@ -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 RollControlProvider extends AbstractSimulationExtensionProvider { + + public RollControlProvider() { + super(RollControl.class, "Control Enhancements", "Roll Control"); + } + +} diff --git a/core/src/net/sf/openrocket/simulation/listeners/example/RollControlListener.java b/core/src/net/sf/openrocket/simulation/listeners/example/RollControlListener.java deleted file mode 100644 index 5493c4a0d..000000000 --- a/core/src/net/sf/openrocket/simulation/listeners/example/RollControlListener.java +++ /dev/null @@ -1,114 +0,0 @@ -package net.sf.openrocket.simulation.listeners.example; - -import net.sf.openrocket.aerodynamics.FlightConditions; -import net.sf.openrocket.rocketcomponent.FinSet; -import net.sf.openrocket.rocketcomponent.RocketComponent; -import net.sf.openrocket.simulation.FlightDataType; -import net.sf.openrocket.simulation.SimulationStatus; -import net.sf.openrocket.simulation.exception.SimulationException; -import net.sf.openrocket.simulation.listeners.AbstractSimulationListener; -import net.sf.openrocket.unit.UnitGroup; -import net.sf.openrocket.util.MathUtil; - -/** - * An example listener that applies a PI-controller to adjust the cant of fins - * named "CONTROL" to stop the rocket from rolling. - * - * @author Sampo Niskanen - */ -public class RollControlListener extends AbstractSimulationListener { - - // Name of control fin set - private static final String CONTROL_FIN_NAME = "CONTROL"; - - // Define custom flight data type - private static final FlightDataType FIN_CANT_TYPE = FlightDataType.getType("Control fin cant", "\u03B1fc", UnitGroup.UNITS_ANGLE); - - // Simulation time at which PID controller is activated - private static final double START_TIME = 0.5; - - // Desired roll rate (rad/sec) - private static final double SETPOINT = 0.0; - - // Maximum control fin turn rate (rad/sec) - private static final double TURNRATE = 10 * Math.PI / 180; - - // Maximum control fin angle (rad) - private static final double MAX_ANGLE = 15 * Math.PI / 180; - - /* - * PID parameters - * - * At M=0.3 KP oscillation threshold between 0.35 and 0.4. Good KI=3 - * At M=0.6 KP oscillation threshold between 0.07 and 0.08 Good KI=2 - * At M=0.9 KP oscillation threshold between 0.013 and 0.014 Good KI=0.5 - */ - private static final double KP = 0.007; - private static final double KI = 0.2; - - private double rollRate; - - private double prevTime = 0; - private double intState = 0; - - private double finPosition = 0; - - @Override - public FlightConditions postFlightConditions(SimulationStatus status, FlightConditions flightConditions) { - // Store the current roll rate for later use - rollRate = flightConditions.getRollRate(); - return null; - } - - @Override - public void postStep(SimulationStatus status) throws SimulationException { - // Activate PID controller only after a specific time - if (status.getSimulationTime() < START_TIME) { - prevTime = status.getSimulationTime(); - return; - } - - // Find the fin set named CONTROL - FinSet finset = null; - for (RocketComponent c : status.getConfiguration().getActiveComponents()) { - if ((c instanceof FinSet) && (c.getName().equals(CONTROL_FIN_NAME))) { - finset = (FinSet) c; - break; - } - } - if (finset == null) { - throw new SimulationException("A fin set with name '" + CONTROL_FIN_NAME + "' was not found"); - } - - // Determine time step - double deltaT = status.getSimulationTime() - prevTime; - prevTime = status.getSimulationTime(); - - // PID controller - double error = SETPOINT - rollRate; - - double p = KP * error; - intState += error * deltaT; - double i = KI * intState; - - double value = p + i; - - // Clamp the fin angle between -MAX_ANGLE and MAX_ANGLE - if (Math.abs(value) > MAX_ANGLE) { - System.err.printf("Attempting to set angle %.1f at t=%.3f, clamping.\n", - value * 180 / Math.PI, status.getSimulationTime()); - value = MathUtil.clamp(value, -MAX_ANGLE, MAX_ANGLE); - } - - // Limit the fin turn rate - if (finPosition < value) { - finPosition = Math.min(finPosition + TURNRATE * deltaT, value); - } else { - finPosition = Math.max(finPosition - TURNRATE * deltaT, value); - } - - // Set the control fin cant and store the data - finset.setCantAngle(finPosition); - status.getFlightData().setValue(FIN_CANT_TYPE, finPosition); - } -} diff --git a/swing/resources/datafiles/examples/Roll-stabilized rocket.ork b/swing/resources/datafiles/examples/Roll-stabilized rocket.ork deleted file mode 100644 index f89cb43e5d07f02f874b43b3c31366f48a469f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142633 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

j;hEO)kx=*wGvooUjtB~Zx=&?!pEJvl93*-`qb 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­&6f7-6bzy3dViJvRh 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 literal 0 HcmV?d00001 diff --git a/swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java new file mode 100644 index 000000000..0661c194d --- /dev/null +++ b/swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java @@ -0,0 +1,83 @@ +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.DoubleModel; +import net.sf.openrocket.gui.components.BasicSlider; +import net.sf.openrocket.gui.components.UnitSelector; +import net.sf.openrocket.plugin.Plugin; +import net.sf.openrocket.simulation.extension.AbstractSwingSimulationExtensionConfigurator; +import net.sf.openrocket.unit.UnitGroup; + +@Plugin +public class RollControlConfigurator extends AbstractSwingSimulationExtensionConfigurator { + private JPanel panel; + private RollControl extension; + + public RollControlConfigurator() { + super(RollControl.class); + } + + @Override + protected JComponent getConfigurationComponent(RollControl extension, Simulation simulation, JPanel panel) { + this.panel = panel; + this.extension = extension; + panel.add(new JLabel("Control FinSet Name:")); + + JTextField finSetName = new JTextField(); + finSetName.setText(extension.getControlFinName()); + + finSetName.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) {} + + @Override + public void focusLost(FocusEvent e) { + extension.setControlFinName(finSetName.getText()); + } + }); + + panel.add(finSetName, "growx, span3, wrap"); + + addRow("Start Time", "StartTime", UnitGroup.UNITS_SHORT_TIME, 0.0, 1200.0); + addRow("Desired Roll Rate", "SetPoint", UnitGroup.UNITS_ROLL, -10.0, 10.0); + addRow("Max Fin Turn Rate", "FinRate", UnitGroup.UNITS_ROLL, 0, 10); + addRow("Max Fin Angle", "MaxFinAngle", UnitGroup.UNITS_ANGLE, 0, 0.25); + + panel.add(new JLabel("PID parameters:"), "newline 0.25in, span4, wrap"); + panel.add(new JLabel("At M=0.3 KP oscillation threshold between 0.35 and 0.4. Good KI=3" ), "gapbefore indent, span4, wrap"); + panel.add(new JLabel("At M=0.6 KP oscillation threshold between 0.07 and 0.08 Good KI=2" ), "gapbefore indent, span4, wrap"); + panel.add(new JLabel("At M=0.9 KP oscillation threshold between 0.013 and 0.014 Good KI=0.5"), "gapbefore indent, span4, wrap"); + + addRow("KP (Proportional)", "KP", UnitGroup.UNITS_COEFFICIENT, 0.0, 0.02); + addRow("KI (Integrated)", "KI", UnitGroup.UNITS_COEFFICIENT, 0.0, 1.0); + + return panel; + } + + private void addRow(String prompt, String fieldName, UnitGroup units, double min, double max) { + panel.add(new JLabel(prompt + ":")); + + DoubleModel m = new DoubleModel(extension, fieldName, units, min, max); + + JSpinner spin = new JSpinner(m.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + panel.add(spin, "w 65lp!"); + + UnitSelector unit = new UnitSelector(m); + panel.add(unit, "w 25"); + + BasicSlider slider = new BasicSlider(m.getSliderModel(0, 1000)); + panel.add(slider, "w 75lp, wrap"); + + } +} From dbcc0ffb5e19eb0b11661746e2f0f7a1a64d6fd1 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 15:36:42 -0700 Subject: [PATCH 06/17] Clarify Java code provider menu entry --- .../extension/example/StopSimulation.java | 95 +++++++++++++++++++ .../example/StopSimulationProvider.java | 13 +++ .../extension/impl/JavaCodeProvider.java | 2 +- .../example/StopSimulationListener.java | 65 ------------- .../example/StopSimulationConfigurator.java | 52 ++++++++++ 5 files changed, 161 insertions(+), 66 deletions(-) create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java create mode 100644 core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java delete mode 100644 core/src/net/sf/openrocket/simulation/listeners/example/StopSimulationListener.java create mode 100644 swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java diff --git a/core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java new file mode 100644 index 000000000..ea8ec6e6e --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java @@ -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 + */ +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)); + } + } + } + +} diff --git a/core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java new file mode 100644 index 000000000..2e6c50200 --- /dev/null +++ b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java @@ -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"); + } + +} diff --git a/core/src/net/sf/openrocket/simulation/extension/impl/JavaCodeProvider.java b/core/src/net/sf/openrocket/simulation/extension/impl/JavaCodeProvider.java index 188fe1cc1..c53c74567 100644 --- a/core/src/net/sf/openrocket/simulation/extension/impl/JavaCodeProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/impl/JavaCodeProvider.java @@ -7,7 +7,7 @@ import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvide public class JavaCodeProvider extends AbstractSimulationExtensionProvider { public JavaCodeProvider() { - super(JavaCode.class, "User code", "Java code"); + super(JavaCode.class, "Scripts", "Java listeners"); } } diff --git a/core/src/net/sf/openrocket/simulation/listeners/example/StopSimulationListener.java b/core/src/net/sf/openrocket/simulation/listeners/example/StopSimulationListener.java deleted file mode 100644 index a76461696..000000000 --- a/core/src/net/sf/openrocket/simulation/listeners/example/StopSimulationListener.java +++ /dev/null @@ -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 - */ -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)); - } - } - -} diff --git a/swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java new file mode 100644 index 000000000..c709e129c --- /dev/null +++ b/swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java @@ -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 { + 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"); + } +} From 905cc80b5cd3fbd965f75263f998d21b2e9cf607 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 15:40:04 -0700 Subject: [PATCH 07/17] Fix scripting configurator to close when button pressed --- .../simulation/extension/impl/ScriptingConfigurator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/swing/src/net/sf/openrocket/simulation/extension/impl/ScriptingConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/impl/ScriptingConfigurator.java index d49753dac..178d15cca 100644 --- a/swing/src/net/sf/openrocket/simulation/extension/impl/ScriptingConfigurator.java +++ b/swing/src/net/sf/openrocket/simulation/extension/impl/ScriptingConfigurator.java @@ -123,6 +123,7 @@ public class ScriptingConfigurator extends AbstractSwingSimulationExtensionConfi @Override protected void close() { util.setTrustedScript(extension.getLanguage(), extension.getScript(), trusted.isSelected()); + super.close(); } private void setLanguage(String language) { From 76e32f716aadeda1167ce64a86bf66188785863d Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 7 Dec 2022 16:21:08 -0700 Subject: [PATCH 08/17] Rename JavaScript menu entry --- .../openrocket/simulation/extension/impl/ScriptingProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/net/sf/openrocket/simulation/extension/impl/ScriptingProvider.java b/core/src/net/sf/openrocket/simulation/extension/impl/ScriptingProvider.java index 911b47214..41fe99644 100644 --- a/core/src/net/sf/openrocket/simulation/extension/impl/ScriptingProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/impl/ScriptingProvider.java @@ -7,7 +7,7 @@ import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvide public class ScriptingProvider extends AbstractSimulationExtensionProvider { public ScriptingProvider() { - super(ScriptingExtension.class, "User code", "Scripts"); + super(ScriptingExtension.class, "Scripts", "JavaScript"); } } From 84025c8b45d4af6e526d7c24d5d4cff9a1b9120d Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Thu, 8 Dec 2022 15:58:11 -0700 Subject: [PATCH 09/17] Move extension examples from package .../impl to .../example --- .../simulation/extension/example/AirStart.java | 2 +- .../simulation/extension/example/AirStartProvider.java | 2 +- .../simulation/extension/example/CSVSave.java | 2 +- .../simulation/extension/example/CSVSaveProvider.java | 2 +- .../simulation/extension/example/DampingMoment.java | 2 +- .../extension/example/DampingMomentProvider.java | 2 +- .../simulation/extension/example/PrintSimulation.java | 2 +- .../extension/example/PrintSimulationProvider.java | 2 +- .../simulation/extension/example/RollControl.java | 2 +- .../extension/example/RollControlProvider.java | 2 +- .../simulation/extension/example/StopSimulation.java | 2 +- .../extension/example/StopSimulationProvider.java | 2 +- .../gui/simulation/SimulationOptionsPanel.java | 10 +++++----- .../extension/example/AirStartConfigurator.java | 2 +- .../extension/example/RollControlConfigurator.java | 2 +- .../extension/example/StopSimulationConfigurator.java | 2 +- 16 files changed, 20 insertions(+), 20 deletions(-) diff --git a/core/src/net/sf/openrocket/simulation/extension/example/AirStart.java b/core/src/net/sf/openrocket/simulation/extension/example/AirStart.java index f4e77219a..835b757a4 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/AirStart.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/AirStart.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.l10n.L10N; import net.sf.openrocket.simulation.SimulationConditions; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/AirStartProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/AirStartProvider.java index f04458f35..133f5511d 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/AirStartProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/AirStartProvider.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.plugin.Plugin; import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvider; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/CSVSave.java b/core/src/net/sf/openrocket/simulation/extension/example/CSVSave.java index 7f4dd250d..c8c925144 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/CSVSave.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/CSVSave.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import java.io.File; import java.io.FileNotFoundException; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java index ec8c0da24..92b9e0a83 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/CSVSaveProvider.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.plugin.Plugin; import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvider; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java b/core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java index effbded87..a6e0429fb 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/DampingMoment.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import java.util.ArrayList; import java.util.List; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java index 992e0f1d4..902329613 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/DampingMomentProvider.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.plugin.Plugin; import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvider; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java index 8101a206d..99cf276ff 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulation.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.simulation.FlightDataBranch; import net.sf.openrocket.simulation.FlightDataType; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java index 97eb4bdfe..ebb4c3b8b 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/PrintSimulationProvider.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.plugin.Plugin; import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvider; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/RollControl.java b/core/src/net/sf/openrocket/simulation/extension/example/RollControl.java index 95bad06ba..8b3a0a42a 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/RollControl.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/RollControl.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import java.util.ArrayList; import java.util.List; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java index 571da4079..07bff21b5 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/RollControlProvider.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.plugin.Plugin; import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvider; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java index ea8ec6e6e..ed01ca556 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulation.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.simulation.FlightEvent; import net.sf.openrocket.simulation.SimulationConditions; diff --git a/core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java index 2e6c50200..fc6ec3928 100644 --- a/core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java +++ b/core/src/net/sf/openrocket/simulation/extension/example/StopSimulationProvider.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import net.sf.openrocket.plugin.Plugin; import net.sf.openrocket.simulation.extension.AbstractSimulationExtensionProvider; diff --git a/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java b/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java index 8ff5dd1f1..e105af540 100644 --- a/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java +++ b/swing/src/net/sf/openrocket/gui/simulation/SimulationOptionsPanel.java @@ -197,12 +197,12 @@ class SimulationOptionsPanel extends JPanel { final JButton addExtension = new SelectColorButton(trans.get("simedtdlg.SimExt.add")); - this.extensionMenu = getExtensionMenu(); + extensionMenu = getExtensionMenu(); addExtension.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ev) { - extensionMenu.show(addExtension, 5, addExtension.getBounds().height); - } - }); + public void actionPerformed(ActionEvent ev) { + extensionMenu.show(addExtension, 5, addExtension.getBounds().height); + } + }); sub.add(addExtension, "growx, wrap 0"); currentExtensions = new JPanel(new MigLayout("fillx, gap 0 0, ins 0")); diff --git a/swing/src/net/sf/openrocket/simulation/extension/example/AirStartConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/example/AirStartConfigurator.java index 8b7879526..d1a6a40df 100644 --- a/swing/src/net/sf/openrocket/simulation/extension/example/AirStartConfigurator.java +++ b/swing/src/net/sf/openrocket/simulation/extension/example/AirStartConfigurator.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import javax.swing.JComponent; import javax.swing.JLabel; diff --git a/swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java index 0661c194d..b14c80eef 100644 --- a/swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java +++ b/swing/src/net/sf/openrocket/simulation/extension/example/RollControlConfigurator.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import javax.swing.JComponent; import javax.swing.JLabel; diff --git a/swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java b/swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java index c709e129c..1918dabba 100644 --- a/swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java +++ b/swing/src/net/sf/openrocket/simulation/extension/example/StopSimulationConfigurator.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.simulation.extension.impl; +package net.sf.openrocket.simulation.extension.example; import javax.swing.JComponent; import javax.swing.JLabel; From e994dc72300bee94823249d7286910a2aefdcc5c Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 13 Dec 2022 23:57:19 +0100 Subject: [PATCH 10/17] Copy stage activeness after config clone/copy --- .../rocketcomponent/FlightConfiguration.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java b/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java index b01aeb23e..ec1546236 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java +++ b/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java @@ -136,6 +136,21 @@ public class FlightConfiguration implements FlightConfigurableParameter(this.preloadStageActiveness); clone.cachedBoundsAerodynamic = this.cachedBoundsAerodynamic.clone(); @@ -851,7 +867,7 @@ public class FlightConfiguration implements FlightConfigurableParameter(this.preloadStageActiveness); copy.cachedBoundsAerodynamic = this.cachedBoundsAerodynamic.clone(); copy.cachedBounds = this.cachedBounds.clone(); From 4a0a1255b8abc705814ce73c3fcfcc8f083d53d7 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Wed, 14 Dec 2022 00:50:24 +0100 Subject: [PATCH 11/17] Add unit tests for flight configuration copy/clone --- .../net/sf/openrocket/util/BoundingBox.java | 7 + .../FlightConfigurationTest.java | 135 ++++++++++++++++++ 2 files changed, 142 insertions(+) diff --git a/core/src/net/sf/openrocket/util/BoundingBox.java b/core/src/net/sf/openrocket/util/BoundingBox.java index c262b04b9..b3d997273 100644 --- a/core/src/net/sf/openrocket/util/BoundingBox.java +++ b/core/src/net/sf/openrocket/util/BoundingBox.java @@ -165,4 +165,11 @@ public class BoundingBox { min.x, min.y, min.z, max.x, max.y, max.z ); } + + @Override + public boolean equals(Object other) { + return other instanceof BoundingBox && + ((BoundingBox) other).min.equals(this.min) && + ((BoundingBox) other).max.equals(this.max); + } } diff --git a/core/test/net/sf/openrocket/rocketcomponent/FlightConfigurationTest.java b/core/test/net/sf/openrocket/rocketcomponent/FlightConfigurationTest.java index 51db91e7d..b671af3b3 100644 --- a/core/test/net/sf/openrocket/rocketcomponent/FlightConfigurationTest.java +++ b/core/test/net/sf/openrocket/rocketcomponent/FlightConfigurationTest.java @@ -3,12 +3,19 @@ package net.sf.openrocket.rocketcomponent; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import net.sf.openrocket.util.BoundingBox; import org.junit.Test; import net.sf.openrocket.util.Coordinate; @@ -572,6 +579,134 @@ public class FlightConfigurationTest extends BaseTestCase { assertThat(components.get(1).getName(), equalTo("Core Stage Body")); } + + @Test + public void testCopy() throws NoSuchFieldException, IllegalAccessException { + Rocket rocket = TestRockets.makeFalcon9Heavy(); + FlightConfiguration original = rocket.getSelectedConfiguration(); + original.setOnlyStage(0); + + // vvvv Test Target vvvv + FlightConfiguration copy = original.copy(null); + // ^^^^ Test Target ^^^^ + + assertNotEquals(original, copy); + assertNotSame(original, copy); + assertEquals(original.getName(), copy.getName()); + assertNotEquals(original.getFlightConfigurationID(), copy.getFlightConfigurationID()); + + // Test preloadStageActiveness copy + Field preloadStageActivenessField = FlightConfiguration.class.getDeclaredField("preloadStageActiveness"); + preloadStageActivenessField.setAccessible(true); + Map preloadStageActivenessOriginal = (Map) preloadStageActivenessField.get(original); + Map preloadStageActivenessCopy = (Map) preloadStageActivenessField.get(copy); + assertEquals(preloadStageActivenessOriginal, preloadStageActivenessCopy); + if (preloadStageActivenessOriginal == null) { + assertNull(preloadStageActivenessCopy); + } else { + assertNotSame(preloadStageActivenessOriginal, preloadStageActivenessCopy); + } + + // Test cachedBoundsAerodynamic copy + Field cachedBoundsAerodynamicField = FlightConfiguration.class.getDeclaredField("cachedBoundsAerodynamic"); + cachedBoundsAerodynamicField.setAccessible(true); + BoundingBox cachedBoundsAerodynamicOriginal = (BoundingBox) cachedBoundsAerodynamicField.get(original); + BoundingBox cachedBoundsAerodynamicCopy = (BoundingBox) cachedBoundsAerodynamicField.get(copy); + assertEquals(cachedBoundsAerodynamicOriginal, cachedBoundsAerodynamicCopy); + assertNotSame(cachedBoundsAerodynamicOriginal, cachedBoundsAerodynamicCopy); + + // Test cachedBounds copy + Field cachedBoundsField = FlightConfiguration.class.getDeclaredField("cachedBounds"); + cachedBoundsField.setAccessible(true); + BoundingBox cachedBoundsOriginal = (BoundingBox) cachedBoundsField.get(original); + BoundingBox cachedBoundsCopy = (BoundingBox) cachedBoundsField.get(copy); + assertEquals(cachedBoundsOriginal, cachedBoundsCopy); + assertNotSame(cachedBoundsOriginal, cachedBoundsCopy); + + // Test modID copy + assertEquals(original.getModID(), copy.getModID()); + + // Test boundModID + Field boundsModIDField = FlightConfiguration.class.getDeclaredField("boundsModID"); + boundsModIDField.setAccessible(true); + int boundsModIDCopy = (int) boundsModIDField.get(copy); + assertEquals(-1, boundsModIDCopy); + + // Test refLengthModID + Field refLengthModIDField = FlightConfiguration.class.getDeclaredField("refLengthModID"); + refLengthModIDField.setAccessible(true); + int refLengthModIDCopy = (int) refLengthModIDField.get(copy); + assertEquals(-1, refLengthModIDCopy); + + // Test stageActiveness copy + for (int i = 0; i < original.getStageCount(); i++) { + assertEquals(original.isStageActive(i), copy.isStageActive(i)); + } + } + + @Test + public void testClone() throws NoSuchFieldException, IllegalAccessException { + Rocket rocket = TestRockets.makeFalcon9Heavy(); + FlightConfiguration original = rocket.getSelectedConfiguration(); + original.setOnlyStage(0); + + // vvvv Test Target vvvv + FlightConfiguration clone = original.clone(); + // ^^^^ Test Target ^^^^ + + assertEquals(original, clone); + assertNotSame(original, clone); + assertEquals(original.getName(), clone.getName()); + assertEquals(original.getFlightConfigurationID(), clone.getFlightConfigurationID()); + + // Test preloadStageActiveness clone + Field preloadStageActivenessField = FlightConfiguration.class.getDeclaredField("preloadStageActiveness"); + preloadStageActivenessField.setAccessible(true); + Map preloadStageActivenessOriginal = (Map) preloadStageActivenessField.get(original); + Map preloadStageActivenessClone = (Map) preloadStageActivenessField.get(clone); + assertEquals(preloadStageActivenessOriginal, preloadStageActivenessClone); + if (preloadStageActivenessOriginal == null) { + assertNull(preloadStageActivenessClone); + } else { + assertNotSame(preloadStageActivenessOriginal, preloadStageActivenessClone); + } + + // Test cachedBoundsAerodynamic clone + Field cachedBoundsAerodynamicField = FlightConfiguration.class.getDeclaredField("cachedBoundsAerodynamic"); + cachedBoundsAerodynamicField.setAccessible(true); + BoundingBox cachedBoundsAerodynamicOriginal = (BoundingBox) cachedBoundsAerodynamicField.get(original); + BoundingBox cachedBoundsAerodynamicClone = (BoundingBox) cachedBoundsAerodynamicField.get(clone); + assertEquals(cachedBoundsAerodynamicOriginal, cachedBoundsAerodynamicClone); + assertNotSame(cachedBoundsAerodynamicOriginal, cachedBoundsAerodynamicClone); + + // Test cachedBounds clone + Field cachedBoundsField = FlightConfiguration.class.getDeclaredField("cachedBounds"); + cachedBoundsField.setAccessible(true); + BoundingBox cachedBoundsOriginal = (BoundingBox) cachedBoundsField.get(original); + BoundingBox cachedBoundsClone = (BoundingBox) cachedBoundsField.get(clone); + assertEquals(cachedBoundsOriginal, cachedBoundsClone); + assertNotSame(cachedBoundsOriginal, cachedBoundsClone); + + // Test modID clone + assertEquals(original.getModID(), clone.getModID()); + + // Test boundModID + Field boundsModIDField = FlightConfiguration.class.getDeclaredField("boundsModID"); + boundsModIDField.setAccessible(true); + int boundsModIDClone = (int) boundsModIDField.get(clone); + assertEquals(-1, boundsModIDClone); + + // Test refLengthModID + Field refLengthModIDField = FlightConfiguration.class.getDeclaredField("refLengthModID"); + refLengthModIDField.setAccessible(true); + int refLengthModIDClone = (int) refLengthModIDField.get(clone); + assertEquals(-1, refLengthModIDClone); + + // Test stageActiveness copy + for (int i = 0; i < original.getStageCount(); i++) { + assertEquals(original.isStageActive(i), clone.isStageActive(i)); + } + } } From 7107ed58886829993032bf7130768fdbe5041131 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Wed, 14 Dec 2022 00:50:42 +0100 Subject: [PATCH 12/17] Only zoom to active stages --- .../sf/openrocket/gui/scalefigure/RocketFigure.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java index 0fe7cf400..1c0925ed6 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java @@ -496,17 +496,14 @@ public class RocketFigure extends AbstractScaleFigure { protected void updateSubjectDimensions() { // calculate bounds, and store in class variables - final FlightConfiguration config = rocket.getSelectedConfiguration().clone(); - // Explicitly zoom & draw at a scale to fit the entire rocket, but only show the selected stages. - config.setAllStages(); - final BoundingBox newBounds = config.getBoundingBox(); + final BoundingBox bounds = rocket.getSelectedConfiguration().getBoundingBox(); - final double maxR = Math.max( Math.hypot(newBounds.min.y, newBounds.min.z), - Math.hypot(newBounds.max.y, newBounds.max.z)); + final double maxR = Math.max( Math.hypot(bounds.min.y, bounds.min.z), + Math.hypot(bounds.max.y, bounds.max.z)); switch (currentViewType) { case SideView: - subjectBounds_m = new Rectangle2D.Double(newBounds.min.x, -maxR, newBounds.span().x, 2 * maxR); + subjectBounds_m = new Rectangle2D.Double(bounds.min.x, -maxR, bounds.span().x, 2 * maxR); break; case BackView: subjectBounds_m = new Rectangle2D.Double(-maxR, -maxR, 2 * maxR, 2 * maxR); From b08658ebe4fa90e02fd6a2cbafbc1c3103b5f943 Mon Sep 17 00:00:00 2001 From: H Craig Miller <68821492+hcraigmiller@users.noreply.github.com> Date: Fri, 16 Dec 2022 05:30:51 -0800 Subject: [PATCH 13/17] [#1890] Updates zero-body warning messaging (#1891) Update Zero-body messaging --- core/resources/l10n/messages.properties | 7 +++---- core/resources/l10n/messages_nl.properties | 3 +-- core/resources/l10n/messages_ru.properties | 3 +-- core/src/net/sf/openrocket/aerodynamics/Warning.java | 3 +-- .../sf/openrocket/aerodynamics/barrowman/FinSetCalc.java | 7 ++----- 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index c63e110ca..d66aa5085 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1859,10 +1859,9 @@ Warning.RECOVERY_HIGH_SPEED = Recovery device deployment at high speed Warning.NO_RECOVERY_DEVICE = No recovery device defined in the simulation. Warning.TUMBLE_UNDER_THRUST = Stage began to tumble under thrust. Warning.EVENT_AFTER_LANDING = Flight Event occurred after landing: -Warning.ZERO_LENGTH_BODY = Zero length bodies may not result in accurate simulations. -Warning.ZERO_RADIUS_BODY = Zero length bodies may not result in accurate simulations. -Warning.TUBE_SEPARATION = Space between tube fins may not result in accurate simulations. -Warning.TUBE_OVERLAP = Overlapping tube fins may not result in accurate simulations. +Warning.ZERO_VOLUME_BODY = Zero-volume bodies may not simulate accurately. +Warning.TUBE_SEPARATION = Space between tube fins may not simulate accurately. +Warning.TUBE_OVERLAP = Overlapping tube fins may not simulate accurately. Warning.EMPTY_BRANCH = Simulation branch contains no data Warning.SEPARATION_ORDER = Stages separated in an unreasonable order diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties index d00fd2d53..2cbf92ceb 100644 --- a/core/resources/l10n/messages_nl.properties +++ b/core/resources/l10n/messages_nl.properties @@ -1700,8 +1700,7 @@ Warning.RECOVERY_LAUNCH_ROD = Terugvorderingsapparaat ingezet tijdens de lanceri Warning.RECOVERY_HIGH_SPEED = Terugvorderingsapparaat ingezet bij hoge snelheid Warning.TUMBLE_UNDER_THRUST = Trap begon te tuimelen onder stuwkracht. Warning.EVENT_AFTER_LANDING = Vlucht evenement opgetreden tijdens landing: -Warning.ZERO_LENGTH_BODY = Lichamen met een lengte van nul resulteren mogelijk niet in nauwkeurige simulaties. -Warning.ZERO_RADIUS_BODY = Lichamen met een lengte van nul resulteren mogelijk niet in nauwkeurige simulaties. +Warning.ZERO_VOLUME_BODY = Lichamen met een lengte van nul resulteren mogelijk niet in nauwkeurige simulaties. ! Scale dialog ScaleDialog.lbl.scaleRocket = Volledige raket diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties index b9eee7e88..de6876838 100644 --- a/core/resources/l10n/messages_ru.properties +++ b/core/resources/l10n/messages_ru.properties @@ -1823,8 +1823,7 @@ Warning.RECOVERY_HIGH_SPEED = \u0421\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u Warning.NO_RECOVERY_DEVICE = \u0412 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043D\u0435\u0442 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432 \u0441\u043F\u0430\u0441\u0435\u043D\u0438\u044F Warning.TUMBLE_UNDER_THRUST = \u0421\u0442\u0443\u043F\u0435\u043D\u044C \u043D\u0430\u0447\u0430\u043B\u0430 \u043A\u0443\u0432\u044B\u0440\u044C\u043A\u0430\u0442\u044C\u0441\u044F \u043F\u043E\u0434 \u0442\u044F\u0433\u043E\u0439. Warning.EVENT_AFTER_LANDING = \u041B\u0435\u0442\u043D\u043E\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u0435 \u0432\u043E\u0437\u043D\u0438\u043A\u043B\u043E \u043F\u043E\u0441\u043B\u0435 \u043F\u0440\u0438\u0437\u0435\u043C\u043B\u0435\u043D\u0438\u044F: -Warning.ZERO_LENGTH_BODY = \u0422\u0435\u043B\u0430 \u043D\u0443\u043B\u0435\u0432\u043E\u0439 \u0434\u043B\u0438\u043D\u044B \u043C\u043E\u0433\u0443\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043D\u0435\u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044F\u043C \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0435. -Warning.ZERO_RADIUS_BODY = \u0422\u0435\u043B\u0430 \u043D\u0443\u043B\u0435\u0432\u043E\u0433\u043E \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043C\u043E\u0433\u0443\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043D\u0435\u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044F\u043C \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0435. +Warning.ZERO_VOLUME_BODY = \u0422\u0435\u043B\u0430 \u043D\u0443\u043B\u0435\u0432\u043E\u0439 \u0434\u043B\u0438\u043D\u044B \u043C\u043E\u0433\u0443\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043D\u0435\u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044F\u043C \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0435. Warning.TUBE_SEPARATION = \u041F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u043C\u0435\u0436\u0434\u0443 \u0442\u0440\u0443\u0431\u0447\u0430\u0442\u044B\u043C\u0438 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430\u043C\u0438 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043D\u0435\u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044F\u043C \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0435. Warning.TUBE_OVERLAP = \u041F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0438\u0435\u0441\u044F \u0442\u0440\u0443\u0431\u0447\u0430\u0442\u044B\u0435 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u044B \u043C\u043E\u0433\u0443\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043D\u0435\u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044F\u043C \u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0435. diff --git a/core/src/net/sf/openrocket/aerodynamics/Warning.java b/core/src/net/sf/openrocket/aerodynamics/Warning.java index ae7c94e35..c746650ea 100644 --- a/core/src/net/sf/openrocket/aerodynamics/Warning.java +++ b/core/src/net/sf/openrocket/aerodynamics/Warning.java @@ -390,8 +390,7 @@ public abstract class Warning { public static final Warning EVENT_AFTER_LANDING = new Other(trans.get("Warning.EVENT_AFTER_LANDING")); - public static final Warning ZERO_LENGTH_BODY = new Other(trans.get("Warning.ZERO_LENGTH_BODY")); - public static final Warning ZERO_RADIUS_BODY = new Other(trans.get("Warning.ZERO_RADIUS_BODY")); + public static final Warning ZERO_VOLUME_BODY = new Other(trans.get("Warning.ZERO_VOLUME_BODY")); public static final Warning TUBE_SEPARATION = new Other(trans.get("Warning.TUBE_SEPARATION")); public static final Warning TUBE_OVERLAP = new Other(trans.get("Warning.TUBE_OVERLAP")); diff --git a/core/src/net/sf/openrocket/aerodynamics/barrowman/FinSetCalc.java b/core/src/net/sf/openrocket/aerodynamics/barrowman/FinSetCalc.java index d73317a1e..1bafd4abc 100644 --- a/core/src/net/sf/openrocket/aerodynamics/barrowman/FinSetCalc.java +++ b/core/src/net/sf/openrocket/aerodynamics/barrowman/FinSetCalc.java @@ -101,12 +101,9 @@ public class FinSetCalc extends RocketComponentCalc { return; } - if((EPSILON > bodyLength)) { + if ((bodyLength < EPSILON) || (bodyRadius < EPSILON)) { // Add warnings: Phantom Body - warnings.add(Warning.ZERO_LENGTH_BODY); - }else if((EPSILON > bodyRadius)){ - // Add warnings: Phantom Body - warnings.add(Warning.ZERO_RADIUS_BODY); + warnings.add(Warning.ZERO_VOLUME_BODY); }else if( (0 < bodyRadius) && (thickness > bodyRadius / 2)){ // Add warnings (radius/2 == diameter/4) warnings.add(Warning.THICK_FIN); From b407735f41d8b31d908ca7d1392b82495f2d6992 Mon Sep 17 00:00:00 2001 From: H Craig Miller <68821492+hcraigmiller@users.noreply.github.com> Date: Sat, 17 Dec 2022 11:56:47 -0800 Subject: [PATCH 14/17] Conform warning phrase Conform thick-fin warning phrase to match zero-volume body ad others. --- core/resources/l10n/messages.properties | 2 +- core/resources/l10n/messages_uk_UA.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index d66aa5085..e1e9dd23d 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1847,7 +1847,7 @@ PlotConfiguration.Groundtrack = Ground track Warning.LargeAOA.str1 = Large angle of attack encountered. Warning.LargeAOA.str2 = Large angle of attack encountered ( Warning.DISCONTINUITY = Discontinuity in rocket body diameter -Warning.THICK_FIN = Thick fins may not be modeled accurately. +Warning.THICK_FIN = Thick fins may not simulate accurately. Warning.JAGGED_EDGED_FIN = Jagged-edged fin predictions may be inaccurate. Warning.LISTENERS_AFFECTED = Listeners modified the flight simulation Warning.RECOVERY_DEPLOYMENT_WHILE_BURNING = Recovery device opened while motor still burning. diff --git a/core/resources/l10n/messages_uk_UA.properties b/core/resources/l10n/messages_uk_UA.properties index 1360c1164..842b601b4 100644 --- a/core/resources/l10n/messages_uk_UA.properties +++ b/core/resources/l10n/messages_uk_UA.properties @@ -1536,7 +1536,7 @@ PlotConfiguration.Simulationtime = Simulation time step and computation time Warning.LargeAOA.str1 = Large angle of attack encountered. Warning.LargeAOA.str2 = Large angle of attack encountered ( Warning.DISCONTINUITY = Discontinuity in rocket body diameter -Warning.THICK_FIN = Thick fins may not be modeled accurately. +Warning.THICK_FIN = Thick fins may not simulate accurately. Warning.JAGGED_EDGED_FIN = Jagged-edged fin predictions may be inaccurate. Warning.LISTENERS_AFFECTED = Listeners modified the flight simulation Warning.RECOVERY_DEPLOYMENT_WHILE_BURNING = Recovery device opened while motor still burning. From eeb87bcf83aa69f85337ecd6a51831fa591b9151 Mon Sep 17 00:00:00 2001 From: Mohamed Amin Elkebsi <48360769+MedKebsi@users.noreply.github.com> Date: Sun, 18 Dec 2022 13:42:00 -0800 Subject: [PATCH 15/17] messages_ar.properties this file is the translation in arabic for open rocket --- core/resources/l10n/messages_ar.properties | 2285 ++++++++++++++++++++ 1 file changed, 2285 insertions(+) create mode 100644 core/resources/l10n/messages_ar.properties diff --git a/core/resources/l10n/messages_ar.properties b/core/resources/l10n/messages_ar.properties new file mode 100644 index 000000000..540f184c6 --- /dev/null +++ b/core/resources/l10n/messages_ar.properties @@ -0,0 +1,2285 @@ +# +# Arabic base translation file +# +# Should you need to add new logical keys here is the proposed method +# +# className.ComponentType.componentName +# +# +# Text tokens within braces should not be translated, e.g. +# "The file '{filename}' exists." +# They are pieces that are inserted dynamically. +# + + +! Set to the name of the current translation file (used for debugging purposes) +debug.currentFile = messages_ar.properties + +! RocketActions +RocketActions.checkbox.Donotaskmeagain = لا تسألني مجددا +RocketActions.lbl.Youcanchangedefop = يمكنك تغيير العملية الافتراضية في التفضيلات. +RocketActions.showConfirmDialog.lbl1 = إحذف المحاكاة المختارة؟ +RocketActions.showConfirmDialog.lbl2 = لا يمكنك التراجع عن هذه العملية. +RocketActions.showConfirmDialog.title = إحذف كل المحاكاة +RocketActions.DelCompAct.Delete = إحذف +RocketActions.DelCompAct.ttip.Delete = إحذف القطعة المختارة +RocketActions.DelSimuAct.Delete = إحذف +RocketActions.DelSimuAct.ttip.Delete = إحذف المحاكاة المختارة +RocketActions.DelAct.Delete = إحذف +RocketActions.DelAct.ttip.Delete = إحذف القطعة أو المحاكاة المختارة. +RocketActions.CutAction.Cut = قص +RocketActions.CutAction.ttip.Cut = قص هذا المكون أو المحاكاة إلى الحافظة وحذفها من هذا التصميم +RocketActions.CopyAct.Copy = نسخ +RocketActions.CopyAct.ttip.Copy = إلى الحافظة (والمكونات الفرعية) إنسخ هذا المكون +RocketActions.PasteAct.Paste = لصق +RocketActions.PasteAct.ttip.Paste = ألصق المكون أو المحاكاة الموجودة على الحافظة في التصميم +RocketActions.PasteAct.invalidPosition.msg = تجاهل اللصق '%s'موضع لصق غير صالح ل +RocketActions.PasteAct.invalidPosition.title = تعذر اللصق +RocketActions.DuplicateAct.Duplicate = كرر +RocketActions.DuplicateAct.ttip.Duplicate = (ومكوناته الفرعية) تكرار هذا المكون +RocketActions.EditAct.Edit = تعديل +RocketActions.EditAct.ttip.Edit = تعديل القطعة المختارة +RocketActions.ScaleAct.Scale = حَجِّمْ +RocketActions.ScaleAct.ttip.Scale = حَجِّمْ أجزاء تصميم الصاروخ +RocketActions.NewStageAct.Newstage = مرحلة جديدة +RocketActions.NewStageAct.ttip.Newstage = أضف مرحلة جديدة لتصميم الصاروخ +RocketActions.MoveUpAct.Moveup = حرك لأعلى +RocketActions.MoveUpAct.ttip.Moveup = حرك هذه القطعة للأعلى +RocketActions.MoveDownAct.Movedown = حرك لأسفل +RocketActions.MoveDownAct.ttip.Movedown = حرك هذه القطعة للأسفل + +! RocketPanel +RocketPanel.FigTypeAct.SideView = رؤية جانبية +RocketPanel.FigTypeAct.BackView = رؤية خلفية +RocketPanel.FigTypeAct.Figure3D = شكل ثلاثي الأبعاد +RocketPanel.FigTypeAct.Finished = شكل ثلاثي الأبعاد مكتمل +RocketPanel.FigTypeAct.Unfinished = شكل ثلاثي الأبعاد غير مكتمل + + +RocketPanel.lbl.Flightcfg = :إعدادات الطيران +RocketPanel.lbl.infoMessage = أنقر للإختيار    Shift+click لإختيار متعدد    نقرتين للتعديل   للتحرك نقرة وسحب +RocketPanel.lbl.ViewType = :نوع الرؤية +RocketPanel.lbl.Zoom = :تقريب +RocketPanel.lbl.Stability = :الإستقرار +RocketPanel.checkbox.ShowCGCP = أظهر مركز الجاذبية/مركز الضغط +RocketPanel.checkbox.ShowCGCP.ttip = يؤدي تعطيل مربع الإختيار هذا إلى إخفاء علامات مركز الجاذبية ومركز الضغط في عرض الصاروخ +RocketPanel.lbl.Stages = :المراحل +RocketPanel.btn.Stages.Toggle.ttip = بدّل هذا الزر لتنشيط أو إلغاء تنشيط المرحلة المقابلة في تصميمك +RocketPanel.btn.Stages.NoChildren.ttip = لا تحتوي هذه المراحل على أي مكونات فرعية ، وبالتالي يتم تمييزها على أنها غير نشطة
أضف مكونات إلى المرحلة لتنشيطها +RocketPanel.ttip.Rotation = (يؤثر فقط على منظر الصاروخ) تغيير دوران الصاروخ + +! BasicFrame +BasicFrame.tab.Rocketdesign = تصميم الصاروخ +BasicFrame.tab.Flightconfig = المحركات والإعدادات +BasicFrame.tab.Flightsim = محاكيات الطيران +BasicFrame.title.Addnewcomp = أضف قطعة جديدة +BasicFrame.dlg.lbl1 = تصميم ' +BasicFrame.dlg.lbl2 = ' لم يتم حفظه +BasicFrame.dlg.lbl3 = هل تريد حفظه؟ +BasicFrame.dlg.title = التصميم ليس محفوظا +BasicFrame.StageName.Sustainer = مُعزِّز +BasicFrame.WarningDialog.txt1 = تمت مصادفة المشكلات التالية أثناء الفتح +BasicFrame.WarningDialog.txt2 = ربما لم يتم تحميل بعض ميزات التصميم بشكل صحيح +BasicFrame.WarningDialog.title = تحذيرات أثناء فتح الملف + + +! General error messages used in multiple contexts +error.fileExists.title = الملف موجود +error.fileExists.desc = موجود. هل تريد الكتابة عليه؟ '{filename}' الملف + +error.writing.title = خطأ في كتابة الملف +error.writing.desc = :حدث خطأ أثناء الكتابة إلى الملف +Configuration.lbl.override = .يمكن تجاوز هذا المعامل في كل إعداد طيران + + +! Labels used in buttons of dialog windows +# TODO: Rename these to "btn.xxx" +button.ok = حسنا +button.cancel = إلغاء +button.close = إغلاق + +! Common labels used in buttons of dialog windows +dlg.but.ok = حسنا +dlg.but.cancel = إلغاء +dlg.but.close = إغلاق + +! General file type names +FileHelper.CSV_FILTER = (*.csv) ملفات مفصولة بفواصل +FileHelper.PDF_FILTER = (*.pdf) ملف بي دي إف +FileHelper.ALL_DESIGNS_FILTER = (*.ork; *.rkt) كل تصاميم الصواريخ +FileHelper.OPENROCKET_DESIGN_FILTER = (*.ork) تصاميم أوبنروكت +FileHelper.ROCKSIM_DESIGN_FILTER = (*.rkt) تصاميم روكسيم +FileHelper.OPEN_ROCKET_COMPONENT_FILTER = (*.orc) إعدادات أوبنروكت المسبقة +FileHelper.PNG_FILTER = (*.png) صورة بي إن جي +FileHelper.IMAGES = ملفات صور + + +! About Dialog +AboutDialog.lbl.version = إصدار +! The texts below provide additional credits for the translation maintainer +! - In AboutDialog.lbl.translation replace "Arabic" with the current language. +! - AboutDialog.lbl.translator is the translator / group name (may be empty) +! - AboutDialog.lbl.translatorWebsite is a URL to the translator / group (may be empty) +! - AboutDialog.lbl.translatorIcon is the file name of an icon under pix/translators/ (may be empty) +AboutDialog.lbl.translation = :ترجمت إلى العربية بواسطة +AboutDialog.lbl.translator =Mohamed Amin Elkebsi محمد أمين الكبسي +AboutDialog.lbl.translatorWebsite = +AboutDialog.lbl.translatorIcon = TARS.png + + +! Print dialog +PrintDialog.title = طباعة أو تصدير +PrintDialog.but.previewAndPrint = معاينة وطباعة +PrintDialog.checkbox.showByStage = عرض بالمرحلة +PrintDialog.checkbox.updateSimulations = تحديث بيانات المحاكاة +PrintDialog.lbl.selectElements = :حدد العناصر المراد تضمينها +printdlg.but.saveaspdf = إحفظ كملف بي دي إف +printdlg.but.preview = معاينة +printdlg.but.settings = الإعدادات +PrintDialog.error.preview.title = تعذر فتح المعاينة +PrintDialog.error.preview.desc1 = تعذر فتح المعاينة لملف بي دي إف +PrintDialog.error.preview.desc2 = .بدلاً من ذلك "إحفظ كملف بي دي إف" الرجاء استخدام خيار + +!PrintSettingsDialog +PrintSettingsDialog.title = طباعة الإعدادات +PrintSettingsDialog.lbl.Templatefillcolor = :لون القالب الداخلي +PrintSettingsDialog.lbl.Templatebordercolor = :لون حدود القالب +PrintSettingsDialog.lbl.Papersize = :حجم الصفحة +PrintSettingsDialog.lbl.Paperorientation = .إتجاه الصفحة +PrintSettingsDialog.but.Reset = إعادة ضبط +PrintSettingsDialog.but.Close = إغلاق + + +! Bug Report dialog +bugreport.dlg.title = التبليغ عن خلل +bugreport.dlg.but.Sendbugreport = أرسل تقرير الخلل +bugreport.dlg.but.Sendbugreport.Ttip = .إرسال تقرير الخطأ تلقائيًا إلى مطوري أوبنروكت +bugreport.dlg.successmsg1 = .تقرير الخلل أرسل بنجاح +bugreport.dlg.successmsg2 = !شكرا لك لجعل أوبنروكت أفضل +bugreport.dlg.successmsg3 = تقرير الخلل أرسل +bugreport.dlg.connectedInternet =    :لإرسال خطأ عبر الإنترنت ، قم بتضمين النص أدناه على +bugreport.dlg.otherwise =    :لإرسال خطأ عبر البريد الإلكتروني ، أرسل النص أدناه إلى +bugreport.lbl.Theinformation = .قد يتم تضمين المعلومات الواردة أعلاه في تقرير خلل عام. تأكد من أنه لا يحتوي على أي معلومات حساسة لا تريد نشرها على الملأ +bugreport.dlg.failedmsg1 = :لم يتمكن أوبنروكت من إرسال تقرير الخطأ +bugreport.dlg.failedmsg2 = فضلا أرسل التقرير يدويا إلى +bugreport.dlg.failedmsg3 = خطأ في إرسال التقرير +bugreport.reportDialog.txt = .يمكن الإبلاغ عن الأخطاء في موقع مشروع أوبنروكت على غيت هوب أو عن طريق البريد الإلكتروني +bugreport.reportDialog.txt2 = !الرجاء مساعدتنا في إصلاحه بإرسال تقرير الخطأ هذا \ u2026 \ u2639 نأسف للخطأ +bugreport.dlg.provideDescription = .يرجى تقديم وصف للخطأ أولاً +bugreport.dlg.provideDescription.title = وصف الخطأ مفقود + + +! Debug log dialog +debuglogdlg.but.clear = مسح +debuglogdlg.OpenRocketdebuglog = سجل تصحيح أوبنروكت +debuglogdlg.Displayloglines = :عرض سطور السجل +debuglogdlg.ToggleDetails = التفاصيل +debuglogdlg.Follow = متابعة +debuglogdlg.col.Time = الوقت +debuglogdlg.col.Level = المرحلة +debuglogdlg.col.Location = الموقع +debuglogdlg.col.Message = رسالة +debuglogdlg.lbl.Loglinenbr = :رقم سطر السجل +debuglogdlg.lbl.Time = :الوقت +debuglogdlg.lbl.Level = :المرحلة +debuglogdlg.lbl.Location = :الموقع +debuglogdlg.lbl.Logmessage = :رسالة السجل +debuglogdlg.lbl.Stacktrace = :تتبع المكدس + + +! MotorChooserDialog +MotorChooserDialog.title = اختر محركًا صاروخيًا + +! Edit Motor configuration dialog +edtmotorconfdlg.col.configuration = إعدادات +edtmotorconfdlg.but.Deleteconfiguration = إحذف الإعدادات +edtmotorconfdlg.but.Renameconfiguration = إعادة تسمية الإعدادات +edtmotorconfdlg.but.Newconfiguration = إعدادات جديدة +edtmotorconfdlg.but.Duplicateconfiguration = كرر الإعدادات +edtmotorconfdlg.title.Editmotorconf = عدل إعدادات الطيران +edtmotorconfdlg.title.Renameconf = إعادة تسمية إعدادات الطيران +edtmotorconfdlg.title.Selectdeploymentconf = حدد إعداد النشر +edtmotorconfdlg.title.Selectignitionconf = حدد إعداد الإشعال +edtmotorconfdlg.title.Selectseparationconf = حدد إعداد الفصل +edtmotorconfdlg.lbl.Selectedconf = :حدد إعداد الطيران +edtmotorconfdlg.selectcomp = :حدد المكونات التي تعمل كحوامل محرك +edtmotorconfdlg.lbl.Configname = :إسم الإعداد +edtmotorconfdlg.lbl.Motortab = محركات +edtmotorconfdlg.lbl.Recoverytab = إسترداد +edtmotorconfdlg.lbl.Stagetab = مراحل +edtmotorconfdlg.tbl.None = لا شئ +edtmotorconfdlg.tbl.Motorheader = محرك +edtmotorconfdlg.tbl.Mountheader = حامل المحرك +edtmotorconfdlg.tbl.Ignitionheader = إشعال +edtmotorconfdlg.but.Resetdeployment = إعادة تعيين النشر +edtmotorconfdlg.but.Selectdeployment = حدد نوع النشر +edtmotorconfdlg.tbl.Recoveryheader = جهاز الإسترداد +edtmotorconfdlg.tbl.Deploymentheader = النشر +edtmotorconfdlg.but.Resetseparation = إعادة تعيين الفصل +edtmotorconfdlg.but.Selectseparation = حدد نوع الفصل +edtmotorconfdlg.tbl.Stageheader = مرحلة +edtmotorconfdlg.tbl.Separationheader = فصل + +! Rename FlightConfiguration Dialog +RenameConfigDialog.title = إعادة تسمية الإعداد +RenameConfigDialog.lbl.name = :إسم إعداد الطيران +RenameConfigDialog.but.reset = إعادة تعيين إلى الافتراضي + +! Example design dialog +exdesigndlg.but.open = فتح +exdesigndlg.lbl.Selectexample = :حدد أمثلة للتصميمات لفتحها +exdesigndlg.lbl.Openexampledesign = افتح مثال التصميم +exdesigndlg.lbl.Exampledesignsnotfound = .لا يمكن العثور على تصميمات المثال +exdesigndlg.lbl.Examplesnotfound = لم يتم العثور على أمثلة + + +! Material edit panel +matedtpan.but.new = جديد +matedtpan.but.edit = تعديل +matedtpan.but.delete = حذف +matedtpan.but.revertall = التراجع عن الكل +matedtpan.col.Material = مادة +matedtpan.col.Type = نوع +matedtpan.col.Density = كثافة +matedtpan.col.but.ttip.New = أضف مادة جديدة +matedtpan.title.Addcustmaterial = أضف مادة مخصصة +matedtpan.but.ttip.edit = تعديل مادة موجودة +matedtpan.title.Editmaterial = تعديل مادة +matedtpan.title2.Editmaterial = .لا يمكن تعديل المواد المدمجة +matedtpan.but.ttip.delete = إحذف مادة معرّفة من قبل المستخدم +matedtpan.but.ttip.revertall = حذف كافة المواد المعرّفة من قبل المستخدم +matedtpan.title.Deletealluser-defined = هل تريد حذف كافة المواد المعرّفة من قبل المستخدم؟ +matedtpan.title.Revertall = هل تريد التراجع عن الكل؟ +matedtpan.lbl.edtmaterials = .لن يؤثر تحرير المواد على تصميمات الصاروخ الحالي + +!MaterialModel +MaterialModel.title.Material = مادة +MaterialModel.title.Defcustmat = تعريف مادة مخصصة + + +! Preference dialog +pref.dlg.but.add = أضف +pref.dlg.but.reset = إعادة تعيين +pref.dlg.but.checknow = تأكد الآن +pref.dlg.but.openlast = إفتح ملف التصميم الأخير عند بدء التشغيل +pref.dlg.but.defaultmetric = حدد النظام المتري إفتراضيا +pref.dlg.but.defaultimperial = حدد النظام الإمبراطوري إفتراضيا +pref.dlg.title.Preferences = التفضيلات +pref.dlg.tab.Units = الوحدات +pref.dlg.tab.Colors = عرض +pref.dlg.tab.Defaultunits = الوحدات الإفتراضية +pref.dlg.tab.Materials = المواد +pref.dlg.tab.Custommaterials = مواد مخصصة +pref.dlg.tab.Options = عام +pref.dlg.tab.Design = تصميم +pref.dlg.tab.Simulation = محاكاة +pref.dlg.tab.Launch = إطلاق +pref.dlg.tab.Miscellaneousoptions = الخيارات المتنوعة +pref.dlg.lbl.RockSimWarning = إظهار تحذير عند الحفظ بتنسيق روكسيم +pref.dlg.but.clearCachedPreferences = إعادة تعيين كل التفضيلات +pref.dlg.but.clearCachedPreferences.ttip = (إعدادات واجهة المستخدم والملفات الحديثة وما إلى ذلك)إعادة تعيين جميع التفضيلات ، بما في ذلك التفضيلات المخزنة مؤقتًا +pref.dlg.clearCachedPreferences.title = هل تريد إعادة تعيين التفضيلات؟ +pref.dlg.clearCachedPreferences.message = هل أنت متأكد أنك تريد إعادة تعيين كل تفضيلاتك؟ + +pref.dlg.tab.Graphics = الرسومات +pref.dlg.lbl.DecalEditor = محرر الرسومات +pref.dlg.opengl.lbl.title = الرسومات ثلاثية الأبعاد +pref.dlg.opengl.but.enableGL = فعل الرسومات ثلاثية الأبعاد +pref.dlg.opengl.but.enableAA = تفعيل الصقل +pref.dlg.opengl.lbl.useFBO = إستخدم العرض خارج الشاشة + +pref.dlg.lbl.DefaultMach = :رقم ماخ الإفتراضي لتقدير مركز الضغط + +pref.dlg.lbl.launchWarning = .ملاحظة: الإعدادات أدناه تنطبق فقط على عمليات المحاكاة التي تم إنشاؤها حديثًا
.لتغيير الإعدادات الخاصة بمحاكاة موجودة ، حدد تلك المحاكاة وقم بتحريرها +pref.dlg.lbl.launchWarning.ttip = :)لن تكون أول من يربكه هذا + +pref.dlg.lbl.Positiontoinsert = :وضعية إدخال مكونات جديدة للجسم +pref.dlg.lbl.PositiontoinsertStages = :وضعية إدخال مراحل جديدة +pref.dlg.lbl.Confirmdeletion = .تأكيد حذف عمليات المحاكاة +pref.dlg.checkbox.Runsimulations = .نفّذ عمليات المحاكاة القديمة عند فتح علامة تبويب المحاكاة +pref.dlg.checkbox.Updateestimates = تحديث إعدادات الطيران المقدرة في نافذة التصميم +pref.dlg.checkbox.Markers = إعرض علامات مجموعة الكبسولات / المعززات فقط عند تحديد مجموعة الكبسولات / المعززات +pref.dlg.checkbox.Markers.ttip = .إذا تم تحديده, فسيتم عرض علامات مجموعة الكبسولات / المعززات فقط عند تحديد مجموعة الكبسولات / المعززات
.إذا لم يتم تحديده ، فسيتم دائمًا عرض علامات مجموعة الكبسولات / المعززات +pref.dlg.checkbox.AlwaysOpenLeftmost = افتح دائمًا علامة التبويب الموجودة في أقصى اليسار عند فتح مربع حوار تحرير مكون +pref.dlg.checkbox.AlwaysOpenLeftmost.ttip = .إذا تم تحديده ، فسيظهر مربع حوار تحرير المكون دائمًا مع تحديد علامة التبويب الأولى
.إذا لم يتم تحديده ، فسيتم استخدام علامة التبويب المحددة السابقة +pref.dlg.lbl.User-definedthrust = :منحنيات الدفع المحددة من قبل المستخدم +pref.dlg.lbl.Windspeed = سرعة الريح +pref.dlg.Allthrustcurvefiles = (*.eng; *.rse; *.zip; directories) جميع ملفات منحنى الدفع +pref.dlg.RASPfiles = (*.eng) RASP ملفات محرك +pref.dlg.RockSimfiles = (*.rse)ملفات محركات روكسيم +pref.dlg.ZIParchives = (*.zip) أرشيف زيب +pref.dlg.checkbox.Checkupdates = تحقق دائمًا من تحديثات البرنامج عند بدء التشغيل +pref.dlg.checkbox.Checkupdates.ttip = تحقق من تحديثات البرنامج في كل مرة تبدأ فيها تشغيل أوبنروكت +pref.dlg.checkbox.CheckBetaupdates = تحقق أيضًا من وجود إصدارات بيتا +pref.dlg.checkbox.CheckBetaupdates.ttip = .إذا تم تحديده ، فسيتم أيضًا إخطار تحديثات إصدار بيتا. إذا لم يتم تحديده ، يتم النظر في الإصدارات الرسمية فقط +pref.dlg.ttip.Checkupdatesnow = تحقق من وجود تحديثات للبرنامج الآن +pref.dlg.lbl.Selectprefunits = :حدد الوحدات المفضلة لديك +pref.dlg.lbl.Rocketinfofontsize = :حجم النص في لوحة تصميم الصاروخ +pref.dlg.PrefFontSmall = صغير +pref.dlg.PrefFontMedium = متوسط +pref.dlg.PrefFontLarge = كبير +pref.dlg.lbl.Rocketdimensions = :أبعاد الصاروخ +pref.dlg.lbl.Linedensity = :كثافة الخط +pref.dlg.lbl.Motordimensions = :أبعاد المحرك +pref.dlg.lbl.Surfacedensity = :كثافة السطح +pref.dlg.lbl.Distance = :المسافة +pref.dlg.lbl.Bulkdensity = :كثافة ضخمة +pref.dlg.lbl.Velocity = :السرعة +pref.dlg.lbl.Surfaceroughness = :خشونة السطح +pref.dlg.lbl.Acceleration = :التسارع +pref.dlg.lbl.Area = :المساحة +pref.dlg.lbl.Mass = :الكتلة +pref.dlg.lbl.Angle = :الزاوية +pref.dlg.lbl.Force = :القوة +pref.dlg.lbl.Rollrate = :معدل الإلتفاف +pref.dlg.lbl.Totalimpulse = :إجمالي الدفع +pref.dlg.lbl.Temperature = :الحرارة +pref.dlg.lbl.Momentofinertia = :لحظة القصور الذاتي +pref.dlg.lbl.Pressure = :الضغط +pref.dlg.lbl.Stability = :الإستقرار +pref.dlg.lbl.FlightTime = :وقت الطيران +pref.dlg.lbl.effect1 = .ستحدث التأثيرات في المرة التالية التي تفتح فيها نافذة +pref.dlg.lbl.Checkingupdates = \u2026 جارٍ البحث عن تحديثات +pref.dlg.PrefChoiseSelector1 = إسأل دائما +pref.dlg.PrefChoiseSelector2 = أضف في الوسط +pref.dlg.PrefChoiseSelector3 = إضف للنهاية +pref.dlg.PrefBooleanSelector1 = إحذف +pref.dlg.PrefBooleanSelector2 = تأكيد +pref.dlg.Add = أضف +pref.dlg.DescriptionArea.Adddirectories =.ملفات محرك روكسيم أو أرشيفات زيب مفصولة بفاصلة منقوطة لتحميل منحنيات الدفع الخارجية. ستدخل التغييرات حيز التنفيذ في المرة التالية التي تفتح فيها أوبنروكت (* .rse)أو RASP ملفات محرك (* .eng), أضف الدلائل + +PreferencesDialog.lbl.language = :لغة الواجهة +PreferencesDialog.languages.default = النظام الافتراضي +PreferencesDialog.lbl.languageEffect = .ستتغير اللغة في المرة التالية التي تعيد تشغيل أوبنروكت +generalprefs.lbl.language = :لغة الواجهة +generalprefs.languages.default = النظام الافتراضي +generalprefs.lbl.languageEffect = .ستتغير اللغة في المرة التالية التي تعيد تشغيل أوبنروكت + +! Welcome dialog +welcome.dlg.title = مرحبا بك في أوبنروكت +welcome.dlg.lbl.thankYou = شكرا لك لتحميل أوبنروكت +welcome.dlg.lbl.seeReleaseNotes = .راجع ملاحظات الإصدار أدناه للعثور على الجديد +welcome.dlg.checkbox.dontShowAgain = لا تظهر هذا الحوار مرة أخرى +welcome.dlg.btn.close.ttip = \u2026 رائع! والآن أتركني وحدي + +! Software update checker +update.dlg.error.title = تعذر استرداد معلومات التحديث +update.dlg.error = .حدث خطأ أثناء الاتصال بالخادم +update.dlg.exception.title = لا يمكن التحقق من وجود تحديثات +update.dlg.latestVersion.title = لا توجد تحديثات متاحة +update.dlg.latestVersion =. %s أنت تقوم بتشغيل أحدث إصدار من أوبنروكت،الإصدار +update.dlg.newerVersion.title = تم اكتشاف إصدار أحدث +update.dlg.newerVersion = %s :آخر إصدار رسمي \n%s :إصدارك \n\n إما أنك تقوم بإجراء اختبار / إصدار غير رسمي من أوبنروكت ، أو لديك آلة زمنية وتقوم بتشغيل إصدار رسمي من المستقبل +update.dlg.updateAvailable.title = !التحديث المتاح +update.dlg.updateAvailable.lbl.title = نسخة جديدة متاحة من أوبنروكت +update.dlg.btn.remindMeLater = ذكرني لاحقا +update.dlg.checkbox.skipThisVersion = تخطى هذه النسخة +update.dlg.updateAvailable.lbl.yourVersion = هل تريد تحميل الإصدار الجديد؟ .%s أنت لديك \u2015 !متاح %s أوبنروكت +update.dlg.updateAvailable.lbl.releaseNotes = :ملاحظات الإصدار +update.dlg.updateAvailable.txtPane.readMore = لمزيد من المعلومات على غيت هوب +update.dlg.updateAvailable.but.install = تثبيت التحديث +update.dlg.updateAvailable.combo.noDownloads = لا يوجد تنزيلات متاحة +update.fetcher.badResponse = %d :رمز استجابة خاطئ من الخادم +update.fetcher.badConnection = .تعذر الاتصال بخادم غيت هوب.الرجاء التحقق من إتصال الإنترنت الخاص بك +update.fetcher.malformedURL = %s :عنوان موقع واب غير صحيح + +! Simulation edit dialog +simedtdlg.but.runsimulation = تنشيط المحاكاة +simedtdlg.but.resettodefault = إعادة تعيين إلى الإفتراضي +simedtdlg.but.savedefault = إحفظ كأفتراضي +simedtdlg.but.add = أضف +simedtdlg.but.delete = إحذف +simedtdlg.title.Editsim = تعديل المحاكاة +simedtdlg.lbl.Simname = :إسم المحاكاة +simedtdlg.tab.Launchcond = شروط الإطلاق +simedtdlg.tab.Simopt = خيارات المحاكاة +simedtdlg.tab.Plotdata = عرض البيانات +simedtdlg.tab.CustomExpressions = التعبيرات المخصصة +simedtdlg.tab.Exportdata = تصدير البيانات +simedtdlg.lbl.Flightcfg = :إعدادات الطيران +simedtdlg.lbl.ttip.Flightcfg = .حدد إعدادات الرحلة لإستخدامها +simedtdlg.combo.ttip.Flightcfg = .حدد إعدادات الرحلة لإستخدامها +simedtdlg.lbl.Wind = الرياح +simedtdlg.lbl.Averwindspeed = :متوسط سرعة الرياح +simedtdlg.lbl.ttip.Averwindspeed = .متوسط سرعة الرياح بالنسبة إلى الأرض +simedtdlg.lbl.Stddeviation = :الإنحراف المعياري +simedtdlg.lbl.Winddirection = :إتجاه الرياح +simedtdlg.lbl.ttip.Winddirection = .إتجاه الرياح 0-360 درجة
صفر درجة تعني من الشمال
تسعين درجة من الشرق +simedtdlg.lbl.ttip.Stddeviation = .الإنحراف المعياري لسرعة الرياح
.تكون سرعة الرياح في حدود ضعف الانحراف المعياري عن المتوسط في 95٪ من الوقت +simedtdlg.lbl.Turbulenceintensity = :شدة الإضطراب +simedtdlg.lbl.ttip.Turbulenceintensity1 = .شدة الإضطراب هي الإنحراف المعياري مقسومًا على متوسط سرعة الرياح
+simedtdlg.lbl.ttip.Turbulenceintensity2 = تتراوح القيم النموذجية من +simedtdlg.lbl.ttip.Turbulenceintensity3 = إلى +simedtdlg.border.Atmoscond = الأحوال الجوية +simedtdlg.checkbox.InterStdAtmosphere = إستخدم المعيار الدولي للأحوال الجوية +simedtdlg.checkbox.ttip.InterStdAtmosphere1 = حدد لإستخدام المعيار الدولي للأحوال الجوية
هذا النموذج لديه درجة حرارة +simedtdlg.checkbox.ttip.InterStdAtmosphere2 = وضغط +simedtdlg.checkbox.ttip.InterStdAtmosphere3 = .عند مستوى سطح المحيط +simedtdlg.lbl.Temperature = :الحرارة +simedtdlg.lbl.ttip.Temperature = .درجة الحرارة في موقع الإطلاق +simedtdlg.lbl.Pressure = :الضغط +simedtdlg.lbl.ttip.Pressure = .الضغط الجوي في موقع الإطلاق +simedtdlg.lbl.Launchsite = موقع الإطلاق +simedtdlg.lbl.Latitude = :خط العرض +simedtdlg.lbl.ttip.Latitude = .يؤثر خط العرض في موقع الإطلاق على قوة الجاذبية الأرضية
.القيم الإيجابية في نصف الكرة الشمالي , والقيم السلبية في نصف الكرة الجنوبي + +simedtdlg.lbl.Longitude = :خط الطول +simedtdlg.lbl.ttip.Longitude = .مطلوب لتوقع الطقس ونماذج الإرتفاع + +simedtdlg.lbl.Altitude = :إرتفاع +simedtdlg.lbl.ttip.Altitude = .إرتفاع الإطلاق فوق متوسط مستوى سطح البحر
.هذا يؤثر على موقع الصاروخ في نموذج الغلاف الجوي +simedtdlg.border.Launchrod = قضيب الإطلاق +simedtdlg.lbl.Length = :الطول +simedtdlg.lbl.ttip.Length = .طول قضيب الإطلاق +simedtdlg.checkbox.Intowind = قم دائمًا بالإطلاق عندما تكون الريح صاعدة أو هابطة +simedtdlg.checkbox.ttip.Intowind1 = .إجعل قضيب الإطلاق مواجها للريح
+simedtdlg.checkbox.ttip.Intowind2 = .ستشير زاوية قضيب الإطلاق الصفرية إلى أعلى مباشرةً
+simedtdlg.checkbox.ttip.Intowind3 = .ستنطلق زاوية قضيب الإطلاق السلبية مع الريح
.إذا قمت بإلغاء تحديد هذا المربع , يمكنك توجيه قضيب الإطلاق في أي إتجاه تريده +simedtdlg.checkbox.ttip.Intowind4 = .إذا قمت بإلغاء تحديد هذا المربع ، يمكنك توجيه قضيب الإطلاق في أي اتجاه تريده +simedtdlg.lbl.Angle = :الزاوية +simedtdlg.lbl.ttip.Angle = .زاوية قضيب الإطلاق من الوضع الرأسي
.تشير الزوايا الإيجابية إلى شمال الإطلاق +simedtdlg.lbl.Direction = :الإتجاه +simedtdlg.lbl.ttip.Direction1 = .إتجاه قضيب الإطلاق بالنسبة إلى الريح
+simedtdlg.lbl.ttip.Direction2 = - +simedtdlg.lbl.ttip.Direction3 = صفر هو الشمال +simedtdlg.border.Simopt = خيارات المحاكاة +simedtdlg.lbl.Calcmethod = :طريقة حساب +simedtdlg.lbl.ttip.Calcmethod = تحسب طريقة بارومان الموسعة القوى الديناميكية الهوائية وفقًا
لمعادلات بارومان الممتدة لإستيعاب المزيد من المكونات +simedtdlg.lbl.ExtBarrowman = طريقة بارومان الموسعة +simedtdlg.lbl.Simmethod = :طريقة المحاكاة +simedtdlg.lbl.ttip.Simmethod1 = .تسمح محاكاة ست درجات من الحرية للصاروخ بالحرية الكاملة أثناء الطيران
+simedtdlg.lbl.ttip.Simmethod2 = يتم تنفيذ التكامل بإستخدام تكامل عددي من الدرجة الرابعة لرونج-كوتا +simedtdlg.lbl.GeodeticMethod = :الحسابات الجيوديسية +simedtdlg.lbl.ttip.GeodeticMethodTip = .تتعلق بحساب الإحداثيات على الأرض. هذا أيضا يتيح حسابات تأثير كوريوليس +simedtdlg.lbl.Timestep = :خطوة زمنية +simedtdlg.lbl.ttip.Timestep1 = .الوقت بين خطوات المحاكاة
.تؤدي الخطوة الزمنية الأصغر إلى محاكاة أكثر دقة ولكن أبطأ
+simedtdlg.lbl.ttip.Timestep2 = طريقة المحاكاة من الدرجة الرابعة دقيقة تمامًا مع خطوة زمنية من +simedtdlg.but.ttip.resettodefault = ) إعادة تعيين الخطوة الزمنية إلى قيمتها الإفتراضية +simedtdlg.border.SimExt = إمتدادات المحاكاة +simedtdlg.SimExt.desc = إمتدادات المحاكاة .تمكين الميزات المتقدمة والوظائف المخصصة أثناء محاكاة الطيران. يمكنك على سبيل المثال إجراء إختبار الأجهزة في الحلقة معهم +simedtdlg.SimExt.noExtensions = لم يتم تعريف ملحقات المحاكاة +simedtdlg.SimExt.add = إضافة ملحق +simedtdlg.SimExt.copyExtension = نسخ الملحق +simedtdlg.lbl.Noflightdata = .لا توجد بيانات طيران متاحة +simedtdlg.lbl.runsimfirst = .الرجاء تشغيل المحاكاة أولاً +simedtdlg.chart.Simflight = طيران محاكى +simedtdlg.dlg.Simres = نتائج المحاكاة +simedtdlg.IntensityDesc.None = لا شئ +simedtdlg.IntensityDesc.Verylow = متدني جدا +simedtdlg.IntensityDesc.Low = متدني +simedtdlg.IntensityDesc.Medium = متوسط +simedtdlg.IntensityDesc.High = عالي +simedtdlg.IntensityDesc.Veryhigh = عالي جدا +simedtdlg.IntensityDesc.Extreme = شديد العلو + +SimulationExtension.airstart.name.alt = ({alt}) بدء الهواء +SimulationExtension.airstart.name.altvel = ({alt}, {vel}) بدء الهواء +SimulationExtension.javacode.name = كود جافا +SimulationExtension.javacode.name.none = لا شئ +SimulationExtension.javacode.desc = أضف مستمع محاكاة مخصصًا إلى المحاكاة +SimulationExtension.javacode.className = :إسم فئة جافا مؤهل بالكامل +SimulationExtension.javacode.classnotfound = لا يمكن العثور على فئة +SimulationExtension.javacode.couldnotinstantiate = .%s تعذر إنشاء فئة
هل يحتوي على وسيطة صفرية أم مُنشئ حقن؟ + +SimulationExtension.scripting.name = {language} نصي +SimulationExtension.scripting.desc = .قم بتوسيع محاكاة أوبنركت بواسطة البرامج النصية المخصصة +SimulationExtension.scripting.language.label = :اللغة +SimulationExtension.scripting.warning.disabled =.تم تعطيل البرامج النصية غير الموثوق بها. تحتاج إلى تمكينها يدويًا في خيارات المحاكاة +SimulationExtension.scripting.text.enabled = تمكين البرنامج النصي +SimulationExtension.scripting.text.enabled.ttip = .يتم تشغيل البرنامج النصي فقط عند التمكين +SimulationExtension.scripting.text.trusted = ثق بهذا البرنامج النصي على هذا الكمبيوتر +SimulationExtension.scripting.text.trusted.msg = يتم تعطيل البرامج النصية غير الموثوق بها عند تحميل المستند +SimulationExtension.scripting.text.trusted.clear = مسح البرامج النصية الموثوقة +SimulationExtension.scripting.text.trusted.clear.ttip = إمسح حالة موثوق لكافة البرامج النصية الموجودة على هذا الكمبيوتر +SimulationExtension.scripting.text.trusted.cleared = .جميع البرامج النصية الآن غير موثوق بها على هذا الكمبيوتر +SimulationExtension.scripting.text.trusted.cleared.title = تم الإخلاء + +SimulationEditDialog.btn.plot = الرسم البياني +SimulationEditDialog.btn.export = تصدير +SimulationEditDialog.btn.edit = تعديل +SimulationEditDialog.btn.simulate = محاكاة +SimulationEditDialog.btn.simulateAndPlot = محاكاة وإضهار الرسم البياني + +GeodeticComputationStrategy.flat.name = أرض مسطحة +GeodeticComputationStrategy.flat.desc = .قم بإجراء عمليات حسابية بتقريب للأرض المسطحة. كافية للرحلات على إرتفاعات منخفضة +GeodeticComputationStrategy.spherical.name = تقريب كروي +GeodeticComputationStrategy.spherical.desc = .قم بإجراء حسابات جيوديسية بإفتراض وجود أرض كروية
.هذا دقيق بما فيه الكفاية لجميع الأغراض تقريبًا +GeodeticComputationStrategy.wgs84.name = بيضاوي WGS84 +GeodeticComputationStrategy.wgs84.desc = .WGS84 قم بإجراء حسابات جيوديسية على الشكل الإهليلجي المرجعي بإستخدام طريقة فنسنتي
Slower and unnecessary in most cases. + + + + +! Simulation Panel +simpanel.but.newsimulation = محاكاة جديدة +simpanel.but.editsimulation = تعديل المحاكاة +simpanel.but.runsimulations = تشغيل المحاكياة +simpanel.but.deletesimulations = حذف المحاكياة +simpanel.but.plotexport = رسم بياني/تصدير +simpanel.but.ttip.newsimulation = أضف محاكاة جديدة +simpanel.but.ttip.editsim = قم بتعديل المحاكاة المختارة +simpanel.but.ttip.runsimu = أعد تشغيل عمليات المحاكاة المحددة +simpanel.but.ttip.deletesim = إحذف عمليات المحاكاة المحددة +simpanel.pop.edit = تعديل +simpanel.pop.plot = رسم بياني/تصدير +simpanel.pop.run = تشغيل +simpanel.pop.delete = إحذف +simpanel.pop.duplicate = كرر +simpanel.checkbox.donotask = لا تسألني مجددا +simpanel.lbl.defpref = .يمكنك تغيير العملية الإفتراضية في التفضيلات +simpanel.dlg.lbl.DeleteSim1 = حذف المحاكاة المختارة؟ +simpanel.dlg.lbl.DeleteSim2 = .هذه العملية لا يمكن التراجع عنها +simpanel.dlg.lbl.DeleteSim3 = إحذف المحاكيات +simpanel.col.Name = الإسم +simpanel.col.Motors = المحركات +simpanel.col.Configuration = الإعداد +simpanel.col.Velocityoffrod = السرعة خارج القضيب +simpanel.col.Velocityatdeploy = السرعة عند النشر +simpanel.col.OptimumCoastTime = التأخير الأمثل +simpanel.col.OptimumCoastTime.ttip = .الوقت بين آخر إحتراق للمحرك وأقصى إرتفاع ممكن +simpanel.col.Apogee = الأوج +simpanel.col.Maxvelocity = السرعة القصوى +simpanel.col.Maxacceleration = أقصى تسارع +simpanel.col.Timetoapogee = الوقت اللازم للوصول للأوج +simpanel.col.Flighttime = وقت الطيران +simpanel.col.Groundhitvelocity = سرعة الإصطدام بالأرض +simpanel.ttip.uptodate = مُحدَّث +simpanel.ttip.outdated = غير مُحدَّث
أنقر قم بتشغيل عمليات المحاكاة .للمحاكاة +simpanel.ttip.external = البيانات المستوردة +simpanel.ttip.notSimulated = لم تتم محاكاته بعد
أنقر قم بتشغيل عمليات المحاكاة .للمحاكاة +simpanel.ttip.noData = .لا توجد بيانات محاكاة متاحة +simpanel.ttip.noWarnings = .لا تحذيرات +simpanel.ttip.warnings = :تحذيرات + +! SimulationRunDialog +SimuRunDlg.title.RunSim = \u2026 تشغيل المحاكاة +SimuRunDlg.lbl.Running = \u2026 تشغيل +SimuRunDlg.lbl.Simutime = :وقت المحاكاة +SimuRunDlg.lbl.Altitude = :الإرتفاع +SimuRunDlg.lbl.Velocity = :السرعة الإتجاهية +SimuRunDlg.msg.Unabletosim = :غير قادر على المحاكاة +SimuRunDlg.msg.errorOccurred = :حدث خطأ أثناء المحاكاة + +BasicEventSimulationEngine.error.noMotorsDefined = .لا توجد محركات محددة في المحاكاة +BasicEventSimulationEngine.error.earlyMotorBurnout = .نضوب المحرك دون الإقلاع +BasicEventSimulationEngine.error.noConfiguredIgnition = لا توجد محركات مهيأة للإشتعال عند الإقلاع +BasicEventSimulationEngine.error.noIgnition = .لا تشتعل المحركات +BasicEventSimulationEngine.error.NaNResult = .لم ينتج عن المحاكاة قيمة رقمية ، يرجى الإبلاغ عن خطأ + + +RK4SimulationStepper.error.valuesTooLarge = .قيم المحاكاة تجاوزت الحدود. حاول تحديد خطوة زمنية أقصر + +SimulationModifierTree.OptimizationParameters = معايير التحسين + +! SimulationExportPanel +SimExpPan.border.Vartoexport = متغيرات للتصدير +SimExpPan.border.Stage = مرحلة التصدير +SimExpPan.but.Selectall = حدد الكل +SimExpPan.but.Selectnone = لا تختر شيء +SimExpPan.border.FormatSettings = إعدادات التنسيق +SimExpPan.lbl.Fieldsepstr = :سلسلة فاصل المجال +SimExpPan.lbl.longA1 = .السلسلة المستخدمة لفصل الحقول في الملف المصدر
+SimExpPan.lbl.longA2 = قيم مفصولة بفواصل (CSV) استخدم لملف +SimExpPan.lbl.DecimalPlaces = :منازل عشرية +SimExpPan.lbl.DecimalPlaces.ttip = .عدد المنازل العشرية التي سيتم إستخدامها للمتغيرات في الملف المصدر +SimExpPan.lbl.ExponentialNotation = إستخدم التدوين الأسي +SimExpPan.lbl.ExponentialNotation.ttip = .(على سبيل المثال 0.00015) أم لا (1.5e-4 مثل) ما إذا كان سيتم استخدام التدوين الأسي للمتغيرات +SimExpPan.checkbox.Includesimudesc = تضمين وصف المحاكاة +SimExpPan.checkbox.ttip.Includesimudesc = .قم بتضمين تعليق في بداية الملف يصف المحاكاة +SimExpPan.border.Comments = تعليقات +SimExpPan.checkbox.Includefielddesc = قم بتضمين أوصاف الحقول +SimExpPan.checkbox.ttip.Includefielddesc = .قم بتضمين سطر تعليق مع أوصاف المتغيرات المصدرة +SimExpPan.checkbox.Incflightevents = تضمين أحداث الطيران +SimExpPan.checkbox.ttip.Incflightevents = .قم بتضمين سطر تعليق لكل حدث طيران +SimExpPan.lbl.Commentchar = :حرف التعليق +SimExpPan.lbl.ttip.Commentchar = .الذي يميز سطر التعليق (الأحرف) الحرف +SimExpPan.Fileexists.desc1 = \" الملف +SimExpPan.Fileexists.desc2 = \" موجود. هل تريد الكتابة فوقه؟ +SimExpPan.Fileexists.title = الملف موجود +SimExpPan.ExportingVar.desc1 = تصدير متغير واحد من +SimExpPan.ExportingVar.desc2 = تصدير +SimExpPan.ExportingVar.desc3 = المتغيرات من أصل +SimExpPan.Col.Variable = متغيرات +SimExpPan.Col.Unit = وحدة + + +CsvOptionPanel.separator.space = مفتاح المساحة +CsvOptionPanel.separator.tab = مفتاح الجدولة + + +! Custom expression general stuff +customExpression.Name = الإسم +customExpression.Symbol = رمز +customExpression.Expression = تعبير +customExpression.Units = الوحدات +customExpression.Operator = المشغل +customExpression.Description = وصف + +! Custom expression panel +customExpressionPanel.but.NewExpression = تعبير جديد +customExpressionPanel.but.ttip.NewExpression = أضف تعبيرًا مخصصًا جديدًا +customExpressionPanel.but.Import = إستيراد +customExpressionPanel.but.ttip.Import = آخر .ork إستيراد التعبيرات المخصصة من ملف +customExpressionPanel.lbl.UpdateNote = .يجب تشغيل المحاكاة قبل أن تصبح البيانات متاحة للرسم البياني +customExpressionPanel.lbl.CalcNote = .سيتم حساب التعبيرات بالترتيب الموضح +customExpressionPanel.lbl.CustomExpressions = التعبيرات المخصصة +customExpression.Units.but.ttip.Delete = إحذف هذا التعبير +customExpression.Units.but.ttip.Edit = قم بتعديل هذا التعبير +customExpression.Units.but.ttip.MoveUp = حرك التعبير لأعلى في ترتيب الحساب +customExpression.Units.but.ttip.MoveDown = حرك التعبير لأسفل بترتيب الحساب + + +! Custom expression builder window +ExpressionBuilderDialog.title = منشئ التعبير +ExpressionBuilderDialog.InsertVariable = أدخل متغير +ExpressionBuilderDialog.InsertOperator = أدخل المشغل +ExpressionBuilderDialog.led.ttip.Name = يجب ألا يكون الإسم مستخدمًا بالفعل +ExpressionBuilderDialog.led.ttip.Symbol = يجب ألا يكون الرمز قد تم إستخدامه بالفعل +ExpressionBuilderDialog.led.ttip.Expression = يجب أن يستخدم التعبير الرموز والمشغلات المعروفة فقط +ExpressionBuilderDialog.CopyToOtherSimulations = إنسخ إلى عمليات محاكاة أخرى +ExpressionBuilderDialog.CopyToOtherSimulations.ttip = .قم بعمل نسخة من هذا التعبير في عمليات محاكاة أخرى في هذا المستند
.لن تقوم بالكتابة فوق أو تعديل أي تعبيرات موجودة في عمليات المحاكاة الأخرى + +! Custom expression variable selector +CustomVariableSelector.title = محدد المتغير + +! Custom operator selector +CustomOperatorSelector.title = محدد المشغل + +! Operators +Operator.plus = الجمع +Operator.minus = الطرح +Operator.star = الضرب +Operator.div = القسمة +Operator.mod = عامل قسمة مع باقي +Operator.pow = الأس +Operator.abs = القيمة المطلقة +Operator.ceil = (قيمة العدد الصحيح التالية)الحد الأعلى ل +Operator.floor = (قيمة العدد الصحيح السابق)الحد الأدنى ل +Operator.sqrt = الجذر التربيعي +Operator.cbrt = الجذر التكعيبي +Operator.exp = (e^x) تم رفع رقم أويلر إلى القيمة +Operator.ln = اللوغاريتم الطبيعي +Operator.sin = جيب الزاوية +Operator.cos = جيب التمام +Operator.tan = المماس +Operator.asin = قوس جيب الزاوية +Operator.acos = قوس جيب التمام +Operator.atan = قوس المماس +Operator.hsin = جيب الزاوية القطعي +Operator.hcos = جيب التمام القطعي +Operator.htan = المماس القطعي +Operator.log10 = لوغاريتم أساس عشرة +Operator.round = تقريب لأقرب قيمة عدد صحيح +Operator.random = رقم عشوائي بين الصفر والقيمة المعطاة +Operator.expm1 = الصغيرةx ولكنه أكثر دقة لـ ,exp (x) -1مماثل لـ +Operator.mean = المتوسط الحسابي لنطاق معين +Operator.min = الحد الأدنى للقيمة في نطاق معين +Operator.max = الحد الأقصى للقيمة في نطاق معين +Operator.var = تباين نطاق معين +Operator.stdev = الإنحراف المعياري لنطاق معين +Operator.rms = قيمة الجذر التربيعي لنطاق معين +Operator.lclip = (الإعداد الثاني)بحيث لا تقل عن قيمة معينة (الإعداد الأول)يقطع قيمة +Operator.uclip = (الإعداد الثاني)بحيث لا تزيد عن قيمة معينة (الإعداد الأول)يقطع قيمة +Operator.binf = (الإعداد الثالث) وحدود عليا (الإعداد الثاني)داخل حاوية ذات حدود سفلية (الإعداد الأول) يعطي جزء من القيم في نطاق معين +Operator.trapz = يدمج النطاق المحدد بإستخدام التكامل شبه المنحرف +Operator.tnear = (الإعداد الثاني) الأقرب لقيمة معينة (الإعداد الأول) إبحث عن الوقت المقابل للنقطة في النطاق +! MotorPlot +MotorPlot.title.Motorplot = الرسم البياني للمحرك +MotorPlot.but.Select = حدد +MotorPlot.Chart.Motorthrustcurve = منحنى الدفع الحركي للمحرك +MotorPlot.Chart.Time = الوقت/ث +MotorPlot.Chart.Thrust = الدفع/نيوتن +MotorPlot.txt.Designation = :تعيين +MotorPlot.txt.Manufacturer = :الصانع +MotorPlot.txt.Type = :نوع +MotorPlot.txt.Delays = :تأخيرات +MotorPlot.txt.Comment = \n :تعليق + +! Simulation plot panel +simplotpanel.title.Plotsim = رسم بياني / تصدير المحاكاة +simplotpanel.lbl.Presetplotconf = :إعدادات الرسم البياني المحددة مسبقا +simplotpanel.lbl.Xaxistype = :نوع المحور س +simplotpanel.lbl.Unit = :الوحدة +simplotpanel.lbl.Yaxistypes = :نوع المحور ي +simplotpanel.lbl.Flightevents = :أحداث الطيران +simplotpanel.but.All = الكل +simplotpanel.but.None = لا شئ +simplotpanel.but.NewYaxisplottype = نوع مخطط المحور ي الجديد +simplotpanel.lbl.Axis = :المحور +simplotpanel.but.ttip.Deletethisplot = إحذف هذا الرسم البياني +simplotpanel.Desc = .سيتم رسم البيانات بالترتيب الزمني حتى لو لم يكن نوع المحور س وقتًا +simplotpanel.OptionPane.lbl1 = .يسمح بحد أقصى 15 رسم بياني +simplotpanel.OptionPane.lbl2 = لا يمكن إضافة رسم بياني +simplotpanel.AUTO_NAME = تلقائي +simplotpanel.LEFT_NAME = يسار +simplotpanel.RIGHT_NAME = يمين +simplotpanel.CUSTOM = مخصص +SimulationPlotPanel.error.noPlotSelected = .الرجاء إضافة متغير واحد أو أكثر للرسم البياني على المحور ي +SimulationPlotPanel.error.noPlotSelected.title = لا شيء ليوضع على الرسم البياني + +! Component add buttons +compaddbuttons.AxialStage = مرحلة +compaddbuttons.Bodycompandfinsets = مكونات الجسم ومجموعات الزعانف +compaddbuttons.Nosecone = الأنف المخروطي +compaddbuttons.Bodytube = أنبوب الجسم +compaddbuttons.Transition = إنتقال +compaddbuttons.Trapezoidal = شبه منحرف +compaddbuttons.Elliptical = بيضاوي +compaddbuttons.Freeform = شكل حر +compaddbuttons.Tubefin = الزعانف الأنبوبية +compaddbuttons.Launchlug = عروة الإطلاق +compaddbuttons.RailButton = زر سكة الإطلاق +compaddbuttons.InnerComponent = المكونات الداخلية +compaddbuttons.Innertube = أنبوب داخلي +compaddbuttons.Coupler = مِقرَنَةُ الأنبوب +compaddbuttons.Centeringring = حلقة \n توسيط +compaddbuttons.Bulkhead = حاجز إنشائي +compaddbuttons.Engineblock = حاجز \n محرك +compaddbuttons.ComponentAssembly = مكونات التجميع +compaddbuttons.ParallelStage = المعززات +compaddbuttons.Pods = Pods +compaddbuttons.Parachute = المظلة +compaddbuttons.Streamer = Streamer +compaddbuttons.Shockcord = حبل الصدمة +compaddbuttons.MassComponent = المكون \n الكتلة +compaddbuttons.MassComponents = كتلة المكونات +compaddbuttons.Donotaskmeagain = لا تسألني مجددا +compaddbuttons.Selectcomppos = حدد موضع المكون +compaddbuttons.Selectstagepos = حدد موضع المرحلة +compaddbuttons.lbl.Youcanchange = .يمكنك تغيير العملية الإفتراضية في التفضيلات +compaddbuttons.lbl.insertcomp = أدخل المكون بعد المكون الحالي أو بإعتباره المكون الأخير؟ +compaddbuttons.lbl.insertstage = أدخل المرحلة بعد المرحلة الحالية أم كمرحلة أخيرة؟ +compaddbuttons.askPosition.Inserthere = أدرج هنا +compaddbuttons.askPosition.Addtotheend = إضف للنهاية +compaddbuttons.askPosition.Cancel = إلغاء + +! Component Analysis Dialog +componentanalysisdlg.componentanalysis = تحليل المكونات +componentanalysisdlg.lbl.winddir = إتجاه الريح +componentanalysisdlg.TitledBorder.warnings = :تحذيرات +componentanalysisdlg.ToggleBut.worst = أسوأ +componentanalysisdlg.lbl.angleofattack = :زاوية المواجهة +componentanalysisdlg.lbl.machnumber = :رقم ماخ +componentanalysisdlg.lbl.rollrate = :معدل الإلتفاف +componentanalysisdlg.lbl.activestages = :المراحل النشطة +componentanalysisdlg.lbl.motorconf = :إعدادات المحرك +componentanalysisdlg.TabStability.Col = إسم المكون +componentanalysisdlg.TabStability.Col.EachMass = كتلة المثيل +componentanalysisdlg.TabStability.Col.AllMass = الكتلة الكلية +componentanalysisdlg.TabStability.Col.CG = موقع مركز الجاذبية الكلي +componentanalysisdlg.TabStability.Col.CP = مركز الضغط +componentanalysisdlg.TabStability = الإستقرار +componentanalysisdlg.TabStability.ttip = معلومات الإستقرار +componentanalysisdlg.dragTableModel.Col.Component = مكون +componentanalysisdlg.dragTableModel.Col.Pressure = مركز الضغط +componentanalysisdlg.dragTableModel.Col.Base = معامل السحب الأساسي +componentanalysisdlg.dragTableModel.Col.friction = معامل مقاومة الإحتكاك +componentanalysisdlg.dragTableModel.Col.total = معامل السحب الكلي +componentanalysisdlg.dragTabchar = خصائص السحب +componentanalysisdlg.dragTabchar.ttip = خصائص السحب +componentanalysisdlg.rollTableModel.Col.component = المكون +componentanalysisdlg.rollTableModel.Col.rollforc = معامل تأثير الإلتفاف +componentanalysisdlg.rollTableModel.Col.rolldamp = معامل تخميد الإلتفاف +componentanalysisdlg.rollTableModel.Col.total = إجمالي معامل الإلتفاف +componentanalysisdlg.rollTableModel = ديناميات الإلتفاف +componentanalysisdlg.rollTableModel.ttip = ديناميات الإلتفاف +componentanalysisdlg.println.closingmethod = :طريقة الإغلاق تسمى +componentanalysisdlg.println.settingnam = عدم ضبط قيم الأرقام +componentanalysisdlg.lbl.reflenght = :طول مرجعي +componentanalysisdlg.lbl.refarea = :المنطقة المرجعية +!componentanalysisdlg.But.close = إغلاق +componentanalysisdlg.TabStability.Col.Component = المكون +componentanalysisdlg.TOTAL = الكلي +componentanalysisdlg.noWarnings = لا تحذيرات + +! Custom Material dialog +custmatdlg.title.Custommaterial = مادة مخصصة +custmatdlg.lbl.Materialname = :إسم المادة +custmatdlg.lbl.Materialtype = :نوع المادة +custmatdlg.lbl.Materialdensity = :كثافة المادة +custmatdlg.checkbox.Addmaterial = أضف مادة إلى قاعدة البيانات + + +! Ring Component Config +ringcompcfg.OuterRadius = نصف القطر الخارجي +ringcompcfg.Automatic = تلقائي +ringcompcfg.AutomaticOuter.ttip = .يطابق القطر الخارجي مع القطر الداخلي للمكون الأصلي +ringcompcfg.InnerRadius = نصف القطر الداخلي +ringcompcfg.AutomaticInner.ttip = .يطابق القطر الداخلي مع القطر الخارجي للأنبوب الداخلي الثانوي +ringcompcfg.Thickness = السماكة +ringcompcfg.Length = الطول +ringcompcfg.Positionrelativeto = :الموضع بالنسبة إلى +ringcompcfg.plus = زائد +ringcompcfg.PositionValue = قيمة الموقع +ringcompcfg.Radialdistance = :المسافة الشعاعية +ringcompcfg.Distancefrom = المسافة من خط الوسط في الصاروخ +ringcompcfg.Radialdirection = :الإتجاه الشعاعي +ringcompcfg.radialdirectionfrom = :الإتجاه الشعاعي من خط الوسط للصاروخ +ringcompcfg.but.Reset = إعادة ضبط +ringcompcfg.but.Resetcomponant = .يعيد تعيين المكون إلى خط الوسط للصاروخ +ringcompcfg.EngineBlock.desc = .كتلة المحرك تمنعه من التحرك للأمام في أنبوب الحامل للمحرك

.من أجل إضافة محرك ، قم بإنشاء أنبوب جسم أو أنبوب داخلي وقم بتمييزه على أنه حامل محرك في علامة تبويب المحرك +ringcompcfg.note.desc = .ملاحظة: الأنبوب الداخلي لن يؤثر على الديناميكا الهوائية للصاروخ حتى لو كان موجودًا خارج أنبوب الجسم + + +! Body Tube Config +BodyTubecfg.lbl.Bodytubelength = :الطول +BodyTubecfg.lbl.Outerdiameter = :القطر الخارجي +BodyTubecfg.lbl.Innerdiameter = :القطر الداخلي +BodyTubecfg.lbl.Wallthickness = :سماكة المادة +BodyTubecfg.tab.General = عام +BodyTubecfg.tab.Generalproperties = الخصائص العامة +BodyTubecfg.tab.Motor = المحرك +BodyTubecfg.tab.Motormountconf = إعدادات حامل المحرك +BodyTubecfg.checkbox.Automatic = تلقائي +BodyTubecfg.checkbox.ttip.Automatic = .يستخدم قطر المكون السابق / التالي +BodyTubecfg.checkbox.ttip.Automatic_noReferenceComponent = .لا يوجد مكون سابق / تالي لأخذ قطره +BodyTubecfg.checkbox.ttip.Automatic_alreadyAuto = .تم بالفعل تشغيل الإعداد التلقائي للمكون السابق / التالي +BodyTubecfg.checkbox.Filled = مملوء +BodyTubecfg.checkbox.Filled.ttip = .يغير أنبوب الجسم من أنبوب مجوف إلى قضيب صلب + +! FinSetConfig +FinSetConfig.tab.Fintabs = لسان الزعانف +FinSetConfig.tab.Through-the-wall = لسان الزعانف داخل الجسم +FinSetConfig.but.Converttofreeform = تحويل إلى شكل حر +FinSetConfig.but.Converttofreeform.ttip = قم بتحويل مجموعة الزعانف هذه إلى مجموعة زعانف حرة الشكل +FinSetConfig.Convertfinset = تحويل مجموعة الزعانف +FinSetConfig.but.Splitfins = زعانف مقسمة +FinSetConfig.but.Splitfins.ttip = .قم بتقسيم الزعنفة إلى زعانف منفصلة +FinSetConfig.but.AutoCalc = أحسب تلقائيا +FinSetConfig.but.AutoCalc.ttip = يحسب إرتفاع وطول ألسنة الزعانف بناءً على
.الأنبوب الداخلي ومكونات الحلقة المركزية للمكون الرئيسي للزعنفة +FinSetConfig.lbl.Through-the-wall = :لسان الزعانف داخل الجسم +FinSetConfig.lbl.Tablength = :طول لسان الزعنفة +FinSetConfig.ttip.Tablength = .طول لسان الزعنفة +FinSetConfig.lbl.Tabheight = :إرتفاع لسان الزعنفة +FinSetConfig.ttip.Tabheight = .الإرتفاع الممتد للسان الزعنفة +FinSetConfig.lbl.Tabposition = :موضع اللسان +FinSetConfig.ttip.Tabposition = :موضع لسان الزعنفة +FinSetConfig.lbl.relativeto = نسبة إلى + +!FinMarkingGuide +FinMarkingGuide.lbl.Front = أمامي + +! MotorDatabaseLoaderDialog +MotorDbLoaderDlg.title = خطأ عند إستيراد منحنى الدفع +MotorDbLoaderDlg.message1 = .سيتم تجاهله أثناء الإستيراد ''{0}'' منحنى الدفع +MotorDbLoaderDlg.message2 = .يمكنك محاولة استبدال ملف منحنى الدفع أو حذفه أو تعديله يدويًا لإصلاح هذه المشكلة + +! MotorDatabaseLoadingDialog +MotorDbLoadDlg.title = تحميل المحركات +MotorDbLoadDlg.Loadingmotors = \u2026 تحميل المحركات + +! AppearanceConfig +AppearanceCfg.lbl.Appearance = مظهر +AppearanceCfg.lbl.Usedefault = إستخدم الإفتراضي +AppearanceCfg.but.edit = تعديل +AppearanceCfg.but.savedefault = حفظ كمظهر إفتراضي +AppearanceCfg.lbl.Texture = :نَسِيج +AppearanceCfg.lbl.shine = :يلمع +AppearanceCfg.lbl.opacity = :العتامة +AppearanceCfg.lbl.color.Color = :اللون +AppearanceCfg.lbl.color.diffuse = :لون منتشر +AppearanceCfg.lbl.color.ambient = :اللون المحيط +AppearanceCfg.lbl.color.specular = :لون براق +AppearanceCfg.lbl.texture.scale = :مقياس +AppearanceCfg.lbl.texture.offset = :عوض +AppearanceCfg.lbl.texture.center = :المركز +AppearanceCfg.lbl.texture.rotation = :الإلتفاف +AppearanceCfg.lbl.texture.repeat = :إعادة +AppearanceCfg.lbl.separateInsideOutside = إستخدم مظهر منفصل للخارج والداخل +AppearanceCfg.lbl.separateLeftSideRightSide = إستخدم مظهر منفصل للجانبين الأيسر والأيمن +AppearanceCfg.lbl.ttip.separateInsideOutside = إستخدم مظهر منفصل للخارج والداخل +AppearanceCfg.lbl.ttip.separateLeftSideRightSide = إستخدم مظهر منفصل للجانبين الأيسر والأيمن +AppearanceCfg.lbl.AppearanceEdges = :مظهر الحواف +AppearanceCfg.lbl.ttip.AppearanceEdges = حدد المظهر الذي يجب إستخدامه للحواف + +! Texture Wrap Modes +TextureWrap.Repeat = إعادة +TextureWrap.Mirror = كرر وأسقط بطريقة المرآة +TextureWrap.Clamp = تحسين لون وجودة حدود البكسل +TextureWrap.Sticker = ملصق + +! RocketConfig +RocketCfg.lbl.Designname = :إسم التصميم +RocketCfg.lbl.Designer = :مصمم +RocketCfg.lbl.Comments = :تعليقات +RocketCfg.lbl.Revisionhistory = :مراجعة التاريخ +RocketCfg.lbl.Material = :المادة + +! RocketComponentConfig +RocketCompCfg.lbl.Componentname = :إسم المكون +RocketCompCfg.lbl.Componentname.ttip = إسم المكون +RocketCompCfg.tab.Override = تجاوز +RocketCompCfg.tab.Override.ttip = .تجاوز الخصائص المحسوبة تلقائيًا +RocketCompCfg.tab.Assembly = عام +RocketCompCfg.tab.AssemblyComment = خيارات لتحديد موضع المراحل الموازية للمراحل الأخرى +RocketCompCfg.tab.Figure = شكل +RocketCompCfg.tab.Figstyleopt = خيارات نمط الشكل +RocketCompCfg.tab.Comment = تعليق +RocketCompCfg.tab.Comment.ttip = حدد تعليقًا للمكون +RocketCompCfg.tab.Appearance = مظهر +RocketCompCfg.tab.Appearance.ttip = مظهر المكون +RocketCompCfg.lbl.Mass = :الكتلة +RocketCompCfg.lbl.Componentmass = :كتلة المكون +RocketCompCfg.lbl.overriddento = (تم تجاوزها إلى +RocketCompCfg.lbl.overriddenby = (تجاوزها بواسطة +RocketCompCfg.lbl.Componentmaterial = :مادة المكون +RocketCompCfg.lbl.Componentfinish = :نهاية المكون +RocketCompCfg.lbl.ttip.componentmaterialaffects = .تؤثر المادة المكونة على وزن المكون +RocketCompCfg.combo.ttip.componentmaterialaffects = .تؤثر مادة المكون على وزنه +RocketCompCfg.lbl.longA1 = .يؤثر إنهاء المكون على السحب الديناميكي الهوائي للمكون
+RocketCompCfg.lbl.longA2 = .القيمة المشار إليها هي متوسط إرتفاع خشونة السطح +RocketCompCfg.but.Setforall = تعيين للجميع +RocketCompCfg.but.ttip.Setforall = .إضبط هذه النهاية لجميع مكونات الصاروخ +RocketCompCfg.checkbox.Overridemass = :تجاوز الكتلة +RocketCompCfg.checkbox.Overridemass.ttip = .يتجاوز كتلة المكون المحسوبة من خلال حجم المكون وكثافته +RocketCompCfg.checkbox.Overridecenterofgrav = :تجاوز مركز الجاذبية +RocketCompCfg.checkbox.Overridecenterofgrav.ttip = .يتجاوز موقع مركز الجاذبية للمكون +RocketCompCfg.checkbox.SetDragCoeff = :تجاوز معامل السحب +RocketCompCfg.checkbox.SetDragCoeff.ttip = .يتجاوز معامل السحب للمكون +RocketCompCfg.checkbox.OverrideSubcomponents = تجاوز لجميع المكونات الفرعية +RocketCompCfg.checkbox.OverrideSubcomponents.Mass.ttip = يتجاوز الكتلة الإجمالية لهذا المكون
.ومكوناته الفرعية مع كتلة هذا المكون +RocketCompCfg.checkbox.OverrideSubcomponents.CG.ttip = يتجاوز مركز الجاذبية هذا المكون
.ومكوناته الفرعية مع مركز الجاذبية لهذا المكون +RocketCompCfg.checkbox.OverrideSubcomponents.CD.ttip = يتجاوز معامل السحب لهذا المكون
.ومكوناته الفرعية مع معامل السحب لهذا المكون +RocketCompCfg.lbl.MassOverriddenBy = %s تم تجاوز الكتلة بمقدار +RocketCompCfg.lbl.CGOverriddenBy = %s تم تجاوز مركز الجاذبية بمقدار +RocketCompCfg.lbl.CDOverriddenBy = %s تم تجاوز معامل السحب بمقدار +RocketCompCfg.lbl.MassOverriddenBy.ttip = %s يتم تحديد كتلة هذا المكون من خلال قيمة تجاوز الكتلة +RocketCompCfg.lbl.CGOverriddenBy.ttip = %s يتم تحديد مركز الجاذبية لهذا المكون من خلال قيمة تجاوز مركز الجاذبية +RocketCompCfg.lbl.CDOverriddenBy.ttip = %s يتم تحديد مركز الجاذبية لهذا المكون من خلال قيمة تجاوز مركز الجاذبية +RocketCompCfg.lbl.longB1 = .لا تشتمل الكتلة ومركز الجاذبية المتجاوزين على المحركات
+RocketCompCfg.lbl.longB2 = يتم قياس مركز الجاذبية من الواجهة الأمامية لـ +RocketCompCfg.lbl.Commentsonthe = تعليقات على +RocketCompCfg.lbl.Figurestyle = :نمط الشكل +RocketCompCfg.lbl.Componentcolor = :لون المكون +RocketCompCfg.lbl.Choosecolor = إختر اللون +RocketCompCfg.checkbox.Usedefaultcolor = إستخدم اللون الإفتراضي +RocketCompCfg.lbl.Complinestyle = :نمط خط المكون +RocketCompCfg.but.Saveasdefstyle = حفظ كنمط إفتراضي +RocketCompCfg.lbl.Diameter = :القطر +RocketCompCfg.lbl.Length = :الطول +RocketCompCfg.lbl.Thickness = :السماكة +RocketCompCfg.checkbox.Endcapped = نهاية مغلقة +RocketCompCfg.checkbox.Endcapped.ttip = .يغلق نهاية الكتف +RocketCompCfg.title.Noseconeshoulder = كتف أنف الصاروخ +RocketCompCfg.title.Aftshoulder = مؤخرة الكتف +RocketCompCfg.border.Foreshoulder = مقدمة الكتف +!RocketCompCfg.lbl.Length = :الطول +RocketCompCfg.lbl.InstanceCount = عدد المثيل +RocketCompCfg.lbl.InstanceSeparation = فصل المثيل +RocketCompCfg.tab.Outside = من الخارج +RocketCompCfg.tab.Inside = من الداخل +RocketCompCfg.tab.RightSide = الجانب اليميني +RocketCompCfg.tab.LeftSide = الجانب اليساري + +! BulkheadConfig +BulkheadCfg.tab.Diameter = :القطر +BulkheadCfg.tab.Thickness = :السماكة +BulkheadCfg.tab.General = عام +BulkheadCfg.tab.Generalproperties = الخصائص العامة + +!CenteringRingConfig +CenteringRingCfg.tab.Outerdiam = :القطرالخارجي +CenteringRingCfg.tab.Innerdiam = :القطر الداخلي +CenteringRingCfg.tab.Thickness = :السماكة +CenteringRingCfg.tab.General = عام +CenteringRingCfg.tab.Generalproperties = الخصائص العامة + +!ComponentConfigDialog +ComponentCfgDlg.configuration = خصائص +ComponentCfgDlg.MultiComponent = متعدد المكونات +ComponentCfgDlg.MultiComponentConfig = خصائص متعدد المكونات +ComponentCfgDlg.MultiComponentEdit = تعديل متعدد المكونات +ComponentCfgDlg.MultiComponentEdit.ttip = :أنت تقوم بتعديل المكونات التالية
+ComponentCfgDlg.Modify = تعديل +ComponentCfgDlg.ModifyComponents = تعديل المكونات + +!StageConfig +StageConfig.tab.Separation = فصل +StageConfig.tab.Separation.ttip = خيارات فصل المرحلة +StageConfig.separation.lbl.title = :حدد متى تنفصل هذه المرحلة +StageConfig.separation.lbl.plus = زائد +StageConfig.separation.lbl.seconds = ثواني +StageConfig.parallel.radius = :المسافة الشعاعية +StageConfig.parallel.angle = :الزاوية +StageConfig.parallel.count = :عدد النسخ +StageConfig.parallel.plus = زائد + +!EllipticalFinSetConfig +EllipticalFinSetCfg.Nbroffins = :عدد الزعانف +EllipticalFinSetCfg.Rotation = :الإلتفاف +EllipticalFinSetCfg.Fincant = :ميلان الزعنفة +EllipticalFinSetCfg.Rootchord = :حافة جذر الزعنفة +EllipticalFinSetCfg.Height = :الطول +EllipticalFinSetCfg.Positionrelativeto = :الموضع بالنسبة إلى +EllipticalFinSetCfg.plus = زائد +EllipticalFinSetCfg.FincrossSection = :المقطع العرضي للزعنفة +EllipticalFinSetCfg.Thickness = :السماكة +EllipticalFinSetCfg.General = عام +EllipticalFinSetCfg.Generalproperties = الخصائص العامة +EllipticalFinSetCfg.ttip.Fincant = .الزاوية التي تكون فيها الزعانف مائلة بالنسبة لجسم الصاروخ + +!FreeformFinSetConfig +FreeformFinSetCfg.tab.General = عام +FreeformFinSetCfg.tab.ttip.General = الخصائص العامة +FreeformFinSetCfg.tab.Shape = الشكل +FreeformFinSetCfg.tab.ttip.Finshape = شكل الزعنفة +FreeformFinSetCfg.lbl.Numberoffins = :عدد الزعانف +FreeformFinSetCfg.lbl.Finrotation = :إلتفاف الزعنفة +FreeformFinSetCfg.lbl.Fincant = :ميلان الزعنفة +FreeformFinSetCfg.lbl.ttip.Fincant = .الزاوية التي تكون فيها الزعانف مائلة بالنسبة لجسم الصاروخ +FreeformFinSetCfg.lbl.Posrelativeto = :الموقع بالنسبة إلى +FreeformFinSetCfg.lbl.plus = plus +FreeformFinSetCfg.lbl.FincrossSection = :المقطع العرضي للزعنفة +FreeformFinSetCfg.lbl.Thickness = :السماكة +! doubleClick1 + 2 form the message "Double-click to edit", split approximately at the middle +FreeformFinSetConfig.lbl.doubleClick1 = نقرتين +FreeformFinSetConfig.lbl.doubleClick2 = للتعديل +FreeformFinSetConfig.lbl.clickDrag = أنقر وإسحب: لإضافة وتحريك نقاط +FreeformFinSetConfig.lbl.ctrlClick = مفتاح التحكم مع النقر: لحذف نقطة +FreeformFinSetConfig.lbl.scaleFin = حَجِّمْ الزعنفة +FreeformFinSetConfig.lbl.exportCSV = CSV تصدير +FreeformFinSetConfig.lbl.deletePoint = إحذف نقطة +FreeformFinSetConfig.lbl.insertPoint = أضف نقطة + +!TubeFinSetConfig +TubeFinSetCfg.lbl.Nbroffins = :عدد الزعانف +TubeFinSetCfg.lbl.Length = :الطول +TubeFinSetCfg.lbl.Outerdiam = :القطر الخارجي +TubeFinSetCfg.checkbox.Automatic = تلقائي +TubeFinSetCfg.lbl.Innerdiam = :القطر الداخلي +TubeFinSetCfg.lbl.Thickness = السماكة +TubeFinSetCfg.lbl.Finrotation = إلتفاف الزعنفة +TubeFinSetCfg.lbl.ttip.Finrotation = .زاوية الزعنفة الأولى في مجموعة الزعانف + +!InnerTubeConfig +InnerTubeCfg.tab.Motor = محرك +InnerTubeCfg.tab.ttip.Motor = خصائص حامل المحرك +InnerTubeCfg.tab.Cluster = عنقود +InnerTubeCfg.tab.ttip.Cluster = خصائص العنقود +InnerTubeCfg.tab.Radialpos = الموضع الشعاعي +InnerTubeCfg.tab.ttip.Radialpos = الموضع الشعاعي +InnerTubeCfg.lbl.Selectclustercfg = :حدد خصائص العنقود +InnerTubeCfg.lbl.TubeSep = :فصل الأنبوب +InnerTubeCfg.lbl.ttip.TubeSep = فصل الأنابيب, 1.0 تساوي تلامس بعضها البعض +InnerTubeCfg.lbl.Rotation = :الإلتفاف +InnerTubeCfg.lbl.ttip.Rotation = زاوية الإلتفاف لخصائص العنقود +InnerTubeCfg.lbl.Rotangle = زاوية الإلتفاف لخصائص العنقود +InnerTubeCfg.but.Splitcluster = تقسيم العنقود +InnerTubeCfg.lbl.longA1 = تقسيم العنقود إلى مكونات منفصلة
+InnerTubeCfg.lbl.longA2 = .يؤدي هذا أيضًا إلى تكرار جميع المكونات المتصلة بهذا الأنبوب الداخلي +InnerTubeCfg.but.Resetsettings = إعادة الضبط +InnerTubeCfg.but.ttip.Resetsettings = أعد تعيين الفصل والإلتفاف إلى القيم الإفتراضية + +! LaunchLugConfig +LaunchLugCfg.lbl.Length = :الطول +LaunchLugCfg.lbl.Outerdiam = :القطر الخارجي +LaunchLugCfg.lbl.Innerdiam = :القطر الداخلي +LaunchLugCfg.lbl.Thickness = السماكة +LaunchLugCfg.lbl.Angle = :الإلتفاف +LaunchLugCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى +LaunchLugCfg.lbl.plus = زائد +LaunchLugCfg.tab.General = عام +LaunchLugCfg.tab.Generalprop = الخصائص العامة + +! RailButtonConfig +RailBtnCfg.lbl.OuterDiam = :القطر الخارجي +RailBtnCfg.lbl.InnerDiam = :القطر الداخلي +RailBtnCfg.lbl.TotalHeight = :(بإستثناء البرغي) الإرتفاع الإجمالي +RailBtnCfg.lbl.BaseHeight = :إرتفاع القاعدة +RailBtnCfg.lbl.FlangeHeight = :إرتفاع الحافة +RailBtnCfg.lbl.ScrewHeight = :إرتفاع البرغي +RailBtnCfg.lbl.Angle = :الإلتفاف +RailBtnCfg.lbl.PosRelativeTo = :الموضع بالنسبة إلى +RailBtnCfg.lbl.Plus = زائد +RailBtnCfg.tab.General = عام +RailBtnCfg.tab.GeneralProp = الخصائص العامة + +! MassComponentConfig +MassComponentCfg.lbl.Attributes = صفات +MassComponentCfg.lbl.Placement = تحديد مستوى +MassComponentCfg.lbl.Mass = الكتلة +MassComponentCfg.lbl.Density = :الكثافة التقريبية +MassComponentCfg.lbl.Length = :الطول +MassComponentCfg.lbl.Diameter = :القطر +MassComponentCfg.lbl.PosRelativeto = :الموضع بالنسبة إلى +MassComponentCfg.lbl.plus = زائد +MassComponentCfg.tab.General = عام +MassComponentCfg.tab.ttip.General = الخصائص العامة +MassComponentCfg.tab.Radialpos = موضع شعاعي +MassComponentCfg.tab.ttip.Radialpos = خصائص الموضع الشعاعي +MassComponentCfg.lbl.Radialdistance = :المسافة الشعاعية +MassComponentCfg.lbl.Radialdirection = :الإتجاه الشعاعي +MassComponentCfg.but.Reset = إعادة ضبط +MassComponentCfg.lbl.type = :نوع الكتلة + +! MotorConfig +MotorCfg.checkbox.compmotormount = هذا المكون هو حامل المحرك +MotorCfg.lbl.Flightcfg = :خصائص الطيران +MotorCfg.but.New = جديد +MotorCfg.but.FlightcfgEdit = تعديل +MotorCfg.lbl.Currentmotor = :المحرك الحالي +MotorCfg.lbl.Motoroverhang = :عبء المحرك +MotorCfg.lbl.Ignitionat = :الإشتعال في +MotorCfg.lbl.plus = زائد +MotorCfg.lbl.seconds = ثواني +MotorCfg.lbl.longA1 = .التصميم الحالي له مرحلة واحدة فقط +MotorCfg.lbl.longA2 = \"مرحلة جديدة\" يمكن إضافة مراحل عن طريق النقر على +MotorCfg.lbl.longB1 = التصميم الحالي له +MotorCfg.lbl.longB2 = .المراحل +MotorCfg.but.Selectmotor = حدد محركا +MotorCfg.but.Deletemotor = إحذف محركا +MotorCfg.lbl.motorLabel = لا شئ + +! NoseConeConfig +NoseConeCfg.lbl.Noseconeshape = شكل الأنف المخروطي +NoseConeCfg.lbl.Shapeparam = :خصائص الشكل +NoseConeCfg.lbl.Noseconelength = :الطول +NoseConeCfg.lbl.Basediam = :قطر القاعدة +NoseConeCfg.checkbox.Automatic = تلقائي +NoseConeCfg.checkbox.ttip.Automatic = .يستخدم قطر المكون التالي +NoseConeCfg.checkbox.ttip.Automatic_noReferenceComponent = .لا يوجد مكون تالٍ لأخذ قطره +NoseConeCfg.checkbox.ttip.Automatic_alreadyAuto = .تم تشغيل الإعداد التلقائي للمكون التالي بالفعل +NoseConeCfg.lbl.Wallthickness = :سماكة المادة +NoseConeCfg.checkbox.Filled = مملوء +NoseConeCfg.checkbox.Filled.ttip = .إجعل هذا المكون صلبًا بدلاً من أجوف +NoseConeCfg.tab.General = عام +NoseConeCfg.tab.ttip.General = الخصائص العامة +NoseConeCfg.tab.Shoulder = الأكتاف +NoseConeCfg.tab.ttip.Shoulder = خصائص الأكتاف + +! ParachuteConfig +Parachute.Parachute = المظلة +ParachuteCfg.lbl.Canopy = القماش +ParachuteCfg.lbl.Shroudlines = خطوط التعليق عبارة عن حبال رفيعة تربط المظلة بالناهضات +ParachuteCfg.lbl.Placement = تحديد مستوى +ParachuteCfg.lbl.Deployment = النشر +ParachuteCfg.lbl.CanopyShape = :شكل القماش +ParachuteCfg.lbl.Diameter = :القطر +ParachuteCfg.lbl.SpillDia = :قطر فتحة الإنسكاب +ParachuteCfg.lbl.SurfaceArea = :مساحة السطح +ParachuteCfg.combo.MaterialModel = .تؤثر مادة المكون على وزنه +ParachuteCfg.lbl.longA1 = :معامل السحب +ParachuteCfg.lbl.longB1 = .معامل السحب بالنسبة إلى المساحة الإجمالية للمظلة
+ParachuteCfg.lbl.longB2 = .ينتج عن معامل السحب الأكبر معدل هبوط بطيء +ParachuteCfg.lbl.longB3 = .القيمة النموذجية للمظلات هي 0.8 +ParachuteCfg.lbl.Numberoflines = :عدد الخطوط +ParachuteCfg.lbl.Linelength = :طول الخط +ParachuteCfg.lbl.Material = :المادة +ParachuteCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى +ParachuteCfg.lbl.plus = زائد +ParachuteCfg.checkbox.AutomaticPacked = تلقائي +ParachuteCfg.checkbox.AutomaticPacked.ttip = .يطابق القطر المعبأ مع القطر الداخلي للمكون الأصلي +ParachuteCfg.lbl.Packedlength = :الطول المعبأ +ParachuteCfg.lbl.Packeddiam = :القطر المعبأ +ParachuteCfg.lbl.Deploysat = :ينشر في +ParachuteCfg.lbl.seconds = ثواني +ParachuteCfg.lbl.Altitude = :الإرتفاع +ParachuteCfg.tab.General = عام +ParachuteCfg.tab.ttip.General = خصائص عامة +ParachuteCfg.tab.Radialpos = موضع شعاعي +ParachuteCfg.tab.ttip.Radialpos = خصائص الموضع الشعاعي +ParachuteCfg.lbl.Radialdistance = :المسافة الشعاعية +ParachuteCfg.lbl.Radialdirection = :الإتجاه الشعاعي +ParachuteCfg.but.Reset = إعادة ضبط +ParachuteCfg.but.ResetCd.ttip = .%.2f يعيد تعيين معامل السحب إلى قيمة +ParachuteCfg.but.ResetRadial.ttip = .يعيد تعيين المكون إلى خط الوسط للصاروخ +ParachuteCfg.lbl.plusdelay = زائد + +! ShockCordConfig +ShockCordCfg.lbl.ShockcordAttributes = صفات +ShockCordCfg.lbl.ShockcordPlacement = تحديد مستوى +ShockCordCfg.lbl.Shockcordlength = :طول حبل الصدمة +ShockCordCfg.lbl.Shockcordmaterial = :المادة المكونة لحبل الصدمة +ShockCordCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى +ShockCordCfg.lbl.plus = زائد +ShockCordCfg.lbl.Packedlength = :الطول المعبأ +ShockCordCfg.lbl.Packeddiam = :القطر المعبأ +ShockCordCfg.tab.Radialpos = موضع شعاعي +ShockCordCfg.tab.ttip.Radialpos = خصائص الموضع الشعاعي +ShockCordCfg.lbl.Radialdistance = :المسافة الشعاعية +ShockCordCfg.lbl.Radialdirection = :الإتجاه الشعاعي +ShockCordCfg.but.Reset = إعادة ضبط +ShockCordCfg.tab.General = عام +ShockCordCfg.tab.ttip.General = خصائص عامة + +!SleeveConfig +SleeveCfg.tab.Outerdiam = :القطر الخارجي +SleeveCfg.tab.Innerdiam = :القطر الداخلي +SleeveCfg.tab.Wallthickness = :سماكة المادة +SleeveCfg.tab.Length = :الطول +SleeveCfg.tab.General = عام +SleeveCfg.tab.Generalproperties = خصائص عامة +! StreamerConfig +StreamerCfg.lbl.Attributes = صفات +StreamerCfg.lbl.Placement = تحديد مستوى +StreamerCfg.lbl.Deployment = النشر +StreamerCfg.lbl.Striplength = :طول الشريط +StreamerCfg.lbl.Stripwidth = :عرض الشريط +StreamerCfg.lbl.Striparea = :مساحة الشريط +StreamerCfg.lbl.Aspectratio = :نسبة الأبعاد +StreamerCfg.lbl.Material = :المادة +StreamerCfg.combo.ttip.MaterialModel = .تؤثر مادة المكون على وزنه +StreamerCfg.lbl.longA1 = :معامل السحب +StreamerCfg.lbl.longB1 = .معامل السحب بالنسبة إلى المساحة الإجمالية لجهاز الإرسال
+StreamerCfg.lbl.longB2 = .ينتج عن معامل السحب الأكبر معدل هبوط بطيء +StreamerCfg.lbl.AutomaticCd = تلقائي +StreamerCfg.lbl.AutomaticCd.ttip = .أحسب معامل السحب بإستخدام أبعاده +StreamerCfg.lbl.longC1 = .معامل السحب متناسب مع مساحة جهاز الإرسال +StreamerCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى +StreamerCfg.lbl.plus = زائد +StreamerCfg.lbl.Packedlength = :الطول المعبأ +StreamerCfg.lbl.Packeddiam = :القطر المعبأ +StreamerCfg.lbl.Deploysat = :ينشر في +StreamerCfg.lbl.seconds = ثواني +StreamerCfg.lbl.Altitude = الإرتفاع +StreamerCfg.tab.General = عام +StreamerCfg.tab.ttip.General = خصائص عامة +StreamerCfg.tab.Radialpos = الموضع الشعاعي +StreamerCfg.tab.ttip.Radialpos = خصائص الموضع الشعاعي +StreamerCfg.lbl.Radialdistance = :المسافة الشعاعية +StreamerCfg.lbl.Radialdirection = :الإتجاه الشعاعي +StreamerCfg.but.Reset = إعادة ضبط +StreamerCfg.lbl.plusdelay = زائد + +! ThicknessRingComponentConfig +ThicknessRingCompCfg.tab.Outerdiam = :القطر الخارجي +ThicknessRingCompCfg.tab.Innerdiam = :القطر الداخلي +ThicknessRingCompCfg.tab.Wallthickness = :سماكة المادة +ThicknessRingCompCfg.tab.Length = :الطول +ThicknessRingCompCfg.tab.General = عام +ThicknessRingCompCfg.tab.Generalprop = خصائص عامة + +! TransitionConfig +TransitionCfg.lbl.Transitionshape = :شكل الإنتقال +TransitionCfg.checkbox.Clipped = مقطوع +TransitionCfg.checkbox.Clipped.ttip = .يغير نقطة تماس نهاية الانتقال من دائرية إلى حادة +TransitionCfg.lbl.Shapeparam = :خصائص الشكل +TransitionCfg.lbl.Transitionlength = :الطول +TransitionCfg.lbl.Forediam = :القطر الأمامي +TransitionCfg.checkbox.Automatic = تلقائي +TransitionCfg.checkbox.ttip.Automatic = .يستخدم قطر المكون السابق / التالي +TransitionCfg.checkbox.ttip.Automatic_noReferenceComponent = .لا يوجد مكون سابق / تالي لأخذ قطره +TransitionCfg.checkbox.ttip.Automatic_alreadyAuto = .تم بالفعل تشغيل الإعداد التلقائي للمكون السابق / التالي +TransitionCfg.lbl.Aftdiam = :القطر الخلفي +TransitionCfg.lbl.Wallthickness = :سماكة المادة +TransitionCfg.checkbox.Filled = مملوء +TransitionCfg.checkbox.Filled.ttip = .يجعل هذا المكون صلبًا بدلاً من أجوف +TransitionCfg.tab.General = عام +TransitionCfg.tab.Generalproperties = خصائص عامة +TransitionCfg.tab.Shoulder = الأكتاف +TransitionCfg.tab.Shoulderproperties = خصائص الأكتاف + +! TrapezoidFinSetConfig +TrapezoidFinSetCfg.lbl.Nbroffins = :عدد الزعانف +TrapezoidFinSetCfg.lbl.ttip.Nbroffins = .عدد الزعانف في مجموعة الزعانف +TrapezoidFinSetCfg.lbl.Finrotation = :إلتفاف الزعنفة +TrapezoidFinSetCfg.lbl.ttip.Finrotation = .زاوية الزعنفة الأولى في مجموعة الزعانف +TrapezoidFinSetCfg.lbl.Fincant = ميل الزعنفة +TrapezoidFinSetCfg.lbl.ttip.Fincant = .الزاوية التي تكون فيها الزعانف مائلة بالنسبة لجسم الصاروخ +TrapezoidFinSetCfg.lbl.Rootchord = :وتر جذر الزعنفة +TrapezoidFinSetCfg.lbl.Tipchord = :وتر طرف الزعنفة +TrapezoidFinSetCfg.lbl.Height = :الإرتفاع +TrapezoidFinSetCfg.lbl.Sweeplength = :طول الوتر الأمامي للزعنفة +TrapezoidFinSetCfg.lbl.Sweepangle = :زاوية الوتر الأمامي للزعنفة +TrapezoidFinSetCfg.lbl.FincrossSection = :المقطع العرضي للزعنفة +TrapezoidFinSetCfg.lbl.Thickness = :السماكة +TrapezoidFinSetCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى +TrapezoidFinSetCfg.lbl.plus = زائد +TrapezoidFinSetCfg.tab.General = عام +TrapezoidFinSetCfg.tab.Generalproperties = خصائص عامة + +! Fin Fillets +FinSetCfg.lbl.Finfilletmaterial = :مادة الشريحة +FinSetCfg.lbl.Filletradius = :نصف قطر الشريحة +FinsetCfg.ttip.Finfillets1 = .يضيف الكتلة المتوقعة لشرائح الزعانف إلى جذر الزعانف
+FinsetCfg.ttip.Finfillets2 = .يفترض أن الشرائح مقعرة وماسة لأنبوب الجسم والزعنفة
+FinsetCfg.ttip.Finfillets3 = .لن يعطي نصف القطر الصفري أي شرائح + +! Save RKT Warning Dialog +SaveRktWarningDialog.txt1= .لا يدعم التصدير إلى تنسيق ملف روكسيم جميع ميزات أوبنروكت +SaveRktWarningDialog.donotshow= لا تعرض هذا الحوار من جديد + +saveAs.openrocket.title = .ork حفظ كملف أوبنروكت +saveAs.rocksim.title = .rkt تصدير كملف روكسيم + +! StorageOptionChooser +StorageOptChooser.lbl.Simdatatostore = :بيانات مُحاكاة للتخزين +StorageOptChooser.rdbut.Allsimdata = جميع البيانات المحاكاة +StorageOptChooser.lbl.longA1 = .تخزين جميع البيانات المحاكاة
+StorageOptChooser.lbl.longA2 = !يمكن أن ينتج عن ذلك ملفات كبيرة جدًا +StorageOptChooser.rdbut.Every = كل +StorageOptChooser.lbl.longB1 = .قم بتخزين القيم القابلة للرسم على مخطط بياني على مسافة متباعدة تقريبًا
+StorageOptChooser.lbl.longB2 = .القيم الأكبر ينتج عنها ملفات أصغر +StorageOptChooser.lbl.seconds = ثواني +StorageOptChooser.rdbut.Onlyprimfig = المحاكاة الأولية فقط +StorageOptChooser.lbl.longC1 = .قم بتخزين القيم المعروضة في جدول الملخص فقط
+StorageOptChooser.lbl.longC2 = .ينتج عن هذا أصغر الملفات +StorageOptChooser.lbl.longD1 = .تقدير لمدى حجم الملف الناتج مع الخيارات الحالية +StorageOptChooser.lbl.info1 = أكبر حجم للملف +StorageOptChooser.lbl.info2 = حجم ملف أصغر +StorageOptChooser.lbl.info3 = حجم ملف صغير جدا +StorageOptChooser.ttip.Saveopt = حفظ الخيارات +StorageOptChooser.lbl.Saveopt = حفظ الخيارات + +! ThrustCurveMotorSelectionPanel +TCMotorSelPan.lbl.Selrocketmotor = :حدد محرك صاروخي +TCMotorSelPan.checkbox.hideSimilar = إخفاء منحنيات الدفع المتشابهة جدًا +TCMotorSelPan.checkbox.hideUsed = إخفاء المحركات المستخدمة بالفعل في الحامل +TCMotorSelPan.lbl.motorNameColumn = :عمود إسم المحرك +TCMotorSelPan.lbl.motorNameColumn.ttip = .حدد خاصية المحرك التي تريد عرضها في عمود إسم المحرك +TCMotorSelPan.btn.commonName = إستخدم الإسم الشائع +TCMotorSelPan.btn.designation = إستخدم تسمية الشركة المصنعة +TCMotorSelPan.lbl.nrOfMotors = :عدد المحركات +TCMotorSelPan.lbl.ttip.nrOfMotors = عدد المحركات المرئية حاليًا في جدول إختيار المحرك +TCMotorSelPan.checkbox.limitlength = حدد طول المحرك لطول الحامل +TCMotorSelPan.checkbox.limitdiameter = تحديد قطر المحرك لقطر التركيب +TCMotorSelPan.checkbox.hideUnavailable = إخفاء المحركات غير المنتظمة في التصنيع +TCMotorSelPan.btn.details = أظهر التفاصيل +TCMotorSelPan.btn.filter = تصفية المحركات +TCMotorSelPan.MotorSize = أبعاد المحرك +TCMotorSelPan.Diameter = القطر +TCMotorSelPan.Length = الطول +TCMotorSelPan.MotorMountDimensions = :أبعاد حامل المحرك +TCMotorSelPan.lbl.Search = :بحث +TCMotorSelPan.lbl.Selectthrustcurve = :حدد منحنى الدفع +TCMotorSelPan.lbl.Ejectionchargedelay = :تأخير شحنة الإطلاق +TCMotorSelPan.equalsIgnoreCase.None = لا شئ +TCMotorSelPan.lbl.NumberofsecondsorNone = (\"لا شئ\" عدد الثواني أو) +TCMotorSelPan.lbl.Designation = :تسمية الشركة المصنعة +TCMotorSelPan.lbl.Totalimpulse = :الدفع الكلي +TCMotorSelPan.lbl.Avgthrust = :متوسط الدفع +TCMotorSelPan.lbl.Maxthrust = :أعلى دفع +TCMotorSelPan.lbl.Burntime = :وقت الإحتراق +TCMotorSelPan.lbl.Launchmass = :الكتلة عند الإطلاق +TCMotorSelPan.lbl.Emptymass = :الكتلة فارغة +TCMotorSelPan.lbl.Caseinfo = :معلومات الحالة +TCMotorSelPan.lbl.Propinfo = :الوقود +TCMotorSelPan.lbl.CompatibleCases = :الحالات المتوافقة +TCMotorSelPan.lbl.Datapoints = :نقاط البيانات +TCMotorSelPan.lbl.Digest = :الإستيعاب +TCMotorSelPan.title.Thrustcurve = :منحنى الدفع +TCMotorSelPan.title.Thrust = الدفع +TCMotorSelPan.delayBox.None = لا شئ +TCMotorSelPan.noDescription = .لا يوجد وصف متاح +TCMotorSelPan.btn.checkAll = تحديد الكل +TCMotorSelPan.btn.checkNone = مسح الكل +TCMotorSelPan.btn.close = إغلاق + + + +! PlotDialog +PlotDialog.CheckBox.Showdatapoints = إظهار نقاط البيانات +PlotDialog.lbl.Chart = .أنقر بالزر الأيسر وإسحب لتكبير المنطقة. عجلة الفأرة للتكبير. إضغط زر التحكم مع عجلة الفأرة لتكبير المحور س فقط. إضغط على زر التحكم وأنقر بالزر الأيسر وإسحب للتحريك. أنقر بزر الفأرة الأيمن وإسحب للتكبير ديناميكيًا +PlotDialog.btn.exportImage = تصدير الصورة + +ComponentTree.ttip.massoverride = تجاوز الكتلة +ComponentTree.ttip.cgoverride = تجاوز مركز الجاذبية +ComponentTree.ttip.cdoverride = تم تجاوز معامل السحب +! "main" prefix is used for the main application dialog + +ComponentTreeRenderer.total = كلي + +# FIXME: Rename the description keys + +main.menu.file = ملف +main.menu.file.desc = المهام المتعلقة بمعالجة الملفات +main.menu.file.new = جديد +main.menu.file.new.desc = قم بإنشاء تصميم صاروخ جديد +main.menu.file.open = \u2026 إفتح +main.menu.file.open.desc = إفتح تصميم صاروخ +main.menu.file.openRecent = فتح الأحدث +main.menu.file.openRecent.desc = إفتح تصميم صاروخ حديث +main.menu.file.openExample = إفتح مثال +main.menu.file.openExample.desc = إفتح مثالاً لتصميم الصاروخ +main.menu.file.save = إحفظ +main.menu.file.save.desc = إحفظ تصميم الصاروخ الحالي +main.menu.file.saveAs = \u2026 إحفظ ك +main.menu.file.saveAs.desc = إحفظ تصميم الصاروخ الحالي في ملف جديد +! main.menu.file.import = \u2026 إستيراد +! main.menu.file.import.desc = rkt إستيراد التصميم من ملف روكسيم +main.menu.file.export_as = صدر ك +main.menu.file.export_as.desc = تصدير التصميم كتنسيق ملف محدد +main.menu.file.encode_3d = تشفير ثلاثي الأبعاد +main.menu.file.encode_3d.desc = تشفير التصميم إلى تنسيق ملف ثلاثي الأبعاد محدد +main.menu.file.print = \u2026 طباعة معلومات التصميم +main.menu.file.print.desc = مواصفات تصميم الطباعة ، بما في ذلك قائمة الأجزاء وقوالب الزعان, إطبع أو إحفظ كملف بي دي إف +main.menu.file.close = أغلق التصميم +main.menu.file.close.desc = أغلق تصميم الصاروخ الحالي +main.menu.file.quit = خروج +main.menu.file.quit.desc = خروج من البرنامج +main.menu.file.exportDecal = \u2026 حفظ الصورة اللاصقة +main.menu.file.exportDecal.desc = .إحفظ ملصق من تصميم الصاروخ الحالي في ملف للتحرير + +main.menu.edit = تعديل +main.menu.edit.desc = تعديل الصاروخ +main.menu.edit.undo = تراجع +main.menu.edit.undo.desc = تراجع عن العملية السابقة +main.menu.edit.redo = إعادة +main.menu.edit.redo.desc = أعد العملية التي تم التراجع عنها مسبقًا +main.menu.edit.cut = قص +main.menu.edit.copy = نسخ +main.menu.edit.paste = ألصق +main.menu.edit.delete = إحذف +main.menu.edit.editpreset= تعديل ملف الإعداد المسبق للمكون +main.menu.edit.preferences = التفضيلات +main.menu.edit.preferences.desc = قم بإعداد تفضيلات التطبيق + +main.menu.tools = أدوات +main.menu.tools.componentAnalysis = تحليل المكونات +main.menu.tools.componentAnalysis.desc = تحليل مكونات الصاروخ بشكل منفصل +main.menu.tools.optimization = تحسين الصاروخ +main.menu.tools.optimization.desc = تحسين التصميم العام للصاروخ +main.menu.tools.customExpressions = التعبيرات المخصصة +main.menu.tools.customExpressions.desc = تحديد أنواع بيانات الطيران الجديدة عن طريق كتابة تعبيرات رياضية مخصصة + +main.menu.help = مساعدة +main.menu.help.desc = معلومات عن أوبنروكت +main.menu.help.tours = جولات إرشادية +main.menu.help.tours.desc = خذ جولات إرشادية على أوبنروكت +main.menu.help.license = ترخيص +main.menu.help.license.desc = معلومات ترخيص أوبنروكت +main.menu.help.bugReport = تقرير الخلل +main.menu.help.bugReport.desc = معلومات حول الإبلاغ عن الخلل في أوبنروكت +main.menu.help.debugLog = سجل التصحيح +main.menu.help.debugLog.desc = عرض سجل تصحيح أوبنروكت +main.menu.help.about = عن +main.menu.help.about.desc = تفاصيل حقوق النشر حول أوبنركت + +main.menu.debug = تصحيح +main.menu.debug.whatisthismenu = ما هذه القائمة؟ +main.menu.debug.createtestrocket = إنشاء صاروخ إختبار + +! database +! Translate here all material database +! + +Material.CUSTOM = مخصص + +! Material database +Databases.materials.types.Bulk = ضخم +Databases.materials.types.Line = خط +Databases.materials.types.Surface = السطح +Databases.materials.types.Custom = مخصص + +! BULK_MATERIAL +material.acrylic = أكريليك +material.aluminum = ألومنيوم +material.balsa = خشب البالسا +material.basswood = خشب الزيزفون +material.birch = خشب البتولا +material.brass = نحاس +material.cardboard = طبقات كرتون +material.carbon_fiber = ألياف الكربون +material.cork = الفلين +material.delrin = بلاستيك الدلرين +material.depron_xps = (XPS) البوليسترين المبثوق أو الديبرون +material.fiberglass = ألياف الزجاج +material.kraft_phenolic = ورق الفينوليك +material.maple = خشب القيقب +material.nylon = نايلون +material.paper_office = ورق (مكتب) +material.pine = خشب الصنوبر +material.plywood_birch = خشب رقائقي (بتولا) +material.polycarbonate_lexan = بولي كربونات (ليكسان) +material.polystyrene = البوليسترين +material.pvc = بولي كلوريد الفينيل بي في سي +material.spruce = خشب التنوب +material.steel = فولاذ +material.styrofoam_generic_eps = (EPS غير المبثوقة) رغوة البوليسترين الموسعة +material.styrofoam_blue_foam_xps = (XPS) \"اللوحة الزرقاء\" ستايروفوم +material.titanium = تيتانيوم +material.quantum_tubing = أنبوب كوانتي +material.blue_tube = أنبوب أزرق +!SURFACE_MATERIAL +material.ripstop_nylon = (Ripstop) نايلون ريبستوب +material.mylar = مايلار +material.polyethylene_thin = بولي إيثيلين (رفيع) +material.polyethylene_heavy = بولي ايثيلين (ثقيل) +material.silk = الحرير +material.cellophane = السيلوفان +material.crepe_paper = ورق الكريب هو مناديل ورقية مجعدة مغطاة بالغراء +! LINE_MATERIAL +material.thread_heavy_duty = (heavy-duty) خيط +material.elastic_cord_round_2_mm_1_16_in = (2 mm, 1/16 in دائري) حبل مرن +material.elastic_cord_flat_6_mm_1_4_in = (6 mm, 1/4 in مسطح) حبل مرن +material.elastic_cord_flat_12_mm_1_2_in = (12 mm, 1/2 in مسطح) حبل مرن +material.elastic_cord_flat_19_mm_3_4_in = (19 mm, 3/4 in مسطح) حبل مرن +material.elastic_cord_flat_25_mm_1_in = (25 mm, 1 in مسطح) حبل مرن +material.braided_nylon_2_mm_1_16_in = (2 mm, 1/16 in) نايلون مضفر +material.braided_nylon_3_mm_1_8_in = (3 mm, 1/8 in) نايلون مضفر +material.tubular_nylon_11_mm_7_16_in = (11 mm, 7/16 in) نايلون أنبوبي +material.tubular_nylon_14_mm_9_16_in = (14 mm, 9/16 in) نايلون أنبوبي +material.tubular_nylon_25_mm_1_in = (25 mm, 1 in) نايلون أنبوبي + +! ExternalComponent +ExternalComponent.Rough = قاس +ExternalComponent.Roughunfinished = الخام غير مكتمل +ExternalComponent.Unfinished = غير مكتمل +ExternalComponent.Regularpaint = دهان عادي +ExternalComponent.Smoothpaint = دهان ناعم +ExternalComponent.Optimumpaint = الطلاء الأمثل +ExternalComponent.Polished = صفائح الطائرات +ExternalComponent.Finishedpolished = سطح مصقول / منتهي +ExternalComponent.Mirror = سطح مرآة + +! LineStyle +LineStyle.Solid = صلب +LineStyle.Dashed = مُشرَّطَةٌ +LineStyle.Dotted = منقطة +LineStyle.Dash-dotted = شرطة منقطة +LineStyle.Defaultstyle = الأسلوب الإفتراضي + +! Shape +Shape.Conical = مخروطي +Shape.Conical.desc1 = .الأنف المخروطي له شكل مثلث +Shape.Conical.desc2 = .الإنتقال المخروطي له جوانب مستقيمة +Shape.Ogive = القوس القوطي +Shape.Ogive.desc1 = قوس قوطي مقطوع الذي لديه إنتقال سلس إلى أنبوب الجسم ,قيم أقل من واحد تنتجقوس قوطي مماس أنف الصاروخ على شكل القوس القوطي له ملف تعريف يمثل جزءا من دائرة. إعدادات الشكل في القيمة واحد تنتج +Shape.Ogive.desc2 = قوس قوطي مقطوع الذي لديه إنتقال سلس إلى النهاية الخلفية من أنبوب الجسم ,قيم أقل من واحد تنتجقوس قوطي مماس إنتقال على شكل القوس القوطي له ملف تعريف يمثل جزءا من دائرة. إعدادات الشكل في القيمة واحد تنتج +Shape.Ellipsoid = بيضاوي +Shape.Ellipsoid.desc1 = An ellipsoidal nose cone has a profile of a half-ellipse with major axes of lengths 2×Length and Diameter. +Shape.Ellipsoid.desc2 = An ellipsoidal transition has a profile of a half-ellipse with major axes of lengths 2×Length and Diameter. If the transition is not clipped, then the profile is extended at the center by the corresponding radius. +Shape.Powerseries = سلسلة الطاقة +Shape.Powerseries.desc1 = A power series nose cone has a profile of Radius × (x / Length)k where k is the shape parameter. For k=0.5 this is a \u00bd-power or parabolic nose cone, for k=0.75 a \u00be-power, and for k=1 a conical nose cone. +Shape.Powerseries.desc2 = A power series transition has a profile of Radius × (x / Length)k where k is the shape parameter. For k=0.5 the transition is \u00bd-power or parabolic, for k=0.75 a \u00be-power, and for k=1 conical. +Shape.Parabolicseries = سلسلة مكافئ القطع +Shape.Parabolicseries.desc1 = A parabolic series nose cone has a profile of a parabola. The shape parameter defines the segment of the parabola to utilize. The shape parameter 1.0 produces a full parabola which is tangent to the body tube, 0.75 produces a 3/4 parabola, 0.5 procudes a 1/2 parabola and 0 produces a conical nose cone. +Shape.Parabolicseries.desc2 = A parabolic series transition has a profile of a parabola. The shape parameter defines the segment of the parabola to utilize. The shape parameter 1.0 produces a full parabola which is tangent to the body tube at the aft end, 0.75 produces a 3/4 parabola, 0.5 procudes a 1/2 parabola and 0 produces a conical transition. +Shape.Haackseries = (Haak)سلسلة هاك +Shape.Haackseries.desc1 = The Haack series nose cones are designed to minimize drag. The shape parameter 0 produces an LD-Haack or Von Karman nose cone, which minimizes drag for fixed length and diameter, while a value of 0.333 produces an LV-Haack nose cone, which minimizes drag for fixed length and volume. +Shape.Haackseries.desc2 = The Haack series nose cones are designed to minimize drag. These transition shapes are their equivalents, but do not necessarily produce optimal drag for transitions. The shape parameter 0 produces an LD-Haack or Von Karman shape, while a value of 0.333 produces an LV-Haack shape. + + +! RocketComponent +RocketComponent.Position.Method.Axial.ABSOLUTE = طرف الأنف المخروطي +RocketComponent.Position.Method.Axial.AFTER = بعد المكون الشقيق +RocketComponent.Position.Method.Axial.BOTTOM = الجزء السفلي من المكون الرئيسي +RocketComponent.Position.Method.Axial.MIDDLE = وسط المكون الرئيسي +RocketComponent.Position.Method.Axial.TOP = الجزء العلوي من المكون الرئيسي + +RocketComponent.Position.Method.Radius.Label = :نصف القطر بالنسبة إلى +RocketComponent.Position.Method.Radius.FREE = مركز المكون الرئيسي +RocketComponent.Position.Method.Radius.SURFACE = (بدون الإزاحة) سطح المكون الرئيسي +RocketComponent.Position.Method.Radius.RELATIVE = سطح المكون الرئيسي +RocketComponent.Position.Method.Radius.COAXIAL = نفس محور المكون المستهدف + +RocketComponent.Position.Method.Angle.RELATIVE = متعلق بالمكون الأساسي +RocketComponent.Position.Method.Angle.FIXED = .الزاوية ثابتة +RocketComponent.Position.Method.Angle.MIRROR_XY = أسقط بالنسبة إلى مستوي الصاروخ س-ي + +RocketComponent.Direction.X = "المحور س" +RocketComponent.Direction.Y = "المحور ي" +RocketComponent.Direction.Z = "الحور ز" +RocketComponent.Direction.AXIAL = "محوري" +RocketComponent.Direction.RADIAL = "شعاعي" +RocketComponent.Direction.ANGULAR = "زاوي" + + +! LaunchLug +LaunchLug.Launchlug = عروة الإطلاق +! LaunchButton +RailButton.RailButton = زر سكة الإطلاق +! NoseCone +NoseCone.NoseCone = أنف مخروطي +! Transition +Transition.Transition = إنتقال +!Stage +Stage.Stage = مرحلة + +Stage.SeparationEvent.UPPER_IGNITION = إشعال محرك المرحلة العلوية +Stage.SeparationEvent.IGNITION = إشعال محرك المرحلة الحالية +Stage.SeparationEvent.BURNOUT = نضوب محرك المرحلة الحالية +Stage.SeparationEvent.EJECTION = شحنة إطلاق المرحلة الحالية +Stage.SeparationEvent.LAUNCH = إطلاق +Stage.SeparationEvent.NEVER = أبدا + +BoosterSet.BoosterSet = مجموعة المعززات + +PodSet.PodSet = Pod Set + +! BodyTube +BodyTube.BodyTube = أنبوب البدن +! TubeCoupler +TubeCoupler.TubeCoupler = مقرنة الأنبوب +!InnerTube +InnerTube.InnerTube = الأنبوب الداخلي +InnerTubeCfg.lbl.Attributes = صفات +InnerTubeCfg.lbl.Placement = تحديد مستوى +InnerTubeCfg.lbl.Material = :المادة +! TrapezoidFinSet +TrapezoidFinSet.TrapezoidFinSet = مجموعة زعانف شبه منحرفة +! FreeformFinSet +FreeformFinSet.FreeformFinSet = شكل حر لمجموعة الزعانف +! TubeFinSEt +TubeFinSet.TubeFinSet = مجموعة زعانف أنبوبية +!MassComponent +MassComponent.MassComponent = Mass Component +MassComponent.Altimeter = مقياس الإرتفاع +MassComponent.FlightComputer = حاسوب التحكم في الطيران +MassComponent.DeploymentCharge = شحنة النشر +MassComponent.Tracker = متعقب +MassComponent.Payload = الحمولة +MassComponent.RecoveryHardware = أجهزة الإسترداد +MassComponent.Battery = البطارية + +! ShockCord +ShockCord.ShockCord = سلك الصدمة +! Bulkhead +Bulkhead.Bulkhead = Bulkhead +! CenteringRing +CenteringRing.CenteringRing = حلقة توسيط +! EngineBlock +EngineBlock.EngineBlock = كتلة المحرك +! Streamer +Streamer.Streamer = Streamer +! Sleeve +Sleeve.Sleeve = الجلبة جزء أنبوبي معدني + +!Rocket +Rocket.motorCount.Nomotor = لا محركات +Rocket.motorCount.noStageMotors = لا شئ +Rocket.compname.Rocket = صاروخ + +!MotorMount +MotorMount.IgnitionEvent.AUTOMATIC = (شحنة الإطلاق أو الإطلاق) تلقائي +MotorMount.IgnitionEvent.LAUNCH = إطلاق +MotorMount.IgnitionEvent.EJECTION_CHARGE = شحنة الطرد الأولي من المرحلة السابقة +MotorMount.IgnitionEvent.BURNOUT = أول نضوب في المرحلة السابقة +MotorMount.IgnitionEvent.NEVER = أبدا + +MotorMount.IgnitionEvent.short.AUTOMATIC = تلقائي +MotorMount.IgnitionEvent.short.LAUNCH = إطلاق +MotorMount.IgnitionEvent.short.EJECTION_CHARGE = شحنة الإطلاق +MotorMount.IgnitionEvent.short.BURNOUT = النضوب +MotorMount.IgnitionEvent.short.NEVER = أبدا + +FlightConfiguration.noMotors = لا محركات + +MotorConfiguration.empty = لا شئ + + +!ComponentIcons +ComponentIcons.Stage = مرحلة محورية +ComponentIcons.Boosters = مرحلة المعزز +ComponentIcons.Pods = Pod Stage +ComponentIcons.Nosecone = الأنف المخروطي +ComponentIcons.Bodytube = أنبوب البدن +ComponentIcons.Transition = إنتقال +ComponentIcons.Trapezoidalfinset = مجموعة زعانف شبه منحرفة +ComponentIcons.Ellipticalfinset = مجموعة زعانف بيضاوية +ComponentIcons.Freeformfinset = مجموعة زعانف حرة الشكل +ComponentIcons.Tubefinset = مجموعة زعانف أنبوبية +ComponentIcons.Launchlug = عروات الإطلاق +ComponentIcons.RailButton = أزرار سكة الإطلاق +ComponentIcons.Innertube = الأنبوب الداخلي +ComponentIcons.Tubecoupler = Tube Coupler +ComponentIcons.Centeringring = Centering Ring +ComponentIcons.Bulkhead = Bulkhead +ComponentIcons.Engineblock = Engine Block +ComponentIcons.Parachute = مظلة الهبوط +ComponentIcons.Streamer = Streamer +ComponentIcons.Shockcord = سلك الصدمة +ComponentIcons.Masscomponent = Mass Component +ComponentIcons.disabled = (معطل) +ComponentIcons.Altimeter = Altimeter +ComponentIcons.Flightcomputer = حاسوب التحكم في الطيران +ComponentIcons.Battery = البطارية +ComponentIcons.Tracker = متعقب +ComponentIcons.Recoveryhardware = أجهزة الإسترداد +ComponentIcons.Payload = الحمولة +ComponentIcons.Deploymentcharge = شحنة النشر + +! StageAction +StageAction.Stage = مرحلة + +! RecoveryDevice +RecoveryDevice.DeployEvent.LAUNCH = (بالإضافة إلى عدد ثواني غير محدد) إطلاق +RecoveryDevice.DeployEvent.EJECTION = أول شحنة إطلاق في هذه المرحلة +RecoveryDevice.DeployEvent.APOGEE = الأوج +RecoveryDevice.DeployEvent.ALTITUDE = إرتفاع محدد أثناء الهبوط +RecoveryDevice.DeployEvent.CURRENT_STAGE_SEPARATION = فصل المرحلة الحالية +RecoveryDevice.DeployEvent.LOWER_STAGE_SEPARATION = فصل المرحلة الدنيا +RecoveryDevice.DeployEvent.NEVER = أبدا + +RecoveryDevice.DeployEvent.short.LAUNCH = الإطلاق +RecoveryDevice.DeployEvent.short.EJECTION = شحنة الإطلاق +RecoveryDevice.DeployEvent.short.APOGEE = الأوج +RecoveryDevice.DeployEvent.short.ALTITUDE = الإرتفاع +RecoveryDevice.DeployEvent.short.CURRENT_STAGE_SEPARATION = فصل المرحلة الحالية +RecoveryDevice.DeployEvent.short.LOWER_STAGE_SEPARATION = فصل المرحلة الدنيا +RecoveryDevice.DeployEvent.short.NEVER = أبدا + + +! FlightEvent +FlightEvent.Type.LAUNCH = إطلاق +FlightEvent.Type.IGNITION = إشعال المحرك +FlightEvent.Type.LIFTOFF = الإقلاع +FlightEvent.Type.LAUNCHROD = إزالة قضيب الإطلاق +FlightEvent.Type.BURNOUT = نضوب المحرك +FlightEvent.Type.EJECTION_CHARGE = شحنة الأطلاق +FlightEvent.Type.STAGE_SEPARATION = فصل المرحلة +FlightEvent.Type.APOGEE = الأوج +FlightEvent.Type.RECOVERY_DEVICE_DEPLOYMENT = نشر جهاز الإسترداد +FlightEvent.Type.GROUND_HIT = الإصطدام بالأرض +FlightEvent.Type.SIMULATION_END = نهاية المحاكاة +FlightEvent.Type.ALTITUDE = تغيير الإرتفاع +FlightEvent.Type.TUMBLE = هبوط +FlightEvent.Type.EXCEPTION = إستثناء + +! ThrustCurveMotorColumns +TCurveMotorCol.MANUFACTURER = الصانع +TCurveMotorCol.NAME = الإسم +TCurveMotorCol.CASEINFO = الحالة +TCurveMotorCol.DIAMETER = القطر +TCurveMotorCol.LENGTH = الطول +TCurveMotorCol.TOTAL_IMPULSE = الدفع الكلي + +TCurveMotor.ttip.diameter = :القطر +TCurveMotor.ttip.length = :الطول +TCurveMotor.ttip.maxThrust = :أقصى دفع +TCurveMotor.ttip.avgThrust = :متوسط الدفع +TCurveMotor.ttip.burnTime = :مدة الإشتعال +TCurveMotor.ttip.totalImpulse = :الدفع الكلي +TCurveMotor.ttip.launchMass = :الكتلة عند الإطلاق +TCurveMotor.ttip.emptyMass = :الكتلة فارغة + +! RocketInfo +RocketInfo.lengthLine.Length = الطول +RocketInfo.lengthLine.maxdiameter = , القطر الأقصى +RocketInfo.massWithMotors = الكتلة بالمحركات +RocketInfo.massWithoutMotors = الكتلة بلا محركات +RocketInfo.at = في M= +RocketInfo.cgText = :مركز الجاذبية +RocketInfo.cpText = :مركز الضغط +RocketInfo.stabText = :الإستقرار +RocketInfo.Warning = :تحذير +RocketInfo.Warning.TubeFinExperimental = دعم زعنفة الأنبوب تجريبي +RocketInfo.Calculating = \u2026 حساب +RocketInfo.Apogee = :الأوج +RocketInfo.Maxvelocity = :السرعة القصوى +RocketInfo.Maxacceleration = :أقصى تسارع +RocketInfo.apogeeValue = بلا جواب +RocketInfo.Mach = (ماخ +RocketInfo.velocityValue = بلا جواب +RocketInfo.accelerationValue = بلا جواب + +! FinSet +FinSet.CrossSection.SQUARE = مربع +FinSet.CrossSection.ROUNDED = دائري +FinSet.CrossSection.AIRFOIL = الجناح الحامل +FinSet.TabRelativePosition.FRONT = حافة الوتر الرئيسي من أول البدن +FinSet.TabRelativePosition.CENTER = نقطة منتصف الوتر الرئيسي +FinSet.TabRelativePosition.END = حافة الوتر الرئيسي نهاية البدن + +! FlightDataType +FlightDataType.TYPE_TIME = الوقت +FlightDataType.TYPE_ALTITUDE = الإرتفاع +FlightDataType.TYPE_VELOCITY_Z = السرعة العمودية +FlightDataType.TYPE_ACCELERATION_Z = التسارع العمودي +FlightDataType.TYPE_VELOCITY_TOTAL = السرعة الكلية +FlightDataType.TYPE_ACCELERATION_TOTAL = التسارع الكلي +FlightDataType.TYPE_POSITION_X = الموضع الشرقي من الإطلاق +FlightDataType.TYPE_POSITION_Y = الموضع الشمالي من الإطلاق +FlightDataType.TYPE_UPWIND = Position upwind +FlightDataType.TYPE_POSITION_XY = المسافة الجانبية +FlightDataType.TYPE_POSITION_DIRECTION = الإتجاه الجانبي +FlightDataType.TYPE_VELOCITY_XY = السرعة الجانبية +FlightDataType.TYPE_ACCELERATION_XY = التسارع الجانبي +FlightDataType.TYPE_AOA = Angle of attack +FlightDataType.TYPE_ROLL_RATE = معدل الإلتفاف +FlightDataType.TYPE_PITCH_RATE = Pitch rate +FlightDataType.TYPE_YAW_RATE = Yaw rate +FlightDataType.TYPE_MASS = الكتلة +FlightDataType.TYPE_MOTOR_MASS = كتلة المحرك +FlightDataType.TYPE_LONGITUDINAL_INERTIA = لحظة طولية من القصور الذاتي +FlightDataType.TYPE_ROTATIONAL_INERTIA = لحظة إلتفافية من القصور الذاتي +FlightDataType.TYPE_CP_LOCATION = موقع مركز الضغط +FlightDataType.TYPE_CG_LOCATION = موقع مركز الجاذبية +FlightDataType.TYPE_STABILITY = عيارات هامش الإستقرار +FlightDataType.TYPE_MACH_NUMBER = رقمم ماخ +FlightDataType.TYPE_REYNOLDS_NUMBER = رقم رينولد +FlightDataType.TYPE_THRUST_FORCE = الدفع +FlightDataType.TYPE_DRAG_FORCE = قوة السحب +FlightDataType.TYPE_DRAG_COEFF = معامل السحب +FlightDataType.TYPE_AXIAL_DRAG_COEFF = معامل السحب المحوري +FlightDataType.TYPE_FRICTION_DRAG_COEFF = معامل مقاومة الاحتكاك +FlightDataType.TYPE_PRESSURE_DRAG_COEFF = معامل سحب الضغط +FlightDataType.TYPE_BASE_DRAG_COEFF = معامل السحب الأساسي +FlightDataType.TYPE_NORMAL_FORCE_COEFF = معامل القوة العادي +FlightDataType.TYPE_PITCH_MOMENT_COEFF = Pitch moment coefficient +FlightDataType.TYPE_YAW_MOMENT_COEFF = Yaw moment coefficient +FlightDataType.TYPE_SIDE_FORCE_COEFF = معامل القوة الجانبي +FlightDataType.TYPE_ROLL_MOMENT_COEFF = Roll moment coefficient +FlightDataType.TYPE_ROLL_FORCING_COEFF = Roll forcing coefficient +FlightDataType.TYPE_ROLL_DAMPING_COEFF = Roll damping coefficient +FlightDataType.TYPE_PITCH_DAMPING_MOMENT_COEFF = Pitch damping coefficient +FlightDataType.TYPE_YAW_DAMPING_MOMENT_COEFF = Yaw damping coefficient +FlightDataType.TYPE_REFERENCE_LENGTH = الطول المرجعي +FlightDataType.TYPE_REFERENCE_AREA = منطقة مرجعية +FlightDataType.TYPE_ORIENTATION_THETA = (الذروة) الإتجاه العمودي +FlightDataType.TYPE_ORIENTATION_PHI = (السمت) الإتجاه الجانبي +FlightDataType.TYPE_WIND_VELOCITY = سرعة الرياح +FlightDataType.TYPE_AIR_TEMPERATURE = حرارة الهواء +FlightDataType.TYPE_AIR_PRESSURE = ضغط الهواء +FlightDataType.TYPE_SPEED_OF_SOUND = سرعة الصوت +FlightDataType.TYPE_TIME_STEP = خطوة وقت المحاكاة +FlightDataType.TYPE_COMPUTATION_TIME = وقت الحساب +FlightDataType.TYPE_LATITUDE = خط العرض +FlightDataType.TYPE_LONGITUDE = خط الطول +FlightDataType.TYPE_CORIOLIS_ACCELERATION = تسارع كوريوليس +FlightDataType.TYPE_GRAVITY = تسارع الجاذبية + +! PlotConfiguration +PlotConfiguration.Verticalmotion = الحركة العمودية بالنسبة الوقت +PlotConfiguration.Totalmotion = الحركة الكلية بالنسبة الوقت +PlotConfiguration.Flightside = لمحة جانبية عن الطيران +PlotConfiguration.Stability = الإستقرار بالنسبة الوقت +PlotConfiguration.Dragcoef = معاملات السحب بالنسبة عدد الماخ +PlotConfiguration.Rollcharacteristics = خصائص الإلتفاف +PlotConfiguration.Angleofattack = زاوية الهجوم والتوجيه مقابل الوقت +PlotConfiguration.Simulationtime = خطوة وقت المحاكاة ووقت الحساب +PlotConfiguration.Groundtrack = المسار الأرضي + +! Warning +Warning.LargeAOA.str1 = .تمت مصادفة زاوية هجوم كبيرة +Warning.LargeAOA.str2 = تمت مصادفة زاوية هجوم كبيرة ( +Warning.DISCONTINUITY = إنقطاع في قطر جسم الصاروخ +Warning.THICK_FIN = .قد لا يتم نموذجة الزعانف السميكة بدقة +Warning.JAGGED_EDGED_FIN = .قد تكون توقعات الزعانف ذات الحواف الخشنة غير دقيقة +Warning.LISTENERS_AFFECTED = قام المستمعون بتعديل محاكاة الطيران +Warning.RECOVERY_DEPLOYMENT_WHILE_BURNING = .فتح جهاز الإسترداد بينما لا يزال المحرك يحترق +Warning.FILE_INVALID_PARAMETER = .تمت مصادفة إعداد غير صالحة, تم التجاهل +Warning.PARALLEL_FINS = عدد كبير جدًا من الزعانف المتوازية +Warning.SUPERSONIC = .قد لا تكون حسابات الجسم دقيقة تمامًا عند السرعات فوق الصوتية +Warning.RECOVERY_LAUNCH_ROD = .تم نشر جهاز الإسترداد أثناء وجوده في دليل التشغيل +Warning.RECOVERY_HIGH_SPEED = نشر جهاز الإسترداد بسرعة عالية +Warning.NO_RECOVERY_DEVICE = .لا يوجد جهاز إسترداد محدد في المحاكاة +Warning.TUMBLE_UNDER_THRUST = .بدأت المرحلة تتعثر تحت ضغط الدفع +Warning.EVENT_AFTER_LANDING = :وقع حدث الرحلة بعد الهبوط +Warning.ZERO_LENGTH_BODY = .قد لا تؤدي الأجسام ذات الطول الصفري إلى محاكاة دقيقة +Warning.ZERO_RADIUS_BODY = قد لا تؤدي الأجسام ذات الطول الصفري إلى محاكاة دقيقة. +Warning.TUBE_SEPARATION = .قد لا ينتج عن المسافة بين الزعانف الأنبوبية محاكاة دقيقة +Warning.TUBE_OVERLAP = .قد لا تؤدي الزعانف الأنبوبية المتداخلة إلى محاكاة دقيقة +Warning.EMPTY_BRANCH = فرع المحاكاة لا يحتوي على بيانات +Warning.SEPARATION_ORDER = تم فصل المراحل بترتيب غير معقول + +! Scale dialog +ScaleDialog.lbl.scaleRocket = الصاروخ كاملا +ScaleDialog.lbl.scaleSubselection = الإختيار وجميع المكونات الفرعية +ScaleDialog.lbl.scaleSelection = المحدد فقط(المكونات) المكون +ScaleDialog.title = تصميم محجم +ScaleDialog.lbl.scale = :تحجيم +ScaleDialog.lbl.scale.ttip = حدد ما إذا كنت تريد تحجيم التصميم بالكامل أو المكون المحدد فقط +ScaleDialog.lbl.scaling = :تحجيم للتطبيق +ScaleDialog.lbl.scaling.ttip = .الحجم الناتج ، القيم الأعلى من 100٪ تنمو والقيم الأقل من 100٪ تقلص التصميم +! The scaleFrom/scaleTo pair creates a phrase "Scale from [...] to [...]" +ScaleDialog.lbl.scaleFrom = تحجيم من +ScaleDialog.lbl.scaleTo = إلى +ScaleDialog.lbl.scaleFromTo.ttip = .حدد المقياس بناءً على نتيجة الطول الأصلي +ScaleDialog.checkbox.scaleMass = قم بتحديث القيم الصريحة للكتلة +ScaleDialog.checkbox.scaleMass.ttip = حَجِّمْ كتلة المكون وتجاوز قيم الكتلة بواسطة مكعب عامل القياس +ScaleDialog.checkbox.scaleOffsets = Scale component offsets +ScaleDialog.checkbox.scaleOffsets.ttip = أيضا حجم الإزاحة بين المكونات +ScaleDialog.button.scale = تحجيم +ScaleDialog.undo.scaleRocket = تحجيم الصاروخ +ScaleDialog.undo.scaleComponent = تحجيم المكون +ScaleDialog.undo.scaleComponents = تحجيم المكونات + +!icons +Icons.Undo = إلغاء +Icons.Redo = تراجع عن الإلغاء + +OpenRocketPrintable.Partsdetail = تفاصيل الأجزاء +OpenRocketPrintable.Fintemplates = قوالب الزعانف +OpenRocketPrintable.Transitiontemplates = قوالب الإنتقال +OpenRocketPrintable.Noseconetemplates = قوالب الأنف المخروطي +OpenRocketPrintable.Finmarkingguide = Fin marking guide +OpenRocketPrintable.DesignReport = تقرير التصميم +OpenRocketPrintable.Centeringringtemplates = Centering Ring templates + +OpenRocketDocument.Redo = تراجع عن الإلغاء +OpenRocketDocument.Undo = إلغاء + +!EllipticalFinSet +EllipticalFinSet.Ellipticalfinset = مجموعة الزعانف البيضاوية + +! Optimization + +! Modifiers + +optimization.modifier.nosecone.length = الطول +optimization.modifier.nosecone.length.desc = .تحسين طول مخروط الأنف +optimization.modifier.nosecone.diameter = القطر +optimization.modifier.nosecone.diameter.desc = .تحسين قطر قاعدة مخروط الأنف +optimization.modifier.nosecone.thickness = السماكة +optimization.modifier.nosecone.thickness.desc = .تحسين سمك مادة مخروط الأنف +optimization.modifier.nosecone.shapeparameter = إعداد الشكل +optimization.modifier.nosecone.shapeparameter.desc = .إعداد تحسين شكل مخروط الأنف + +optimization.modifier.transition.length = الطول +optimization.modifier.transition.length.desc = .تحسين طول الإنتقال +optimization.modifier.transition.forediameter = القطر الأمامي +optimization.modifier.transition.forediameter.desc = .تحسين قطر مقدمة الإنتقال +optimization.modifier.transition.aftdiameter = القطر الخلفي +optimization.modifier.transition.aftdiameter.desc = .تحسين القطر الإنتقالي الخلفي +optimization.modifier.transition.thickness = الكثافة +optimization.modifier.transition.thickness.desc = .تحسين السمك الإنتقالي للمادة +optimization.modifier.transition.shapeparameter = إعداد الشكل +optimization.modifier.transition.shapeparameter.desc = تحسين إعداد الشكل الإنتقالي + +optimization.modifier.bodytube.length = الطول +optimization.modifier.bodytube.length.desc = .تحسين طول أنبوب الجسم +optimization.modifier.bodytube.outerDiameter = القطر الخارجي +optimization.modifier.bodytube.outerDiameter.desc = .قم بتحسين القطر الخارجي لأنبوب الجسم مع الحفاظ على سمك المادة +optimization.modifier.bodytube.thickness = السماكة +optimization.modifier.bodytube.thickness.desc = .تحسين سمك مادة أنبوب الجسم + +optimization.modifier.trapezoidfinset.rootChord = وتر جذر الزعنفة +optimization.modifier.trapezoidfinset.rootChord.desc = .(طول الزعنفة عند جسم الصاروخ) قم بتحسين طول وتر جذر الزعنفة لمجموعة الزعانف +optimization.modifier.trapezoidfinset.tipChord = وتر طرف الزعنفة +optimization.modifier.trapezoidfinset.tipChord.desc = .(طول الزعنفة عند الحافة الخارجية) قم بتحسين طول وتر طرف الزعنفة لمجموعة الزعانف +optimization.modifier.trapezoidfinset.sweep = زاوية ميل قطع الوتر الأمامي للزعنفة +optimization.modifier.trapezoidfinset.sweep.desc = .(المسافة التي تحركتها زاوية ميل قطع الوتر الأمامي للزعنفة للخلف) قم بتحسين زاوية ميل قطع الوتر الأمامي للزعنفة لمجموعة الزعانف +optimization.modifier.trapezoidfinset.height = الإرتفاع +optimization.modifier.trapezoidfinset.height.desc = .مجموعة الزعانف (نصف إمتداد) قم بتحسين إرتفاع + +optimization.modifier.ellipticalfinset.length = طول وتر جذر الزعنفة +optimization.modifier.ellipticalfinset.length.desc = .تحسين طول وتر جذر الزعنفة لمجموعة الزعانف +optimization.modifier.ellipticalfinset.height = الإرتفاع +optimization.modifier.ellipticalfinset.height.desc = .مجموعة الزعانف (نصف إمتداد) قم بتحسين إرتفاع + +optimization.modifier.finset.cant = زاوية الميلان +optimization.modifier.finset.cant.desc = .تحسين زاوية الميل لمجموعة الزعانف +optimization.modifier.finset.position = الموقع +optimization.modifier.finset.position.desc = .قم بتحسين موضع مجموعة الزعانف على طول جسم الصاروخ + +optimization.modifier.launchlug.length = الطول +optimization.modifier.launchlug.length.desc = .قم بتحسين طول عروة الإطلاق +optimization.modifier.launchlug.outerDiameter = القطر الخارجي +optimization.modifier.launchlug.outerDiameter.desc = .قم بتحسين القطر الخارجي لعروة الإطلاق +optimization.modifier.launchlug.thickness = السماكة +optimization.modifier.launchlug.thickness.desc = .قم بتحسين سمك عروة الإطلاق مع الحفاظ على ثبات القطر الخارجي +optimization.modifier.launchlug.position = الموقع +optimization.modifier.launchlug.position.desc = .قم بتحسين موضع عروة الإطلاق على طول جسم الصاروخ + + +optimization.modifier.internalcomponent.position = الموقع +optimization.modifier.internalcomponent.position.desc = .قم بتحسين موضع المكون بالنسبة للمكون الأصلي + +optimization.modifier.masscomponent.mass = الكتلة +optimization.modifier.masscomponent.mass.desc = .تحسين كتلة المكون الكتلي + +optimization.modifier.parachute.diameter = القطر +optimization.modifier.parachute.diameter.desc = .تحسين قطر قماش المظلة +optimization.modifier.parachute.coefficient = معامل السحب +optimization.modifier.parachute.coefficient.desc = .تحسين معامل السحب للمظلة. يبلغ معامل سحب المظلات النموذجية حوالي 0.8 + +optimization.modifier.streamer.length = الطول +optimization.modifier.streamer.length.desc = .قم بتحسين طول جهاز البث +optimization.modifier.streamer.width = العرض +optimization.modifier.streamer.width.desc = .تحسين عرض جهاز البث +optimization.modifier.streamer.aspectRatio = نسبة العرض +optimization.modifier.streamer.aspectRatio.desc = .قم بتحسين نسبة العرض إلى الإرتفاع لجهاز البث . يجب ألا تحدد طول أو عرض جهاز البث في نفس الوقت مع نسبة العرض إلى الإرتفاع +optimization.modifier.streamer.coefficient = معامل السحب +optimization.modifier.streamer.coefficient.desc = .قم بتحسين معامل السحب الخاص بجهاز البث + +optimization.modifier.recoverydevice.deployDelay = تأخير النشر +optimization.modifier.recoverydevice.deployDelay.desc = .تحسين تأخير نشر جهاز الإسترداد +optimization.modifier.recoverydevice.deployAltitude = إرتفاع النشر +optimization.modifier.recoverydevice.deployAltitude.desc = .قم بتحسين إرتفاع نشر جهاز الإسترداد + +optimization.modifier.rocketcomponent.overrideMass = تجاوز الكتلة +optimization.modifier.rocketcomponent.overrideMass.desc = .تحسين الكتلة المتجاوزة للمكون +optimization.modifier.rocketcomponent.overrideCG = تجاوز مركز الجاذبية +optimization.modifier.rocketcomponent.overrideCG.desc = .قم بتحسين مركز الثقل الذي تم تجاوزه للمكون + +optimization.modifier.motormount.overhang = عبء المحرك +optimization.modifier.motormount.overhang.desc = .تحسين عبء المحرك +optimization.modifier.motormount.delay = تأخير إشتعال المحرك +optimization.modifier.motormount.delay.desc = .تحسين تأخير إشتعال المحرك + + + + +! General rocket design optimization dialog +GeneralOptimizationDialog.info.noSims.title = لا محاكيات +GeneralOptimizationDialog.info.noSims.message = لا توجد عمليات محاكاة تم إنشاؤها لتحسينها +GeneralOptimizationDialog.title = تحسين الصاروخ +GeneralOptimizationDialog.goal.maximize = تعظيم القيمة +GeneralOptimizationDialog.goal.minimize = تقليل القيمة +GeneralOptimizationDialog.goal.seek = إبحث عن قيمة +GeneralOptimizationDialog.btn.start = إبدأ التحسين +GeneralOptimizationDialog.btn.stop = أوقف التحسين +GeneralOptimizationDialog.lbl.paramsToOptimize = :إعدادات للتحسين +GeneralOptimizationDialog.btn.add = أضف +GeneralOptimizationDialog.btn.add.ttip = أضف الإعداد المحدد إلى التحسين +GeneralOptimizationDialog.btn.delete = إحذف +GeneralOptimizationDialog.btn.delete.ttip = إحذف الإعداد المحدد من التحسين +GeneralOptimizationDialog.btn.deleteAll = حذف الكل +GeneralOptimizationDialog.btn.deleteAll.ttip = حذف جميع الإعدادات من التحسين +GeneralOptimizationDialog.lbl.availableParams = :الإعدادات المتاحة +GeneralOptimizationDialog.lbl.optimizationOpts = خيارات التحسين +GeneralOptimizationDialog.lbl.optimizeSim = :تحسين المحاكاة +GeneralOptimizationDialog.lbl.optimizeSim.ttip = حدد المحاكاة التي تريد تحسينها +GeneralOptimizationDialog.lbl.optimizeValue = :القيمة المُحسَّنة +GeneralOptimizationDialog.lbl.optimizeValue.ttip = حدد القيمة المراد تحسينها +GeneralOptimizationDialog.lbl.optimizeGoal = :هدف التحسين +GeneralOptimizationDialog.lbl.optimizeGoal.ttip = حدد هدف التحسين +GeneralOptimizationDialog.lbl.optimizeGoalValue.ttip = قيمة مخصصة للبحث عنها +GeneralOptimizationDialog.lbl.requireStability = الإستقرار المطلوب +GeneralOptimizationDialog.lbl.requireMinStability = :الحد الأدنى من الإستقرار +GeneralOptimizationDialog.lbl.requireMinStability.ttip = تتطلب حد أدنى من هامش الإستقرار الثابت للتصميم +GeneralOptimizationDialog.lbl.requireMaxStability = :أقصى قدر من الإستقرار +GeneralOptimizationDialog.lbl.requireMaxStability.ttip = تتطلب حدًا أقصى من هامش الإستقرار الثابت للتصميم +GeneralOptimizationDialog.status.bestValue = :القيمة الأفضل +GeneralOptimizationDialog.status.bestValue.ttip = .تم العثور على أفضل قيمة تحسين حتى الآن +GeneralOptimizationDialog.status.stepCount = :عدد الخطوات +GeneralOptimizationDialog.status.stepCount.ttip = .عدد خطوات التحسين التي تم تنفيذها +GeneralOptimizationDialog.status.evalCount = :التقييمات +GeneralOptimizationDialog.status.evalCount.ttip = .إجمالي عدد تقييمات الوظائف التي تم إجراؤها في المحاكاة +GeneralOptimizationDialog.status.stepSize = :حجم الخطوة +GeneralOptimizationDialog.status.stepSize.ttip = (بالنسبة إلى نطاقات إعدادات التحسين) حجم خطوة التحسين الحالية +GeneralOptimizationDialog.btn.plotPath = مسار الرسم البياني +GeneralOptimizationDialog.btn.plotPath.ttip = (التحسين أحادي وثنائي الأبعاد فقط) أرسم مسار التحسين +GeneralOptimizationDialog.btn.save = إحفظ المسار +GeneralOptimizationDialog.btn.save.ttip = .CSV إحفظ نتائج تقييمات الوظائف في المحاكاة كملف +GeneralOptimizationDialog.btn.apply = تطبيق التحسين +GeneralOptimizationDialog.btn.apply.ttip = قم بتطبيق نتائج التحسين على تصميم الصاروخ +GeneralOptimizationDialog.btn.reset = إعادة ضبط +GeneralOptimizationDialog.btn.reset.ttip = أعد ضبط تصميم الصاروخ على تصميم الصاروخ الحالي +GeneralOptimizationDialog.btn.close = إغلاق +GeneralOptimizationDialog.btn.close.ttip = أغلق مربع الحوار دون تعديل تصميم الصاروخ +GeneralOptimizationDialog.error.selectParams.text = .حدد أولاً بعض الإعدادات لتحسينها من الإعدادات المتاحة +GeneralOptimizationDialog.error.selectParams.title = حدد إعدادات التحسين +GeneralOptimizationDialog.error.optimizationFailure.text = :فشل تشغيل التحسين +GeneralOptimizationDialog.error.optimizationFailure.title = فشل التحسين +GeneralOptimizationDialog.undoText = تطبيق التحسين +GeneralOptimizationDialog.basicSimulationName = المحاكاة الأساسية +GeneralOptimizationDialog.noSimulationName = لا محاكاة +GeneralOptimizationDialog.table.col.parameter = الإعداد +GeneralOptimizationDialog.table.col.current = الحالي +GeneralOptimizationDialog.table.col.min = الحد الأدنى +GeneralOptimizationDialog.table.col.max = الحد الأقصى +GeneralOptimizationDialog.export.header = تضمين سطر العنوان +GeneralOptimizationDialog.export.header.ttip = .قم بتضمين سطر العنوان بإعتباره السطر الأول الذي يحتوي على أوصاف الحقول +GeneralOptimizationDialog.export.stability = الإستقرار + + +! Dialog for plotting optimization results +OptimizationPlotDialog.title = نتائج التحسين +OptimizationPlotDialog.lbl.zoomInstructions = أنقر وإسحب لأسفل + لليمين للتكبير , ولأعلى + لليسار للتصغير +OptimizationPlotDialog.plot1d.title = نتائج التحسين +OptimizationPlotDialog.plot1d.series = نتائج التحسين +OptimizationPlotDialog.plot2d.title = مسار التحسين +OptimizationPlotDialog.plot2d.path = مسار التحسين +OptimizationPlotDialog.plot2d.evals = التقييمات +OptimizationPlotDialog.plot.ttip.stability = :الإستقرار +OptimizationPlotDialog.plot.label.optimum = مثالي + +! Optimization parameters +MaximumAltitudeParameter.name = إرتفاع الأوج +MaximumVelocityParameter.name = السرعة القصوى +MaximumAccelerationParameter.name = التسارع الأقصى +StabilityParameter.name = الإستقرار +GroundHitVelocityParameter.name = سرعة الإرتطام بالأرض +LandingDistanceParameter.name = مسافة الهبوط +TotalFlightTimeParameter.name = الوقت الإجمالي للطيران +DeploymentVelocityParameter.name = السرعة في نشر المظلة + + +! Compass directions drawn on a compass rose. +CompassRose.lbl.north = شمال +CompassRose.lbl.east = غرب +CompassRose.lbl.south = جنوب +CompassRose.lbl.west = شرق + +! Compass directions with subdirections. These might not be localized even if the directions on the compass rose are. +CompassSelectionButton.lbl.N = شمال +CompassSelectionButton.lbl.NE = شمال غربي +CompassSelectionButton.lbl.E = غرب +CompassSelectionButton.lbl.SE = جنوب غربي +CompassSelectionButton.lbl.S = جنوب +CompassSelectionButton.lbl.SW = جنوب شرقي +CompassSelectionButton.lbl.W = شرق +CompassSelectionButton.lbl.NW = شمال شرقي + + +SlideShowDialog.btn.next = التالي +SlideShowDialog.btn.prev = السابق + +SlideShowLinkListener.error.title = لم يتم العثور على الجولة الإرشادية +SlideShowLinkListener.error.msg = .عذرا , الجولة المحددة لم تتم كتابتها بعد + +GuidedTourSelectionDialog.title = الجولة الإرشادية +GuidedTourSelectionDialog.lbl.selectTour = حدد جولة الإرشادية +GuidedTourSelectionDialog.lbl.description = :وصف الجولة +GuidedTourSelectionDialog.lbl.length = :عدد شرائح العرض +GuidedTourSelectionDialog.btn.start = !إبدأ الجولة + + +! Custom Fin BMP Importer +CustomFinImport.button.label = الإستيراد من الصورة +CustomFinImport.badFinImage = .صورة الزعانف غير صالحة. تأكد من أن الزعنفة سوداء أو داكنة اللون وتلامس الجزء السفلي من الصورة +CustomFinImport.errorLoadingFile = :خطأ في تحميل الملف +CustomFinImport.errorParsingFile = :خطأ في تحليل صورة الزعنفة +CustomFinImport.undo = إستيراد مجموعة زعانف حرة الشكل +CustomFinImport.error.title = خطأ في تحميل ملف تعريف الزعنفة +CustomFinImport.error.badimage = .لا يمكن إستنتاج شكل الزعنفة من الصورة +CustomFinImport.description = .سيتم تحويل الصورة داخليًا إلى صورة بالأبيض والأسود ,فالأسود للزعنفة, لذا تأكد من إستخدام لون داكن خالص للزعنفة, وأبيض أو لون فاتح للخلفية. يجب أن تلامس الزعنفة الجزء السفلي من الصورة, وهو قاعدة الزعنفة + + +PresetModel.combo.ttip = ,(محددًا في مربع حوار الإعداد المسبق للمكون)حدد نموذجًا مُعدًا مسبقًا من قائمة المفضلة
.أو حدد مخصص عندما لا تكون هناك حاجة إلى إعداد مسبق +PresetModel.lbl.custompreset = مخصص +PresetModel.lbl.partsLib = مكتبة الأجزاء +PresetModel.lbl.partsLib.ttip = .حدد نموذجًا محددًا مسبقًا لمكون الصاروخ هذا من مكتبة الأجزاء + +DecalModel.lbl.select = <لا شئ> +DecalModel.lbl.choose = \u2026 من الملف + +! Export Decal Dialog +ExportDecalDialog.title = تصدير الملصق +ExportDecalDialog.decalList.lbl = الملصق +ExportDecalDialog.exception = ''{0}'' غير قادر على كتابة ملصق للملف +ExportDecalDialog.source.title = لا يوجد ملف مصدر شارات +ExportDecalDialog.source.exception = .''{0}'' غير قادر على كتابة ملصق للملف

هل تريد البحث عن هذا الملف؟ + +! Component Preset Chooser Dialog +ComponentPresetChooserDialog.title = إختر الإعداد المسبق للمكون +ComponentPresetChooserDialog.filter.label = :رشح حسب النص +ComponentPresetChooserDialog.checkbox.filterAftDiameter = تطابق القطر الخلفي +ComponentPresetChooserDialog.checkbox.filterForeDiameter = تطابق القطر الأمامي +ComponentPresetChooserDialog.menu.sortAsc = ترتيب تصاعدي +ComponentPresetChooserDialog.menu.sortDesc = ترتيب تنازلي +ComponentPresetChooserDialog.menu.units = الوحدات +ComponentPresetChooserDialog.checkbox.showLegacyCheckBox = إظهار قاعدة البيانات القديمة +ComponentPresetChooserDialog.lbl.favorites = حدد هذا الإعداد لإضافة إعداد مسبق إلى القائمة المنسدلة المعدة مسبقًا في مربع حوار تعديل المكون
.قم بتطبيق إعداد مسبق مباشرة بالنقر فوقه نقرًا مزدوجًا أو بتحديده وإغلاق هذه النافذة +ComponentPresetChooserDialog.checkbox.alwaysOpenPreset = %s إفتح مربع الحوار هذا دائمًا عند إنشاء ملف +table.column.Favorite = المفضلة +table.column.Legacy = إرث +table.column.Manufacturer = الصانع +table.column.PartNo = رقم القطعة +table.column.Description = الوصف +table.column.Type = النوع +table.column.Length = الطول +table.column.Width = العرض +table.column.InnerDiameter = القطر الداخلي +table.column.OuterDiameter = القطر الخارجي +table.column.AftOuterDiameter = القطر الخارجي الأمامي +table.column.AftShoulderLength = طول الكتف الأمامي +table.column.AftShoulderDiameter = قطر الكتف الخلفي +table.column.ForeShoulderLength = طول الكتف الأمامي +table.column.ForeShoulderDiameter = قطر الكتف الأمامي +table.column.ForeOuterDiameter = القطر الخارجي الأمامي +table.column.BaseHeight = إرتفاع القاعدة +table.column.FlangeHeight = إرتفاع الحافة الأنبوبية +table.column.ScrewHeight = طول البرغي +table.column.Shape = الشكل +table.column.Material = المادة +table.column.Finish = النهاية +table.column.Thickness = السماكة +table.column.Filled = مملوء +table.column.Mass = الكتلة +table.column.ScrewMass = كتلة البرغي +table.column.NutMass = كتلة المسمار +table.column.Diameter = القطر +table.column.Sides = الجوانب +table.column.LineCount = عدد الأسطر +table.column.LineLength = طول الخط +table.column.LineMaterial = مادة الخط +table.column.CD = معامل السحب + +! Edit Decal Dialog +EditDecalDialog.title = تحرير ملصق +EditDecalDialog.lbl.prompt = إظهار موجه +EditDecalDialog.lbl.select = حدد محررا +EditDecalDialog.lbl.system = إستخدم المحرر الإفتراضي +EditDecalDialog.lbl.cmdline = سطر الأوامر +EditDecalDialog.lbl.cmdline.help = ''%%'' سيتم إستبدال إسم الملف بـ +EditDecalDialog.lbl.always = إستخدم هذه الإعدادات دائمًا +EditDecalDialog.btn.chooser = حدد برنامج محرر الرسومات +EditDecalHelper.createFileException = {0} لا يمكن إنشاء ملف مؤقت +EditDecalHelper.launchSystemEditorException = لا يمكن تشغيل محرر رسومات النظام +EditDecalHelper.launchCustomEditorException = ''{0}'' لا يمكن تشغيل محرر الرسومات باستخدام الأمر +EditDecalHelper.editPreferencesHelp = .يمكن تعديل المحرر المستخدم في مربع حوار التفضيلات + +MotorConfigurationPanel.lbl.motorMounts = حوامل المحركات +MotorConfigurationPanel.lbl.motorConfiguration = إعدادات المحرك +MotorConfigurationPanel.btn.deleteMotor = إحذف محركا +MotorConfigurationPanel.btn.selectMotor = حدد محركا +MotorConfigurationPanel.btn.selectIgnition = حدد الإشتعال +MotorConfigurationPanel.btn.resetIgnition = إعادة الإشتعال +MotorConfigurationPanel.lbl.nomotors = .لم يتم تحديد حوامل المحرك. حدد أنبوبًا واحدًا أو أكثر من القائمة الموجودة على اليسار عند تركيب المحرك + +MotorConfigurationTableModel.table.ignition.default = إفتراضي ({0}) +RecoveryConfigurationPanel.table.deployment.default = إفتراضي ({0}) +SeparationConfigurationPanel.table.separation.default = إفتراضي ({0}) + +IgnitionSelectionDialog.opt.title = :ما هي إعدادات الطيران التي تأثرت +IgnitionSelectionDialog.opt.default = قم بتغيير كل التوصيف بإستخدام حدث الإشعال الإفتراضي +IgnitionSelectionDialog.opt.override = إعدادات الطيران فقط {0}تجاوز الـ + +DeploymentSelectionDialog.opt.title = :ما هي إعدادات الطيران التي تأثرت +DeploymentSelectionDialog.opt.default = قم بتغيير كل الإعدادات بإستخدام حدث النشر الإفتراضي +DeploymentSelectionDialog.opt.override = إعدادات الطيران فقط {0}تجاوز الـ + +SeparationSelectionDialog.opt.title = :ما هي إعدادات الطيران التي تأثرت +SeparationSelectionDialog.opt.default = قم بتغيير كل الإعدادات بإستخدام حدث الفصل الإفتراضي +SeparationSelectionDialog.opt.override = إعدادات الطيران فقط {0}تجاوز الـ + +MotorConfigurationPanel.description = .حدد المحركات وأحداث إشتعال المحرك لإعدادات الرحلة المحددة
:حوامل المحرك .حدد المكونات التي تعمل كحوامل محرك
.إعدادات المحرك .حدد حدث المحرك والإشتعال لكل حامل محرك + +MotorDescriptionSubstitutor.description = المحركات في الإعدادات + + +!Photo Panel +PhotoFrame.title = إستوديو الصور +PhotoFrame.desc = قم بإنشاء صور ثلاثية الأبعاد واقعية للصاروخ +PhotoFrame.menu.file.save = \u2026 إحفظ الصورة +PhotoFrame.fileFilter.png = صورة بي إن جي +PhotoFrame.menu.edit.copy = نسخ الصورة +PhotoFrame.menu.edit.copy.desc = نسخ الصورة إلى الحافظة +PhotoFrame.menu.edit.settings = إعدادات الصورة +PhotoFrame.menu.edit.unk = إعداد غير معروف +PhotoFrame.menu.window = نافذة +PhotoFrame.menu.window.size = الحجم +PhotoFrame.menu.window.size.portrait = لَوحَة {0} + +!Photo Settings +PhotoSettingsConfig.title = الإعدادات +PhotoSettingsConfig.colorChooser.title = منتقي الألوان + +PhotoSettingsConfig.tab.orientation = الإلتفاف +PhotoSettingsConfig.lbl.rocket = صاروخ +PhotoSettingsConfig.lbl.pitch = الميلان على المحور س +PhotoSettingsConfig.lbl.yaw = الإنحراف على المحور ي +PhotoSettingsConfig.lbl.roll = الإلتفاف على المحور ز +PhotoSettingsConfig.lbl.advance = متقدم +PhotoSettingsConfig.lbl.camera = (قمرة) كاميرا +PhotoSettingsConfig.lbl.vAz = رؤية السمت +PhotoSettingsConfig.lbl.vAlt = رؤية الإرتفاع +PhotoSettingsConfig.lbl.vDist = رؤية المسافة +PhotoSettingsConfig.lbl.fov = FoV + +PhotoSettingsConfig.tab.environment = البيئة +PhotoSettingsConfig.lbl.light = الضوء +PhotoSettingsConfig.lbl.sun = أشعة الشمس +PhotoSettingsConfig.lbl.amb = الأجواء +PhotoSettingsConfig.lbl.lightAz = ضوء السمت +PhotoSettingsConfig.lbl.lightAlt = إرتفاع الضوء +PhotoSettingsConfig.lbl.sky = السماء +PhotoSettingsConfig.lbl.skyColor = لون السماء +PhotoSettingsConfig.lbl.skyImage = صورة السماء +PhotoSettingsConfig.lbl.skyCredit = مصدر الصورة + +PhotoSettingsConfig.tab.effects = المؤثرات +PhotoSettingsConfig.lbl.smokeFlame = الدخان واللهب +PhotoSettingsConfig.lbl.smoke = دخان +PhotoSettingsConfig.lbl.smokeOpacity = عتامة الدخان +PhotoSettingsConfig.lbl.flame = اللهب +PhotoSettingsConfig.lbl.flameAspect = نسبة اللهب +PhotoSettingsConfig.lbl.sparks = الشرارات +PhotoSettingsConfig.lbl.sparkConcentration = تركيز الشرارة +PhotoSettingsConfig.lbl.sparkWeight = وزن الشرارة +PhotoSettingsConfig.lbl.exhaustScale = مقياس العادم +PhotoSettingsConfig.lbl.effects = المؤثرات +PhotoSettingsConfig.lbl.speed = السرعة From d85eb8a13fea91616cba0c8abc6a72ea810e9434 Mon Sep 17 00:00:00 2001 From: H Craig Miller <68821492+hcraigmiller@users.noreply.github.com> Date: Sun, 18 Dec 2022 14:35:11 -0800 Subject: [PATCH 16/17] Update RailButton_Database.orc Add Wildman 1515 rail buttons --- .../RailButton_Database.orc | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/swing/resources-src/datafiles/components-openrocket/RailButton_Database.orc b/swing/resources-src/datafiles/components-openrocket/RailButton_Database.orc index bca582abd..fcc33ea21 100644 --- a/swing/resources-src/datafiles/components-openrocket/RailButton_Database.orc +++ b/swing/resources-src/datafiles/components-openrocket/RailButton_Database.orc @@ -146,7 +146,25 @@ 1.355 2.720 - + + + + Wildman Rocketry + 2052-LG + 1 Piece 1515 Rail Button, Countersunk 10-32 Screw, and T-Nut + Delrin + Polished + 0.621 + 0.308 + 0.6845 + 0.338 + 0.1675 + 0.0000 + + 3.215 + 3.795 + 2.195 + From 593ea50a81b3042feeefe53dd0aae4ee6102eff2 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Mon, 19 Dec 2022 00:06:08 +0100 Subject: [PATCH 17/17] Add Arabic translation contribution info --- README.md | 1 + swing/src/net/sf/openrocket/gui/dialogs/AboutDialog.java | 1 + swing/src/net/sf/openrocket/gui/util/SwingPreferences.java | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e39097ea7..b7a8e43dc 100644 --- a/README.md +++ b/README.md @@ -69,3 +69,4 @@ OpenRocket needs help to become even better. Implementing features, writing docu - Vladimir Beran - Polish Rocketry Society / Łukasz & Alex Kazanski - Sibo Van Gool +- Mohamed Amin Elkebsi diff --git a/swing/src/net/sf/openrocket/gui/dialogs/AboutDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/AboutDialog.java index cebbdf4cf..a6683e2c4 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/AboutDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/AboutDialog.java @@ -56,6 +56,7 @@ public class AboutDialog extends JDialog { "Vladimir Beran (Czech)
" + "Polish Rocketry Society / \u0141ukasz & Alex Kazanski (Polish)
" + "Sibo Van Gool (Dutch)
" + + "Mohamed Amin Elkebsi (Arabic)
" + "
" + "See all contributors at
" + href("https://github.com/openrocket/openrocket/graphs/contributors", false, false) + "
" + "
" + diff --git a/swing/src/net/sf/openrocket/gui/util/SwingPreferences.java b/swing/src/net/sf/openrocket/gui/util/SwingPreferences.java index 802570ee4..4a42ffdb9 100644 --- a/swing/src/net/sf/openrocket/gui/util/SwingPreferences.java +++ b/swing/src/net/sf/openrocket/gui/util/SwingPreferences.java @@ -43,7 +43,7 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences { private static final List SUPPORTED_LOCALES; static { List list = new ArrayList(); - for (String lang : new String[] { "en", "de", "es", "fr", "it", "nl", "ru", "cs", "pl", "ja", "pt", "tr" }) { + for (String lang : new String[] { "en", "ar", "de", "es", "fr", "it", "nl", "ru", "cs", "pl", "ja", "pt", "tr" }) { list.add(new Locale(lang)); } list.add(new Locale("zh", "CN"));