From 13dc5289ffc99184b06282029ee82421238543b6 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Mon, 23 Mar 2015 07:02:10 -0500 Subject: [PATCH 01/10] Updated thrustcurves. --- .../thrustcurves/manual/AT_F101T.eng | 26 ++++++ .../thrustcurves/thrustcurve.org/00INDEX.txt | 87 +++++++++++++++++- .../thrustcurve.org/AeroTech_G25.eng | 60 ++++-------- .../thrustcurve.org/AeroTech_G25_1.eng | 60 ++++++++---- .../thrustcurve.org/AeroTech_H45.eng | 43 +++------ .../thrustcurve.org/AeroTech_H45_1.eng | 43 ++++++--- .../thrustcurve.org/AeroTech_I65.eng | 45 +++------ .../thrustcurve.org/AeroTech_I65_1.eng | 45 ++++++--- .../thrustcurve.org/AeroTech_M1780.eng | 79 ++++++++-------- .../thrustcurve.org/AeroTech_M1780_1.eng | 65 +++++-------- .../thrustcurve.org/Cesaroni_F31.rse | 27 ++++++ .../thrustcurve.org/Cesaroni_M1590.eng | 47 ++++++---- .../thrustcurve.org/Cesaroni_M1590.rse | 12 +-- .../thrustcurves/thrustcurve.org/Estes_B4.eng | 65 +++++++------ .../thrustcurve.org/Estes_B4_1.eng | 34 +++++++ .../thrustcurves/thrustcurve.org/Estes_C6.eng | 56 +++++------ .../thrustcurve.org/Estes_C6_1.eng | 33 +++++++ .../thrustcurves/thrustcurve.org/GR_L1112.eng | 30 ++++++ .../thrustcurves/thrustcurve.org/GR_M1952.eng | 33 +++++++ .../thrustcurve.org/Loki_J1026.eng | 27 ++++++ .../thrustcurve.org/Loki_K1127.eng | 37 ++++++++ .../thrustcurve.org/Loki_K527.eng | 27 ++++++ .../thrustcurve.org/Loki_L840.eng | 25 +++++ .../thrustcurve.org/Loki_M1650.eng | 22 +++++ .../thrustcurve.org/Loki_M1969.eng | 28 ++++++ .../thrustcurve.org/Loki_M3464.eng | 25 +++++ .../thrustcurve.org/Quest_Micro_Maxx.eng | 35 +++++++ .../thrustcurve.org/Quest_Micro_Maxx_1.eng | 35 +++++++ .../thrustcurve.org/Quest_Micro_Maxx_1.rse | 49 ++++++++++ .../thrustcurve.org/Quest_Micro_Maxx_2.eng | 39 ++++++++ .../datafiles/thrustcurves/thrustcurves.ser | Bin 2725848 -> 5390393 bytes 31 files changed, 914 insertions(+), 325 deletions(-) create mode 100644 core/resources-src/datafiles/thrustcurves/manual/AT_F101T.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_F31.rse create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4_1.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6_1.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_L1112.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_M1952.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_J1026.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K1127.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K527.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_L840.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1650.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1969.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M3464.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.eng create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.rse create mode 100644 core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_2.eng diff --git a/core/resources-src/datafiles/thrustcurves/manual/AT_F101T.eng b/core/resources-src/datafiles/thrustcurves/manual/AT_F101T.eng new file mode 100644 index 000000000..0afabd315 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/manual/AT_F101T.eng @@ -0,0 +1,26 @@ +; TODO: Length and weights taken from F72!! + +; Based on +; http://www.aerotech-rocketry.com/customersite/resource_library/Instructions/MR-SU_Instructions/d-f_non-std_su_in_21002.pdf + +; Made by Sampo Niskanen +F101T 24 124 5-10-15 0.0368 0.0742 AT + 0.04 85.95 + 0.069 83.4 + 0.129 86.461 + 0.202 94.622 + 0.274 100.743 + 0.354 104.569 + 0.443 106.099 + 0.446 102.783 + 0.546 96.662 + 0.575 90.031 + 0.602 89.011 + 0.625 84.675 + 0.671 80.85 + 0.731 76.259 + 0.771 58.406 + 0.807 33.921 + 0.85 18.108 + 0.893 11.477 + 0.942 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/00INDEX.txt b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/00INDEX.txt index c27bc24cb..b8de3071f 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/00INDEX.txt +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/00INDEX.txt @@ -1,5 +1,5 @@ Rocket motor simulation data downloaded from ThrustCurve.org. -This ZIP file contains 1645 simulator data files. +This ZIP file contains 1656 simulator data files. For more info, please see http://www.thrustcurve.org/ AMW_I195.eng @@ -7434,14 +7434,14 @@ Cesaroni_M1590.eng Designation: 7545M1590-P Data Format: RASP Data Source: cert - Contributor: Andre Choquette + Contributor: Mark Koelsch Cesaroni_M1590.rse Manufacturer: Cesaroni Technology Designation: 7545M1590-P Data Format: RockSim Data Source: cert - Contributor: Andre Choquette + Contributor: Mark Koelsch Cesaroni_M1670.eng Manufacturer: Cesaroni Technology @@ -9394,7 +9394,7 @@ Estes_B4.eng Designation: B4 Data Format: RASP Data Source: user - Contributor: John Coker + Contributor: Nicholas Domansky Estes_B4.rse Manufacturer: Estes Industries @@ -9403,6 +9403,13 @@ Estes_B4.rse Data Source: user Contributor: John Coker +Estes_B4_1.eng + Manufacturer: Estes Industries + Designation: B4 + Data Format: RASP + Data Source: user + Contributor: John Coker + Estes_B6.eng Manufacturer: Estes Industries Designation: B6 @@ -9450,7 +9457,7 @@ Estes_C6.eng Designation: C6 Data Format: RASP Data Source: user - Contributor: John Coker + Contributor: Nicholas Domansky Estes_C6.rse Manufacturer: Estes Industries @@ -9459,6 +9466,13 @@ Estes_C6.rse Data Source: user Contributor: John Coker +Estes_C6_1.eng + Manufacturer: Estes Industries + Designation: C6 + Data Format: RASP + Data Source: user + Contributor: John Coker + Estes_D11.eng Manufacturer: Estes Industries Designation: D11 @@ -9732,6 +9746,13 @@ GR_L1065.eng Data Source: mfr Contributor: John Coker +GR_L1112.eng + Manufacturer: Gorilla Rocket Motors + Designation: L1112BT + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + GR_L1150.rse Manufacturer: Gorilla Rocket Motors Designation: L1150WC @@ -9802,6 +9823,13 @@ GR_M1665.eng Data Source: mfr Contributor: John Coker +GR_M1952.eng + Manufacturer: Gorilla Rocket Motors + Designation: M1952BT + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + GR_O2700.eng Manufacturer: Gorilla Rocket Motors Designation: O2700BL @@ -10635,6 +10663,13 @@ Loki_J1000.rse Data Source: mfr Contributor: Mark Koelsch +Loki_J1026.eng + Manufacturer: Loki Research + Designation: J1026 CT + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + Loki_J175.eng Manufacturer: Loki Research Designation: J175-LW @@ -10754,6 +10789,13 @@ Loki_J820.rse Data Source: user Contributor: John Coker +Loki_K1127.eng + Manufacturer: Loki Research + Designation: K1127LB + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + Loki_K250.eng Manufacturer: Loki Research Designation: K250-LW @@ -10782,6 +10824,13 @@ Loki_K350.rse Data Source: user Contributor: John Coker +Loki_K527.eng + Manufacturer: Loki Research + Designation: K527LR + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + Loki_K690.eng Manufacturer: Loki Research Designation: K690-SF @@ -10852,6 +10901,13 @@ Loki_L780.eng Data Source: mfr Contributor: John Coker +Loki_L840.eng + Manufacturer: Loki Research + Designation: L840CT + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + Loki_L930.eng Manufacturer: Loki Research Designation: L930-LW @@ -10873,6 +10929,13 @@ Loki_M1200.eng Data Source: mfr Contributor: John Coker +Loki_M1650.eng + Manufacturer: Loki Research + Designation: M1650LC + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + Loki_M1882.eng Manufacturer: Loki Research Designation: M1882-LW @@ -10887,6 +10950,13 @@ Loki_M1882.rse Data Source: user Contributor: John Coker +Loki_M1969.eng + Manufacturer: Loki Research + Designation: M1969SF + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + Loki_M2550.eng Manufacturer: Loki Research Designation: M2550-LB @@ -10915,6 +10985,13 @@ Loki_M3000.rse Data Source: mfr Contributor: Mark Koelsch +Loki_M3464.eng + Manufacturer: Loki Research + Designation: M3464LB + Data Format: RASP + Data Source: cert + Contributor: Mark Koelsch + Loki_M900.rse Manufacturer: Loki Research Designation: M900-LR diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25.eng index 02d639e1b..0fdfa1d30 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25.eng @@ -1,41 +1,19 @@ -; -;Aerotech G25 RASP.ENG file made from NAR published data -;File produced July 4, 2000 -;The total impulse, peak thrust, average thrust and burn time are -;the same as the averaged static test data on the NAR web site in -;the certification file. The curve drawn with these data points is as -;close to the certification curve as can be with such a limited -;number of points (32) allowed with wRASP up to v1.6. -G25 29 124 5-10-15 0.0625 0.1197 AeroTech -0.035 30.499 -0.047 36.712 -0.059 41.18 -0.13 40.669 -0.177 38.969 -0.295 38.969 -0.343 40.947 -0.413 40.38 -0.437 38.69 -0.484 39.824 -0.532 37.845 -0.65 37.557 -0.721 38.969 -0.803 38.69 -0.85 37.279 -0.98 39.535 -1.063 36.434 -1.098 38.124 -1.252 37.845 -1.37 37.279 -1.583 37 -1.819 35.3 -1.984 33.61 -2.185 31.344 -2.315 28.809 -2.622 24.286 -3.024 18.917 -3.39 13.838 -3.839 7.624 -4.323 4.518 -4.783 2.541 -5.3 0 +G25W-10A 29 152.4 10 0.097 0.17 AT + 0.01 38.046 + 0.029 21.768 + 0.11 30.475 + 0.239 35.775 + 0.496 40.696 + 0.568 42.116 + 0.592 45.429 + 0.749 46.186 + 0.997 45.713 + 1.255 44.198 + 1.498 39.939 + 1.999 31.421 + 2.501 23.093 + 3.006 14.196 + 3.503 7.288 + 3.999 4.07 + 4.371 1.988 + 4.414 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25_1.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25_1.eng index 0fdfa1d30..02d639e1b 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25_1.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_G25_1.eng @@ -1,19 +1,41 @@ -G25W-10A 29 152.4 10 0.097 0.17 AT - 0.01 38.046 - 0.029 21.768 - 0.11 30.475 - 0.239 35.775 - 0.496 40.696 - 0.568 42.116 - 0.592 45.429 - 0.749 46.186 - 0.997 45.713 - 1.255 44.198 - 1.498 39.939 - 1.999 31.421 - 2.501 23.093 - 3.006 14.196 - 3.503 7.288 - 3.999 4.07 - 4.371 1.988 - 4.414 0.0 +; +;Aerotech G25 RASP.ENG file made from NAR published data +;File produced July 4, 2000 +;The total impulse, peak thrust, average thrust and burn time are +;the same as the averaged static test data on the NAR web site in +;the certification file. The curve drawn with these data points is as +;close to the certification curve as can be with such a limited +;number of points (32) allowed with wRASP up to v1.6. +G25 29 124 5-10-15 0.0625 0.1197 AeroTech +0.035 30.499 +0.047 36.712 +0.059 41.18 +0.13 40.669 +0.177 38.969 +0.295 38.969 +0.343 40.947 +0.413 40.38 +0.437 38.69 +0.484 39.824 +0.532 37.845 +0.65 37.557 +0.721 38.969 +0.803 38.69 +0.85 37.279 +0.98 39.535 +1.063 36.434 +1.098 38.124 +1.252 37.845 +1.37 37.279 +1.583 37 +1.819 35.3 +1.984 33.61 +2.185 31.344 +2.315 28.809 +2.622 24.286 +3.024 18.917 +3.39 13.838 +3.839 7.624 +4.323 4.518 +4.783 2.541 +5.3 0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45.eng index 9077b1b00..b8b3ad9cf 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45.eng @@ -1,30 +1,13 @@ -; AeroTech H45W -; converted from TMT test stand data 1998 (www.tripoli.org) -; provided by ThrustCurve.org (www.thrustcurve.org) -H45W 38 194 0 0.193984 0.294784 AT - 0.141 62.554 - 0.424 63.504 - 0.707 65.913 - 0.992 68.370 - 1.276 69.315 - 1.559 68.523 - 1.843 67.231 - 2.127 65.705 - 2.411 63.154 - 2.695 59.210 - 2.979 55.600 - 3.264 50.790 - 3.547 45.237 - 3.830 39.835 - 4.115 34.562 - 4.399 29.213 - 4.682 24.720 - 4.967 20.616 - 5.251 17.475 - 5.534 14.498 - 5.818 12.697 - 6.102 10.792 - 6.386 9.229 - 6.670 7.754 - 6.954 6.075 - 7.239 0.000 +; From AT DMS announcement May 2014. +H45 38 202.7 10 0.18 0.364 AT + 0.04 84.004 + 0.854 86.004 + 1.377 84.804 + 2.046 79.204 + 2.69 66.003 + 3.286 51.603 + 4.414 28.401 + 5.042 16.001 + 5.429 9.2 + 6.113 6.4 + 6.186 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45_1.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45_1.eng index b8b3ad9cf..9077b1b00 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45_1.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_H45_1.eng @@ -1,13 +1,30 @@ -; From AT DMS announcement May 2014. -H45 38 202.7 10 0.18 0.364 AT - 0.04 84.004 - 0.854 86.004 - 1.377 84.804 - 2.046 79.204 - 2.69 66.003 - 3.286 51.603 - 4.414 28.401 - 5.042 16.001 - 5.429 9.2 - 6.113 6.4 - 6.186 0.0 +; AeroTech H45W +; converted from TMT test stand data 1998 (www.tripoli.org) +; provided by ThrustCurve.org (www.thrustcurve.org) +H45W 38 194 0 0.193984 0.294784 AT + 0.141 62.554 + 0.424 63.504 + 0.707 65.913 + 0.992 68.370 + 1.276 69.315 + 1.559 68.523 + 1.843 67.231 + 2.127 65.705 + 2.411 63.154 + 2.695 59.210 + 2.979 55.600 + 3.264 50.790 + 3.547 45.237 + 3.830 39.835 + 4.115 34.562 + 4.399 29.213 + 4.682 24.720 + 4.967 20.616 + 5.251 17.475 + 5.534 14.498 + 5.818 12.697 + 6.102 10.792 + 6.386 9.229 + 6.670 7.754 + 6.954 6.075 + 7.239 0.000 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65.eng index 6e0111c66..4808b3e45 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65.eng @@ -1,30 +1,15 @@ -; AeroTech I65W -; converted from TMT test stand data 1997 (www.tripoli.org) -; provided by ThrustCurve.org (www.thrustcurve.org) -I65W 54 235 0 0.41216 0.7616 AT - 0.180 125.414 - 0.544 139.304 - 0.908 145.369 - 1.273 148.283 - 1.638 146.745 - 2.002 139.049 - 2.367 131.200 - 2.731 123.276 - 3.096 113.454 - 3.460 102.368 - 3.825 90.210 - 4.190 78.084 - 4.554 66.812 - 4.919 55.780 - 5.283 47.281 - 5.648 39.154 - 6.012 32.528 - 6.377 27.069 - 6.742 22.099 - 7.106 18.095 - 7.471 14.819 - 7.835 12.097 - 8.200 9.763 - 8.565 7.875 - 8.929 5.999 - 9.294 0.000 +; From AT DMS announcement May 2014. +I65 54 218 10 0.377 0.752 AT + 0.023 148.274 + 0.211 196.341 + 0.398 167.827 + 0.797 149.903 + 1.395 135.239 + 2.238 122.204 + 3.199 99.392 + 4.711 69.249 + 5.367 48.882 + 6.246 29.329 + 6.926 15.479 + 7.395 11.406 + 8.496 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65_1.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65_1.eng index 4808b3e45..6e0111c66 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65_1.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_I65_1.eng @@ -1,15 +1,30 @@ -; From AT DMS announcement May 2014. -I65 54 218 10 0.377 0.752 AT - 0.023 148.274 - 0.211 196.341 - 0.398 167.827 - 0.797 149.903 - 1.395 135.239 - 2.238 122.204 - 3.199 99.392 - 4.711 69.249 - 5.367 48.882 - 6.246 29.329 - 6.926 15.479 - 7.395 11.406 - 8.496 0.0 +; AeroTech I65W +; converted from TMT test stand data 1997 (www.tripoli.org) +; provided by ThrustCurve.org (www.thrustcurve.org) +I65W 54 235 0 0.41216 0.7616 AT + 0.180 125.414 + 0.544 139.304 + 0.908 145.369 + 1.273 148.283 + 1.638 146.745 + 2.002 139.049 + 2.367 131.200 + 2.731 123.276 + 3.096 113.454 + 3.460 102.368 + 3.825 90.210 + 4.190 78.084 + 4.554 66.812 + 4.919 55.780 + 5.283 47.281 + 5.648 39.154 + 6.012 32.528 + 6.377 27.069 + 6.742 22.099 + 7.106 18.095 + 7.471 14.819 + 7.835 12.097 + 8.200 9.763 + 8.565 7.875 + 8.929 5.999 + 9.294 0.000 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780.eng index a3e98ccd3..6bc79404d 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780.eng @@ -1,37 +1,42 @@ -; M1780NT Redesign and recert -M1780NT-PS 75 665 P 2.46 4.649 AT - 0.014 1112.055 - 0.015 1497.932 - 0.022 1783.542 - 0.036 2105.612 - 0.047 2157.265 - 0.066 2169.419 - 0.104 2123.843 - 0.14 2108.651 - 0.164 2135.996 - 0.197 2129.92 - 0.238 2157.265 - 0.263 2205.88 - 0.274 2169.419 - 0.312 2145.112 - 0.411 2111.689 - 0.595 2081.305 - 0.899 2075.228 - 1.299 2047.883 - 1.601 1996.23 - 1.899 1938.5 - 2.058 1889.886 - 2.201 1813.926 - 2.3 1753.158 - 2.423 1701.505 - 2.467 1622.506 - 2.508 1555.662 - 2.566 1336.897 - 2.62 1112.055 - 2.67 893.29 - 2.724 668.448 - 2.755 568.181 - 2.812 486.144 - 2.9 267.379 - 2.999 75.96 - 3.029 0.0 +; AT M1780NT 1" Core Revised +M1780NT 75 665 P 2.371 4.606 AT + 0.0090 1337.154 + 0.026 2005.731 + 0.04 2106.521 + 0.046 2163.636 + 0.085 2156.916 + 0.108 2126.679 + 0.134 2113.24 + 0.168 2130.039 + 0.205 2126.679 + 0.259 2197.233 + 0.299 2156.916 + 0.347 2130.039 + 0.399 2123.32 + 0.495 2103.161 + 0.595 2089.723 + 0.697 2079.644 + 0.8 2083.003 + 0.9 2076.284 + 0.999 2069.565 + 1.201 2056.126 + 1.398 2029.248 + 1.603 2002.371 + 1.799 1965.414 + 1.998 1904.94 + 2.2 1817.588 + 2.3 1757.114 + 2.354 1723.517 + 2.405 1713.438 + 2.46 1629.446 + 2.502 1558.893 + 2.571 1333.794 + 2.622 1115.415 + 2.67 890.316 + 2.724 665.217 + 2.758 571.146 + 2.798 507.312 + 2.83 446.838 + 2.901 265.415 + 3.003 73.913 + 3.035 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780_1.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780_1.eng index 6bc79404d..42b6beb7a 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780_1.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/AeroTech_M1780_1.eng @@ -1,42 +1,23 @@ -; AT M1780NT 1" Core Revised -M1780NT 75 665 P 2.371 4.606 AT - 0.0090 1337.154 - 0.026 2005.731 - 0.04 2106.521 - 0.046 2163.636 - 0.085 2156.916 - 0.108 2126.679 - 0.134 2113.24 - 0.168 2130.039 - 0.205 2126.679 - 0.259 2197.233 - 0.299 2156.916 - 0.347 2130.039 - 0.399 2123.32 - 0.495 2103.161 - 0.595 2089.723 - 0.697 2079.644 - 0.8 2083.003 - 0.9 2076.284 - 0.999 2069.565 - 1.201 2056.126 - 1.398 2029.248 - 1.603 2002.371 - 1.799 1965.414 - 1.998 1904.94 - 2.2 1817.588 - 2.3 1757.114 - 2.354 1723.517 - 2.405 1713.438 - 2.46 1629.446 - 2.502 1558.893 - 2.571 1333.794 - 2.622 1115.415 - 2.67 890.316 - 2.724 665.217 - 2.758 571.146 - 2.798 507.312 - 2.83 446.838 - 2.901 265.415 - 3.003 73.913 - 3.035 0.0 +M1780 75 665 P 2.56 4.715 AT + 0.028 2204.193 + 0.118 2566.025 + 0.173 2566.025 + 0.341 2214.151 + 0.44 2144.44 + 0.636 2114.564 + 1.34 2134.482 + 1.395 2204.193 + 1.648 2121.203 + 1.841 2041.534 + 1.874 1895.473 + 2.127 1643.186 + 2.353 1517.042 + 2.584 1460.61 + 2.672 1347.744 + 2.763 1068.901 + 2.829 723.666 + 2.939 438.183 + 2.999 292.122 + 3.101 172.617 + 3.272 36.515 + 3.5 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_F31.rse b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_F31.rse new file mode 100644 index 000000000..70d60e7d1 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_F31.rse @@ -0,0 +1,27 @@ + + + + CTI 56-F31-CL-12A + + + + + + + + + + + + + + + + + + diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.eng index 81c65efa8..d7442f0ca 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.eng @@ -1,21 +1,28 @@ -; Pro75-6G 7545M1590-CL P -M1590-CL 75 893 P 3.1590000000000003 5.223 CTI - 0.028 1210.592 - 0.059 2024.222 - 0.163 2235.371 - 0.214 2302.939 - 0.492 2153.727 - 0.767 2091.79 - 1.015 2103.051 - 1.335 2083.344 - 1.571 2029.852 - 2.366 1779.288 - 3.488 1534.354 - 3.755 1030.41 - 3.895 960.027 - 4.12 650.341 - 4.207 591.219 - 4.44 340.655 - 4.665 199.888 - 4.778 90.091 +M1590 75 893 P 3.59 6.0760000000000005 CTI + 0.053 2045.469 + 0.119 2130.875 + 0.133 2220.551 + 0.226 2305.957 + 0.363 2241.903 + 0.438 2177.849 + 0.571 2130.875 + 0.748 2092.443 + 0.973 2088.172 + 1.225 2100.983 + 1.433 2079.632 + 1.597 2032.659 + 1.995 1883.198 + 2.411 1759.36 + 3.362 1567.197 + 3.491 1533.035 + 3.721 1076.113 + 3.769 1012.059 + 3.871 973.626 + 3.946 896.761 + 4.074 687.517 + 4.132 640.544 + 4.203 619.192 + 4.504 294.65 + 4.641 226.325 + 4.716 170.812 4.8 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.rse b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.rse index 5149f7bff..3ac75cefd 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.rse +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Cesaroni_M1590.rse @@ -1,11 +1,11 @@ - + Pro75-6G 7545M1590-CL P diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4.eng index 64b099809..07eaa5472 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4.eng @@ -1,34 +1,31 @@ -; -;Estes B4 RASP.ENG file made from NAR published data -;File produced October 3, 2000 -;The total impulse, peak thrust, average thrust and burn time are -;the same as the averaged static test data on the NAR web site in -;the certification file. The curve drawn with these data points is as -;close to the certification curve as can be with such a limited -;number of points (32) allowed with wRASP up to v1.6. -B4 18 70 2-4 0.006 0.0189 Estes -0.02 0.418 -0.04 1.673 -0.065 4.076 -0.085 6.69 -0.105 9.304 -0.119 11.496 -0.136 12.75 -0.153 11.916 -0.173 10.666 -0.187 9.304 -0.198 7.214 -0.207 5.645 -0.226 4.809 -0.258 4.182 -0.326 3.763 -0.422 3.554 -0.549 3.345 -0.665 3.345 -0.776 3.345 -0.863 3.345 -0.94 3.449 -0.991 3.449 -1.002 2.404 -1.01 1.254 -1.03 0 +; B4-4 +B4-4 18 70 P 0.006 0.0195 E + 0.058 2.361 + 0.102 2.921 + 0.122 3.797 + 0.15 5.866 + 0.18 8.373 + 0.199 9.882 + 0.208 10.88 + 0.216 11.367 + 0.238 11.245 + 0.245 10.832 + 0.262 8.982 + 0.293 6.134 + 0.322 5.306 + 0.357 4.917 + 0.388 4.795 + 0.416 4.746 + 0.46 4.625 + 0.502 4.576 + 0.544 4.357 + 0.575 4.503 + 0.605 4.527 + 0.674 4.552 + 0.731 4.454 + 0.88 4.454 + 0.915 4.503 + 0.96 4.406 + 1.0 4.065 + 1.047 2.556 + 1.049 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4_1.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4_1.eng new file mode 100644 index 000000000..64b099809 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_B4_1.eng @@ -0,0 +1,34 @@ +; +;Estes B4 RASP.ENG file made from NAR published data +;File produced October 3, 2000 +;The total impulse, peak thrust, average thrust and burn time are +;the same as the averaged static test data on the NAR web site in +;the certification file. The curve drawn with these data points is as +;close to the certification curve as can be with such a limited +;number of points (32) allowed with wRASP up to v1.6. +B4 18 70 2-4 0.006 0.0189 Estes +0.02 0.418 +0.04 1.673 +0.065 4.076 +0.085 6.69 +0.105 9.304 +0.119 11.496 +0.136 12.75 +0.153 11.916 +0.173 10.666 +0.187 9.304 +0.198 7.214 +0.207 5.645 +0.226 4.809 +0.258 4.182 +0.326 3.763 +0.422 3.554 +0.549 3.345 +0.665 3.345 +0.776 3.345 +0.863 3.345 +0.94 3.449 +0.991 3.449 +1.002 2.404 +1.01 1.254 +1.03 0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6.eng index f7cf3a389..1d704125b 100644 --- a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6.eng +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6.eng @@ -1,33 +1,23 @@ -; -;Estes C6 RASP.ENG file made from NAR published data -;File produced October 3, 2000 -;The total impulse, peak thrust, average thrust and burn time are -;the same as the averaged static test data on the NAR web site in -;the certification file. The curve drawn with these data points is as -;close to the certification curve as can be with such a limited -;number of points (32) allowed with wRASP up to v1.6. -C6 18 70 0-3-5-7 0.0108 0.0231 Estes -0.031 0.946 -0.092 4.826 -0.139 9.936 -0.192 14.09 -0.209 11.446 -0.231 7.381 -0.248 6.151 -0.292 5.489 -0.37 4.921 -0.475 4.448 -0.671 4.258 -0.702 4.542 -0.723 4.164 -0.85 4.448 -1.063 4.353 -1.211 4.353 -1.242 4.069 -1.303 4.258 -1.468 4.353 -1.656 4.448 -1.821 4.448 -1.834 2.933 -1.847 1.325 -1.86 0 +; C6-0 +C6-0 18 70 P 0.012480000000000002 0.0227 E + 0.014 0.633 + 0.026 1.533 + 0.067 2.726 + 0.099 5.136 + 0.15 9.103 + 0.183 11.465 + 0.207 11.635 + 0.219 11.391 + 0.262 6.377 + 0.333 5.014 + 0.349 5.209 + 0.392 4.722 + 0.475 4.771 + 0.653 4.746 + 0.913 4.673 + 1.366 4.625 + 1.607 4.625 + 1.745 4.868 + 1.978 4.795 + 2.023 0.828 + 2.024 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6_1.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6_1.eng new file mode 100644 index 000000000..f7cf3a389 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Estes_C6_1.eng @@ -0,0 +1,33 @@ +; +;Estes C6 RASP.ENG file made from NAR published data +;File produced October 3, 2000 +;The total impulse, peak thrust, average thrust and burn time are +;the same as the averaged static test data on the NAR web site in +;the certification file. The curve drawn with these data points is as +;close to the certification curve as can be with such a limited +;number of points (32) allowed with wRASP up to v1.6. +C6 18 70 0-3-5-7 0.0108 0.0231 Estes +0.031 0.946 +0.092 4.826 +0.139 9.936 +0.192 14.09 +0.209 11.446 +0.231 7.381 +0.248 6.151 +0.292 5.489 +0.37 4.921 +0.475 4.448 +0.671 4.258 +0.702 4.542 +0.723 4.164 +0.85 4.448 +1.063 4.353 +1.211 4.353 +1.242 4.069 +1.303 4.258 +1.468 4.353 +1.656 4.448 +1.821 4.448 +1.834 2.933 +1.847 1.325 +1.86 0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_L1112.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_L1112.eng new file mode 100644 index 000000000..caa9206f7 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_L1112.eng @@ -0,0 +1,30 @@ +L1112BT 75 497.8 P 1.8 3.628 Gorilla + 0.05 1131.791 + 0.071 1174.3 + 0.113 1176.957 + 0.176 1211.495 + 0.263 1293.855 + 0.397 1145.075 + 0.493 1129.134 + 0.786 1182.27 + 1.062 1254.003 + 1.078 1232.749 + 1.229 1275.258 + 1.308 1254.003 + 1.492 1283.228 + 2.002 1293.855 + 2.236 1299.169 + 2.345 1283.228 + 2.545 1227.435 + 2.608 1198.211 + 2.688 1190.24 + 2.759 1206.181 + 2.809 1168.986 + 2.884 892.68 + 2.922 672.167 + 3.009 504.789 + 3.223 225.827 + 3.26 108.928 + 3.331 37.195 + 3.44 5.314 + 3.595 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_M1952.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_M1952.eng new file mode 100644 index 000000000..6e50c9ab6 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/GR_M1952.eng @@ -0,0 +1,33 @@ +M1952BT 75 784.9 P 2.97 5.4430000000000005 Gorilla + 0.025 1639.097 + 0.033 2397.644 + 0.046 2100.59 + 0.075 2519.648 + 0.096 2599.215 + 0.104 2689.392 + 0.187 2689.392 + 0.228 2620.434 + 0.274 2445.384 + 0.316 2328.685 + 0.403 2275.64 + 0.523 2291.553 + 1.001 2339.294 + 1.188 2344.598 + 1.499 2328.685 + 1.637 2302.162 + 1.794 2270.335 + 2.093 2238.508 + 2.193 2206.681 + 2.243 2143.027 + 2.368 1777.015 + 2.505 1310.217 + 2.525 1241.258 + 2.584 1220.04 + 2.609 1119.254 + 2.663 960.118 + 2.733 763.851 + 2.8 567.584 + 2.87 413.753 + 2.987 238.703 + 3.178 63.654 + 3.41 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_J1026.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_J1026.eng new file mode 100644 index 000000000..f75d90f6d --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_J1026.eng @@ -0,0 +1,27 @@ +J1026 38 625.5 P 0.616 1.172 Loki + 0.019 62.798 + 0.034 795.446 + 0.045 1167.004 + 0.07 1182.703 + 0.149 1153.921 + 0.249 1146.071 + 0.4 1161.77 + 0.49 1185.32 + 0.6 1193.17 + 0.8 1180.087 + 0.851 1172.237 + 0.899 1169.62 + 0.922 1159.154 + 0.947 1167.004 + 0.979 1127.755 + 1.009 1067.573 + 1.089 669.85 + 1.13 486.688 + 1.142 468.371 + 1.151 408.19 + 1.161 316.609 + 1.176 222.411 + 1.201 128.213 + 1.227 65.415 + 1.264 26.166 + 1.297 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K1127.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K1127.eng new file mode 100644 index 000000000..0bba56b34 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K1127.eng @@ -0,0 +1,37 @@ +K1127LB 38 625.5 P 0.624 1.172 Loki + 0.009 77.978 + 0.021 1002.962 + 0.033 1368.654 + 0.045 1210.008 + 0.058 1365.965 + 0.067 1263.786 + 0.08 1360.587 + 0.092 1255.719 + 0.105 1331.009 + 0.117 1242.275 + 0.13 1312.186 + 0.142 1261.097 + 0.155 1304.12 + 0.167 1261.097 + 0.218 1290.675 + 0.395 1325.631 + 0.542 1368.654 + 0.689 1392.854 + 0.726 1382.098 + 0.755 1344.453 + 0.814 1110.518 + 0.867 949.184 + 0.874 1099.763 + 0.883 962.629 + 0.908 847.006 + 0.989 548.537 + 0.997 363.002 + 1.003 715.249 + 1.014 494.759 + 1.048 406.025 + 1.091 352.247 + 1.152 228.557 + 1.198 158.645 + 1.244 69.912 + 1.286 32.267 + 1.37 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K527.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K527.eng new file mode 100644 index 000000000..2c72ae37a --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_K527.eng @@ -0,0 +1,27 @@ +K527LR 54 492.1 P 1.0150000000000001 1.973 Loki + 0.023 87.866 + 0.051 624.477 + 0.06 701.36 + 0.079 759.414 + 0.125 707.636 + 0.176 682.531 + 0.269 654.288 + 0.501 649.581 + 1.01 644.874 + 1.265 640.167 + 1.52 646.443 + 1.701 643.305 + 2.035 618.201 + 2.526 567.991 + 2.827 539.749 + 2.943 530.335 + 2.999 513.075 + 3.04 442.468 + 3.115 356.171 + 3.309 219.665 + 3.481 91.004 + 3.546 59.623 + 3.652 43.933 + 3.791 37.657 + 3.967 10.983 + 4.129 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_L840.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_L840.eng new file mode 100644 index 000000000..334227464 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_L840.eng @@ -0,0 +1,25 @@ +L840CT 75 498 P 2.074 3.748 Loki + 0.021 889.644 + 0.046 1182.485 + 0.077 1082.4 + 0.139 978.608 + 0.303 971.195 + 0.662 1015.677 + 1.011 1108.348 + 1.33 1149.124 + 1.689 1189.899 + 1.971 1163.951 + 2.089 1145.417 + 2.3 1034.211 + 2.633 893.351 + 2.823 822.921 + 3.455 656.112 + 3.737 596.803 + 3.891 585.682 + 3.984 385.512 + 4.112 355.858 + 4.215 203.877 + 4.292 140.86 + 4.384 103.792 + 4.589 63.016 + 4.8 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1650.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1650.eng new file mode 100644 index 000000000..8f2702872 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1650.eng @@ -0,0 +1,22 @@ +M1650LC 76 784.2 P 3.23 5.63 Loki + 0.015 1912.965 + 0.046 3779.835 + 0.097 3149.862 + 0.132 2865.606 + 0.183 2642.811 + 0.295 2458.429 + 0.407 2350.873 + 0.509 2297.095 + 0.91 2097.347 + 1.495 1920.648 + 1.612 1882.235 + 2.772 1336.771 + 3.266 1044.832 + 3.342 960.324 + 3.398 860.45 + 3.505 798.989 + 3.606 629.972 + 3.81 361.082 + 3.901 238.16 + 4.008 153.652 + 4.613 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1969.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1969.eng new file mode 100644 index 000000000..7d3c852a3 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M1969.eng @@ -0,0 +1,28 @@ +M1969SF 75 1038 P 4.266 7.189 Loki + 0.036 263.323 + 0.044 1504.064 + 0.075 2204.77 + 0.087 2356.515 + 0.186 2204.77 + 0.23 2280.643 + 0.274 2240.475 + 0.503 2347.589 + 1.003 2432.388 + 1.058 2454.703 + 1.495 2307.421 + 2.002 2236.012 + 2.315 2186.918 + 2.501 2182.454 + 2.628 2169.065 + 2.815 2244.938 + 2.882 2191.381 + 3.045 1338.929 + 3.096 1142.553 + 3.164 1044.365 + 3.267 964.029 + 3.378 807.821 + 3.5 504.33 + 3.639 267.786 + 3.77 102.651 + 3.881 22.315 + 3.96 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M3464.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M3464.eng new file mode 100644 index 000000000..71a7a19e4 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Loki_M3464.eng @@ -0,0 +1,25 @@ +M3400LB 76 1038.2 P 4.464 7.597 Loki + 0.007 4907.495 + 0.02 4008.216 + 0.047 3866.9 + 0.35 3866.9 + 0.502 3866.9 + 0.579 3892.594 + 1.239 4277.999 + 1.808 4303.693 + 1.886 4303.693 + 1.919 4188.071 + 2.0 3404.414 + 2.064 2916.234 + 2.152 2569.369 + 2.242 2569.369 + 2.283 2440.901 + 2.347 1965.567 + 2.384 1541.621 + 2.434 1104.829 + 2.485 835.045 + 2.545 719.423 + 2.596 475.333 + 2.717 205.55 + 2.862 51.387 + 2.976 0.0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx.eng new file mode 100644 index 000000000..0caf9294c --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx.eng @@ -0,0 +1,35 @@ +; @File: q003.txt, @Pts-I: 769, @Pts-O: 31, @Sm: 0, @CO: 0% +; @TI: 0.1991613, @TIa: 0.1991608, @TIe: +0.1%, @ThMax: 1.624927, @ThAvg: 0.255335, @Tb: 0.78 +; Exported using ThrustCurveTool, www.ThrustGear.com +MAXXII 0 0 0.76 0.0 0.0 QUEST + 0.026 0.0394607 + 0.036 0.1214556 + 0.04 0.206028 + 0.05 0.444676 + 0.056 0.680251 + 0.06 0.899565 + 0.066 1.358816 + 0.068 1.475611 + 0.07 1.56653 + 0.074 1.624927 + 0.088 1.190166 + 0.112 0.830955 + 0.126 0.439917 + 0.134 0.319751 + 0.144 0.248959 + 0.174 0.1656754 + 0.206 0.1918503 + 0.258 0.1262147 + 0.342 0.1601231 + 0.366 0.1386081 + 0.384 0.1794569 + 0.494 0.218422 + 0.546 0.1540751 + 0.56 0.178168 + 0.608 0.1523896 + 0.682 0.209499 + 0.698 0.1837202 + 0.712 0.220206 + 0.742 0.209003 + 0.768 0.040353 + 0.785 0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.eng new file mode 100644 index 000000000..5ea10d96a --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.eng @@ -0,0 +1,35 @@ +; @File: q0016.txt, @Pts-I: 815, @Pts-O: 31, @Sm: 0, @CO: 3% +; @TI: 0.1497473, @TIa: 0.1488623, @TIe: -0.06%, @ThMax: 2.09889, @ThAvg: 0.1862529, @Tb: 0.804 +; Exported using ThrustCurveTool, www.ThrustGear.com +1/8A0.2 0 0 0.81 0.0 0.0 QUEST + 0.016 0.0530363 + 0.02 0.0985533 + 0.024 0.176654 + 0.03 0.415869 + 0.032 0.434918 + 0.038 0.657991 + 0.052 1.247306 + 0.058 1.453536 + 0.064 1.700872 + 0.066 1.755612 + 0.07 1.951716 + 0.074 2.06541 + 0.076 2.09889 + 0.078 2.09889 + 0.08 2.02811 + 0.082 1.911814 + 0.084 1.619262 + 0.086 1.151861 + 0.088 0.728272 + 0.09 0.433614 + 0.092 0.292953 + 0.098 0.217459 + 0.154 0.224377 + 0.172 0.150186 + 0.196 0.0998567 + 0.23 0.078602 + 0.414 0.0625608 + 0.7559 0.082111 + 0.8219 0.0607562 + 0.8339 0.0208536 +0.834 0 diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.rse b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.rse new file mode 100644 index 000000000..2fe681673 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_1.rse @@ -0,0 +1,49 @@ + + + + QUEST MICROMAXX II RASP.ENG file made from NAR published data +File produced Dec 29, 2001 +The total impulse, peak thrust, average thrust and burn time are +the same as the averaged static test data on the NAR web site in +the certification file. The curve drawn with these data points is as +close to the certification curve as can be with such a limited +number of points (32) allowed with wRASP up to v1.6. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_2.eng b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_2.eng new file mode 100644 index 000000000..8ed80b4b4 --- /dev/null +++ b/core/resources-src/datafiles/thrustcurves/thrustcurve.org/Quest_Micro_Maxx_2.eng @@ -0,0 +1,39 @@ +; Traced from NAR certification data dated 1-29-2009 +MicroMaxxII 6 26 NE-1 5.0E-4 0.0010 Q + 0.021 0.015 + 0.036 0.05 + 0.043 0.103 + 0.049 0.198 + 0.08 1.636 + 0.092 1.3 + 0.109 0.995 + 0.124 0.805 + 0.133 0.442 + 0.143 0.301 + 0.164 0.21 + 0.186 0.149 + 0.199 0.183 + 0.235 0.145 + 0.256 0.145 + 0.293 0.149 + 0.327 0.164 + 0.367 0.156 + 0.387 0.175 + 0.409 0.183 + 0.431 0.191 + 0.461 0.21 + 0.474 0.202 + 0.49 0.217 + 0.505 0.175 + 0.513 0.198 + 0.537 0.172 + 0.553 0.175 + 0.602 0.156 + 0.623 0.175 + 0.644 0.183 + 0.674 0.21 + 0.689 0.191 + 0.697 0.229 + 0.731 0.21 + 0.753 0.092 + 0.771 0.0 diff --git a/core/resources/datafiles/thrustcurves/thrustcurves.ser b/core/resources/datafiles/thrustcurves/thrustcurves.ser index f9226e9894fc8abc7b9e2c19385bb348a5dc82d6..4f447a54231d24ac3406feb545e8c873d7d25730 100644 GIT binary patch delta 182055 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 From e6ba1e349cff8b46ead7dfc7076b0a59f63afd42 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Thu, 26 Mar 2015 06:49:54 -0500 Subject: [PATCH 02/10] Updated documentation for 15.03. --- core/.releasing.txt.swp | Bin 12288 -> 0 bytes core/ChangeLog | 2 ++ core/ReleaseNotes | 17 +++++++++++++++++ core/fileformat.txt | 2 ++ core/resources/build.properties | 2 +- 5 files changed, 22 insertions(+), 1 deletion(-) delete mode 100644 core/.releasing.txt.swp diff --git a/core/.releasing.txt.swp b/core/.releasing.txt.swp deleted file mode 100644 index ca0277dfb840384ceb2d92be44dd9a096f04a173..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeHN&5smC6fZdV34TCKG~!Q~_Sf#;g;nwj41>1wOGXW^n3 zIRG9!>dpT^{|Ik#;-c}UCVIw$+|*xH_00AT8;FS)wI=!P>~y_X_1>@E`_*oydhILc zF3_>?D8uU+#-6)%##Xd$lyX%xr)bG1y-s_M4%`@N` z@C(2I`BMjZ!crN178DQ0iOc5fDK?B_yD*9yaVh3zTd;xcffVv6W|!| z67VAM&6A9s2hIV%;ts+uz)j!=umUUtKR?dcmp~8Tzze`{k1=)^xC7h-ZU9$+HJ}Yd zz-{FCE${{KInV<*upcn_KMVMmXTUSy8So7JZyD&k8PbZ#6A~kyX2g54Dk&G6R9{r1 zQqtBvwSecjtnyeaWT`H7sAZ*M(U)o46%Ft(w%f}_6S;~>^F?g*FWFHLW0T06Vi zA!?a18@^QOAk8OT5rFsh@zw!sejA%_=0OgVx`y4m@UzZljeyViF?Kv8TCQ@M8W1(c6j478cyFmC2ZA*)^IscBv*lMwjwlCR~Bx>1-7vCbTrUO{iPZlt#DNDh1l5 z2ouq#`AN`uHR=gvn4dOO5kUxaXqKLz$U&O-C6+KdwT@sYIJ4DMn6Ot3Lf0yl%1#W+ zvgk&Qd#BI1awAHE=v+uMO;CDQGwRdROV!wY1_D73uv)6Hb#c>SP5u%LOnDV9+@DF zb1bwD8Pw3Jv^gL8Fsu|xlriXE%?}4<#)mQJ(hi)Rwj!`32aG{+b}(qF3z}<38!T#d zRY&(7F*u2A+$O-futUboQ^%}^WEd9nre=g}6{+e{6qlbbkovWzN7N6WTR%cumX zg-X?i=;seBNYIubq36xu>@v`gVb!zk-LlHovYSQj=fz8_i(NOV%?Qnxh?(e2*CztP zY)Wd#O^70=ksKorCtg^`A2P&pro6K_v`J4rA(sPzy{x%F@X4@0wZ zsQcy=kBUaeMrI&##b|$GsS6dVV#vp0D#x*@WZ7^0rO-muRP13jk9>g?xNZ75w{1$RC+PU{sNhvTiXBt diff --git a/core/ChangeLog b/core/ChangeLog index ad4ecc9be..cc9968bf1 100644 --- a/core/ChangeLog +++ b/core/ChangeLog @@ -1,3 +1,5 @@ +2015-03-28 Kevin Ruland + * Released version 15.03 See Release Notes for changes. 2014-11-02 Kevin Ruland * Released version 14.11 See Release Notes for changes. diff --git a/core/ReleaseNotes b/core/ReleaseNotes index 8657c1076..dbd0f944d 100644 --- a/core/ReleaseNotes +++ b/core/ReleaseNotes @@ -1,3 +1,20 @@ +OpenRocket 14.04 (2015-03-28): +------------------------------ + +OpenRocket now requires Java 1.7 for execution. + +New Features: + * Experimental support for tube fins + * Updated thrustcurves + * Scriptable simulation extensions + * Fin fillet mass + * Better icons for different kinds of masses - altimeters, computers, etc. + * Configurable default mach number + * Improved preferences UI + +Bug Fixes: + * Always use the correct filename extension when saving + OpenRocket 14.11 (2014-11-02): ------------------------------ diff --git a/core/fileformat.txt b/core/fileformat.txt index 311c0dbfa..1e7b1f4cb 100644 --- a/core/fileformat.txt +++ b/core/fileformat.txt @@ -47,3 +47,5 @@ The following file format versions exist: 1.6: Introduced with OpenRocket 13.04. Added component Appearances (decals & paint) Added configurable parameters to recovery devices, motor ignition and separation. + +1.7: Support for TubeFins. Support for scriptable simulation extensions. diff --git a/core/resources/build.properties b/core/resources/build.properties index 0c1acc11b..e9429f601 100644 --- a/core/resources/build.properties +++ b/core/resources/build.properties @@ -1,7 +1,7 @@ # The OpenRocket build version -build.version=14.11dev +build.version=15.03 # The source of the package. When building a package for a specific From a631f394836d710971332d4d51afd00c49517865 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Thu, 26 Mar 2015 06:57:13 -0500 Subject: [PATCH 03/10] Prepare for 15.03dev --- core/resources/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/resources/build.properties b/core/resources/build.properties index e9429f601..9895ce0ce 100644 --- a/core/resources/build.properties +++ b/core/resources/build.properties @@ -1,7 +1,7 @@ # The OpenRocket build version -build.version=15.03 +build.version=15.03dev # The source of the package. When building a package for a specific From 204e3e91594ccfb987f322c7f7b644402c0aa546 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Thu, 26 Mar 2015 07:51:38 -0500 Subject: [PATCH 04/10] Update documentation for 15.03. --- core/web/html/actions/updates.php | 12 ++++++++++-- core/web/html/download.html | 15 +++++++++------ core/web/html/index.html | 9 ++++++--- core/web/htp/htp.def | 4 ++-- core/web/htp/news.htp | 4 ++++ 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/core/web/html/actions/updates.php b/core/web/html/actions/updates.php index 3d6f337e7..0960f6c4e 100644 --- a/core/web/html/actions/updates.php +++ b/core/web/html/actions/updates.php @@ -80,11 +80,19 @@ header("Content-type: text/plain"); $version = $_GET["version"]; $updates = ""; -$unstable = "14.11"; +$unstable = "15.03"; $stable = "1.0.0"; -if (preg_match("/^14.06$/", $version)) { +if (preg_match("/^14.11$/", $version)) { + $updates = "Version: " . $unstable . "\n" . + "10: Experimental support for TubeFins\n". + "10: Scriptable simulation extensions\n". + "10: User configurable default mach\n". + "6: Updated thrustcurves\n" . + "4: Fixed a few bugs\n" . + ""; +} else if (preg_match("/^14.06$/", $version)) { $updates = "Version: " . $unstable . "\n" . "6: Updated thrustcurves\n" . "4: Fixed a few bugs\n" . diff --git a/core/web/html/download.html b/core/web/html/download.html index bbec666a6..6d8d1af19 100644 --- a/core/web/html/download.html +++ b/core/web/html/download.html @@ -48,6 +48,9 @@

Recent news:

+

28.03.2015: Version 15.03 is + released! This release contains scriptable simulation extensions and experimental support for tube fins along with many additional improvements. +

02.11.2014: Version 14.11 is released! This release contains very few changes. Thrustcurves have been updated and now include AeroTech DMS motors. A few bugs have been fixed.

@@ -87,20 +90,20 @@ Support This Project

OpenRocket can be started in most graphical environments (including Windows) by double-clicking the package icon. No installation is required.

From the command line OpenRocket can be started by - java -jar OpenRocket-14.11.jar

+ java -jar OpenRocket-15.03.jar

Android version

The Android version allows opening OpenRocket files, viewing simulations and motors. Later versions will allow running @@ -115,7 +118,7 @@

  1. Go to SettingsApplications and check Unknown sources.
  2. -
  3. Download OpenRocket-Android-12.09.apk +
  4. Download OpenRocket-Android-13.11.apk on your device and accept installation.
diff --git a/core/web/html/index.html b/core/web/html/index.html index 43307edae..cacd8184f 100644 --- a/core/web/html/index.html +++ b/core/web/html/index.html @@ -49,12 +49,12 @@

Introduction

@@ -108,6 +108,9 @@ Profiler.

News

+

28.03.2015: Version 15.03 is + released! This release contains scriptable simulation extensions and experimental support for tube fins along with many additional improvements. +

02.11.2014: Version 14.11 is released! This release contains very few changes. Thrustcurves have been updated and now include AeroTech DMS motors. A few bugs have been fixed.

diff --git a/core/web/htp/htp.def b/core/web/htp/htp.def index 6e8e1bc86..7167b7b60 100644 --- a/core/web/htp/htp.def +++ b/core/web/htp/htp.def @@ -1,5 +1,5 @@ - - + +
diff --git a/core/web/htp/news.htp b/core/web/htp/news.htp index c01b32185..4a612519d 100644 --- a/core/web/htp/news.htp +++ b/core/web/htp/news.htp @@ -8,6 +8,10 @@ +

28.03.2015: Version 15.03 is + released! This release contains scriptable simulation extensions and experimental support for tube fins along with many additional improvements. +

+

02.11.2014: Version 14.11 is released! This release contains very few changes. Thrustcurves have been updated and now include AeroTech DMS motors. A few bugs have been fixed.

From b15afb37094829df64c6979d79c1394ae2e560e6 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Thu, 26 Mar 2015 08:00:10 -0500 Subject: [PATCH 05/10] Changing release version back to 15.03 to get the tag in the correct place. --- core/resources/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/resources/build.properties b/core/resources/build.properties index 9895ce0ce..e9429f601 100644 --- a/core/resources/build.properties +++ b/core/resources/build.properties @@ -1,7 +1,7 @@ # The OpenRocket build version -build.version=15.03dev +build.version=15.03 # The source of the package. When building a package for a specific From 25a227907394602f6bbe3ed2ac4144a8552681a0 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Thu, 26 Mar 2015 08:01:05 -0500 Subject: [PATCH 06/10] Change to dev. --- core/resources/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/resources/build.properties b/core/resources/build.properties index e9429f601..9895ce0ce 100644 --- a/core/resources/build.properties +++ b/core/resources/build.properties @@ -1,7 +1,7 @@ # The OpenRocket build version -build.version=15.03 +build.version=15.03dev # The source of the package. When building a package for a specific From 3d64b5814465b556bb07d3125169fe297f5aca28 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Fri, 27 Mar 2015 18:39:44 -0500 Subject: [PATCH 07/10] Fix release number. --- core/ReleaseNotes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ReleaseNotes b/core/ReleaseNotes index dbd0f944d..7945c0c2b 100644 --- a/core/ReleaseNotes +++ b/core/ReleaseNotes @@ -1,4 +1,4 @@ -OpenRocket 14.04 (2015-03-28): +OpenRocket 15.03 (2015-03-28): ------------------------------ OpenRocket now requires Java 1.7 for execution. From 1c42de5540303b2a6e3681d0fa76c223c2994701 Mon Sep 17 00:00:00 2001 From: celeron533 Date: Sat, 28 Mar 2015 18:03:56 +0800 Subject: [PATCH 08/10] Update zh_CN translation Update zh_CN translation file --- core/resources/l10n/messages_zh_CN.properties | 197 ++++++++++++++---- 1 file changed, 154 insertions(+), 43 deletions(-) diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties index ff0bf23f8..11b77c7ee 100644 --- a/core/resources/l10n/messages_zh_CN.properties +++ b/core/resources/l10n/messages_zh_CN.properties @@ -42,7 +42,7 @@ AppearanceCfg.lbl.texture.repeat = \u91CD\u590D: AppearanceCfg.lbl.texture.rotation = \u65CB\u8F6C: AppearanceCfg.lbl.texture.scale = \u7F29\u653E: -BasicEventSimulationEngine.error.NaNResult = \u6A21\u62DF\u7ED3\u679C\u5E76\u4E0D\u662F\u4E2A\u6570\u503C,\u8BF7\u6C47\u62A5bug +BasicEventSimulationEngine.error.NaNResult = \u6A21\u62DF\u7ED3\u679C\u975E\u6570\u503C,\u8BF7\u6C47\u62A5bug BasicEventSimulationEngine.error.earlyMotorBurnout = \u53D1\u52A8\u673A\u8D77\u98DE\u524D\u5DF2\u71C3\u5C3D. BasicEventSimulationEngine.error.noIgnition = \u53D1\u52A8\u673A\u672A\u70B9\u706B BasicEventSimulationEngine.error.noMotorsDefined = \u53D1\u52A8\u673A\u672A\u5B9A\u4E49 @@ -128,11 +128,15 @@ ComponentCfgDlg.Modify = \u4FEE\u6539 !ComponentConfigDialog ComponentCfgDlg.configuration = \u8BBE\u7F6E +ComponentIcons.Altimeter = \u9AD8\u5EA6\u8BA1 +ComponentIcons.Battery = \u7535\u6C60 ComponentIcons.Bodytube = \u7BAD\u4F53 ComponentIcons.Bulkhead = \u9694\u677F ComponentIcons.Centeringring = \u4E2D\u5FC3\u73AF +ComponentIcons.Deploymentcharge = \u5F00\u4F1E\u836F ComponentIcons.Ellipticalfinset = \u692D\u5706\u7A33\u5B9A\u7FFC ComponentIcons.Engineblock = \u53D1\u52A8\u673A +ComponentIcons.Flightcomputer = \u98DE\u63A7 ComponentIcons.Freeformfinset = \u66F2\u9762\u7A33\u5B9A\u7FFC ComponentIcons.Innertube = \u5185\u7BA1 ComponentIcons.Launchlug = \u53D1\u5C04\u8854\u5957 @@ -140,11 +144,15 @@ ComponentIcons.Masscomponent = \u8D28\u91CF\u7EC4\u4EF6 !ComponentIcons ComponentIcons.Nosecone = \u5934\u9525 ComponentIcons.Parachute = \u964D\u843D\u4F1E +ComponentIcons.Payload = \u6709\u6548\u8F7D\u8377 +ComponentIcons.Recoveryhardware = \u56DE\u6536\u8BBE\u5907 ComponentIcons.Shockcord = \u51CF\u9707\u7D22 ComponentIcons.Streamer = \u98D8\u5E26 +ComponentIcons.Tracker = \u8DDF\u8E2A\u5668 ComponentIcons.Transition = \u7EA7\u95F4\u6BB5 ComponentIcons.Trapezoidalfinset = \u68AF\u5F62\u7A33\u5B9A\u7FFC ComponentIcons.Tubecoupler = \u8FDE\u63A5\u5668 +ComponentIcons.Tubefinset = \u7BA1\u5F62\u7FFC ComponentIcons.disabled = (\u5DF2\u7981\u7528) ComponentPresetChooserDialog.checkbox.filterAftDiameter = \u5339\u914D\u540E\u76F4\u5F84 @@ -264,6 +272,9 @@ FinSet.TabRelativePosition.CENTER = \u7FFC\u6839\u5F26\u4E2D\u70B9 FinSet.TabRelativePosition.END = \u7FFC\u6839\u5F26\u540E\u7F18 FinSet.TabRelativePosition.FRONT = \u7FFC\u6839\u5F26\u524D\u7F18 +FinSetCfg.lbl.Filletradius = \u63A5\u7F1D\u534A\u5F84: +FinSetCfg.lbl.Finfilletmaterial = \u63A5\u7F1D\u6750\u6599: + FinSetConfig.Convertfinset = \u8F6C\u6362\u7FFC FinSetConfig.but.AutoCalc = \u81EA\u52A8\u8BA1\u7B97 FinSetConfig.but.Converttofreeform = \u8F6C\u4E3A\u81EA\u7531\u66F2\u9762 @@ -282,6 +293,10 @@ FinSetConfig.ttip.Tabheight = \u7FFC\u5C55\u65B9\u5411\u7684\u9AD8\u FinSetConfig.ttip.Tablength = \u7FFC\u677F\u7684\u957F\u5EA6. FinSetConfig.ttip.Tabposition = \u7FFC\u677F\u7684\u4F4D\u7F6E. +FinsetCfg.ttip.Finfillets1 = \u5C06\u9884\u4F30\u8D28\u91CF\u6DFB\u52A0\u5230\u7FFC\u6839\u90E8.
+FinsetCfg.ttip.Finfillets2 = \u5047\u5B9A\u63A5\u7F1D\u5185\u51F9\u4E14\u548C\u7BAD\u4F53\u3001\u7FFC\u677F\u76F8\u5207.
+FinsetCfg.ttip.Finfillets3 = \u65E0\u63A5\u7F1D\u60C5\u51B5\u4E0B\u5C06\u8BBE\u5B9A\u63A5\u7F1D\u534A\u5F84\u4E3A0. + FlightDataType.TYPE_ACCELERATION_TOTAL = \u603B\u52A0\u901F\u5EA6 FlightDataType.TYPE_ACCELERATION_XY = \u6A2A\u5411\u52A0\u901F\u5EA6 FlightDataType.TYPE_ACCELERATION_Z = \u5782\u76F4\u52A0\u901F\u5EA6 @@ -508,8 +523,15 @@ LineStyle.Dotted = \u70B9\u865A\u7EBF ! LineStyle LineStyle.Solid = \u5B9E\u7EBF +MassComponent.Altimeter = \u9AD8\u5EA6\u8BA1 +MassComponent.Battery = \u7535\u6C60 +MassComponent.DeploymentCharge = \u5F00\u4F1E\u836F +MassComponent.FlightComputer = \u98DE\u63A7 !MassComponent MassComponent.MassComponent = \u8D28\u91CF\u7EC4\u4EF6 +MassComponent.Payload = \u6709\u6548\u8F7D\u8377 +MassComponent.RecoveryHardware = \u56DE\u6536\u8BBE\u5907 +MassComponent.Tracker = \u8FFD\u8E2A\u5668 MassComponentCfg.but.Reset = \u91CD\u7F6E MassComponentCfg.lbl.Density = \u8FD1\u4F3C\u5BC6\u5EA6: @@ -521,6 +543,7 @@ MassComponentCfg.lbl.PosRelativeto = \u76F8\u5BF9\u4F4D\u7F6E: MassComponentCfg.lbl.Radialdirection = \u5F84\u5411\u65B9\u5411: MassComponentCfg.lbl.Radialdistance = \u5F84\u5411\u8DDD\u79BB: MassComponentCfg.lbl.plus = \u52A0 +MassComponentCfg.lbl.type = \u7C7B\u578B MassComponentCfg.tab.General = \u5E38\u89C4 MassComponentCfg.tab.Radialpos = \u5F84\u5411\u4F4D\u7F6E MassComponentCfg.tab.ttip.General = \u5E38\u89C4\u5C5E\u6027 @@ -551,7 +574,7 @@ MotorCfg.checkbox.compmotormount = \u8BE5\u7EC4\u4EF6\u4E3A\u53D1\u52A8\u673A\u5 MotorCfg.lbl.Currentmotor = \u5F53\u524D\u53D1\u52A8\u673A: MotorCfg.lbl.Flightcfg = \u98DE\u884C\u914D\u7F6E: MotorCfg.lbl.Ignitionat = \u70B9\u706B\u65F6\u523B: -MotorCfg.lbl.Motoroverhang = \u53D1\u52A8\u673A\u7A81\u51FA: +MotorCfg.lbl.Motoroverhang = \u53D1\u52A8\u673A\u6A2A\u7F69\u91CF: MotorCfg.lbl.longA1 = \u5F53\u524D\u8BBE\u8BA1\u7A3F\u4E3A\u5355\u7EA7\u706B\u7BAD. MotorCfg.lbl.longA2 = \u70B9\u51FB"\u65B0\u5EFA\u7EA7"\u5EFA\u7ACB\u65B0\u7684\u706B\u7BAD\u7EA7. MotorCfg.lbl.longB1 = \u5F53\u524D\u8BBE\u8BA1\u7A3F\u6709 @@ -723,15 +746,46 @@ PhotoFrame.menu.window.size = \u5927\u5C0F PhotoFrame.menu.window.size.portrait = {0} \u76F8\u7247 PhotoFrame.title = \u7167\u76F8\u9986 -PhotoSettingsConfig.colorChooser.title = \u9009\u8272\u5668 -PhotoSettingsConfig.tab.effects = \u7279\u6548 -PhotoSettingsConfig.tab.environment = \u73AF\u5883 -PhotoSettingsConfig.tab.orientation = \u65B9\u5411 -PhotoSettingsConfig.title = \u8BBE\u7F6E +PhotoSettingsConfig.colorChooser.title = \u9009\u8272\u677F +PhotoSettingsConfig.lbl.advance = \u9AD8\u7EA7 +PhotoSettingsConfig.lbl.amb = \u73AF\u5883 +PhotoSettingsConfig.lbl.camera = \u76F8\u673A +PhotoSettingsConfig.lbl.effects = \u6548\u679C +PhotoSettingsConfig.lbl.exhaustScale = \u5C3E\u6C14\u5927\u5C0F +PhotoSettingsConfig.lbl.flame = \u706B\u7130 +PhotoSettingsConfig.lbl.flameAspect = \u706B\u7130\u5916\u89C2\u89D2\u5EA6 +PhotoSettingsConfig.lbl.fov = \u89C6\u573A +PhotoSettingsConfig.lbl.light = \u5149\u7167 +PhotoSettingsConfig.lbl.lightAlt = \u5149\u7167\u9AD8\u5EA6 +PhotoSettingsConfig.lbl.lightAz = \u5149\u7167\u65B9\u4F4D +PhotoSettingsConfig.lbl.pitch = \u503E\u89D2 +PhotoSettingsConfig.lbl.rocket = \u706B\u7BAD +PhotoSettingsConfig.lbl.roll = \u65CB\u8F6C +PhotoSettingsConfig.lbl.sky = \u5929\u7A7A +PhotoSettingsConfig.lbl.skyColor = \u5929\u7A7A\u989C\u8272 +PhotoSettingsConfig.lbl.skyCredit = \u56FE\u7247\u6CE8\u89E3 +PhotoSettingsConfig.lbl.skyImage = \u5929\u7A7A\u56FE\u7247 +PhotoSettingsConfig.lbl.smoke = \u70DF\u96FE +PhotoSettingsConfig.lbl.smokeFlame = \u7130\u70DF +PhotoSettingsConfig.lbl.smokeOpacity = \u70DF\u900F\u660E\u5EA6 +PhotoSettingsConfig.lbl.sparkConcentration = \u706B\u661F\u6D53\u5EA6 +PhotoSettingsConfig.lbl.sparkWeight = \u706B\u661F\u91CD\u91CF +PhotoSettingsConfig.lbl.sparks = \u706B\u661F +PhotoSettingsConfig.lbl.speed = \u901F\u5EA6 +PhotoSettingsConfig.lbl.sun = \u9633\u5149 +PhotoSettingsConfig.lbl.vAlt = \u89C6\u9AD8\u5EA6 +PhotoSettingsConfig.lbl.vAz = \u89C6\u65B9\u4F4D\u89D2 +PhotoSettingsConfig.lbl.vDist = \u89C6\u8DDD +PhotoSettingsConfig.lbl.yaw = \u65CB\u89D2 +PhotoSettingsConfig.tab.effects = \u7279\u6548 +PhotoSettingsConfig.tab.environment = \u73AF\u5883 +PhotoSettingsConfig.tab.orientation = \u65B9\u5411 +PhotoSettingsConfig.title = \u8BBE\u7F6E PlotConfiguration.Angleofattack = \u653B\u89D2\u548C\u65B9\u5411 vs. \u65F6\u95F4 PlotConfiguration.Dragcoef = \u963B\u529B\u7CFB\u6570 vs. \u9A6C\u8D6B\u6570 PlotConfiguration.Flightside = \u98DE\u884C\u4FA7\u89C6\u5256\u9762 +PlotConfiguration.Groundtrack = \u5730\u9762\u822A\u8FF9 PlotConfiguration.Rollcharacteristics = \u6EDA\u8F6C\u7279\u5F81 PlotConfiguration.Simulationtime = \u6A21\u62DF\u65F6\u95F4\u6B65\u957F vs. \u8BA1\u7B97\u65F6\u95F4 PlotConfiguration.Stability = \u7A33\u5B9A\u6027 vs. \u65F6\u95F4 @@ -1015,6 +1069,23 @@ SimulationEditDialog.btn.plot = \u6570\u636E\u56FE SimulationEditDialog.btn.simulate = \u4EFF\u771F SimulationEditDialog.btn.simulateAndPlot = \u4EFF\u771F & \u6570\u636E\u56FE +SimulationExtension.javacode.className = \u5B8C\u6574\u7684Java\u7C7B\u540D: +SimulationExtension.javacode.desc = \u6DFB\u52A0\u81EA\u5B9A\u4E49SimulationListener(\u76D1\u542C\u4E8B\u4EF6) +SimulationExtension.javacode.name = Java\u4EE3\u7801 +SimulationExtension.javacode.name.none = \u65E0 +SimulationExtension.scripting.desc = \u81EA\u5B9A\u4E49OpenRocket\u6269\u5C55\u811A\u672C. +SimulationExtension.scripting.language.label = \u8BED\u8A00: +SimulationExtension.scripting.name = {language}\u811A\u672C +SimulationExtension.scripting.text.enabled = \u542F\u7528\u811A\u672C +SimulationExtension.scripting.text.enabled.ttip = \u811A\u672C\u53EA\u6709\u5728\u542F\u7528\u540E\u624D\u4F1A\u88AB\u6267\u884C. +SimulationExtension.scripting.text.trusted = \u5728\u672C\u673A\u4E0A\u4FE1\u4EFB\u8BE5\u811A\u672C +SimulationExtension.scripting.text.trusted.clear = \u6E05\u9664\u811A\u672C\u4FE1\u4EFB +SimulationExtension.scripting.text.trusted.clear.ttip = \u6E05\u9664\u5BF9\u6240\u6709\u811A\u672C\u7684\u4FE1\u4EFB +SimulationExtension.scripting.text.trusted.cleared = \u6240\u6709\u811A\u672C\u5DF2\u4E0D\u88AB\u672C\u673A\u4FE1\u4EFB. +SimulationExtension.scripting.text.trusted.cleared.title = \u5DF2\u6E05\u9664 +SimulationExtension.scripting.text.trusted.msg = \u4E0D\u53EF\u4FE1\u7684\u811A\u672C\u4F1A\u5728\u8BFB\u53D6\u65F6\u88AB\u7981\u7528 +SimulationExtension.scripting.warning.disabled = \u4E0D\u53EF\u4FE1\u811A\u672C\u5DF2\u88AB\u7981\u7528. \u4F60\u9700\u8981\u5728\u4EFF\u771F\u9009\u9879\u4E2D\u624B\u52A8\u542F\u7528. + SimulationModifierTree.OptimizationParameters = \u4F18\u5316\u53C2\u6570 SimulationPlotPanel.error.noPlotSelected = \u8BF7\u5728Y\u8F74\u6DFB\u52A0\u81F3\u5C111\u4E2A\u53D8\u91CF. @@ -1034,7 +1105,7 @@ SleeveCfg.tab.Wallthickness = \u58C1\u539A: SlideShowDialog.btn.next = \u4E0B\u4E00\u9875 SlideShowDialog.btn.prev = \u4E0A\u4E00\u9875 -SlideShowLinkListener.error.msg = \u5F88\u62B1\u6B49, \u6240\u9009\u7684\u6559\u7A0B\u8FD8\u672A\u5B8C\u6210. +SlideShowLinkListener.error.msg = \u5F88\u9057\u61BE, \u6240\u9009\u7684\u6559\u7A0B\u8FD8\u672A\u88AB\u64B0\u5199. SlideShowLinkListener.error.title = \u6CA1\u6709\u627E\u5230\u76F8\u5173\u6559\u7A0B StabilityParameter.name = \u7A33\u5B9A\u6027 @@ -1215,6 +1286,17 @@ TrapezoidFinSetCfg.tab.Generalproperties = \u5E38\u89C4\u5C5E\u6027 ! TubeCoupler TubeCoupler.TubeCoupler = \u8FDE\u63A5\u5668 +TubeFinSet.TubeFinSet = \u7BA1\u5F62\u7FFC + +TubeFinSetCfg.checkbox.Automatic = \u81EA\u52A8 +TubeFinSetCfg.lbl.Finrotation = \u7FFC\u7FC5\u65CB\u5EA6: +TubeFinSetCfg.lbl.Innerdiam = \u5185\u76F4\u5F84: +TubeFinSetCfg.lbl.Length = \u957F\u5EA6: +TubeFinSetCfg.lbl.Nbroffins = \u7FFC\u6570\u91CF: +TubeFinSetCfg.lbl.Outerdiam = \u5916\u76F4\u5F84: +TubeFinSetCfg.lbl.Thickness = \u539A\u5EA6: +TubeFinSetCfg.lbl.ttip.Finrotation = \u7A33\u5B9A\u7FFC\u7EC4\u5408\u91CC\u7B2C\u4E00\u7247\u7684\u89D2\u5EA6 + Warning.DISCONTINUITY = \u7BAD\u4F53\u76F4\u5F84\u4E0D\u8FDE\u7EED. Warning.FILE_INVALID_PARAMETER = \u65E0\u6548\u53C2\u6570, \u5FFD\u7565. Warning.JAGGED_EDGED_FIN = \u952F\u9F7F\u7FFC\u9884\u6D4B\u53EF\u80FD\u4E0D\u51C6\u786E. @@ -1228,6 +1310,7 @@ Warning.RECOVERY_HIGH_SPEED = \u56DE\u6536\u88C5\u7F6E\u5206\u79BB Warning.RECOVERY_LAUNCH_ROD = \u56DE\u6536\u88C5\u7F6E\u5728\u53D1\u5C04\u67B6\u4E0A\u89E6\u53D1. Warning.SUPERSONIC = \u8D85\u97F3\u901F\u73AF\u5883\u4E0B\u7684\u8BA1\u7B97\u7ED3\u679C\u53EF\u80FD\u4E0D\u51C6\u786E. Warning.THICK_FIN = \u539A\u7FFC\u6A21\u578B\u53EF\u80FD\u4E0D\u51C6\u786E. +Warning.TUMBLE_UNDER_THRUST = \u706B\u7BAD\u7EA7\u5728\u63A8\u529B\u4F5C\u7528\u4E0B\u5F00\u59CB\u503E\u8986. bugreport.dlg.but.Sendbugreport = \u53D1\u9001\u9519\u8BEF\u62A5\u544A bugreport.dlg.but.Sendbugreport.Ttip = \u81EA\u52A8\u53D1\u9001\u9519\u8BEF\u62A5\u544A\u7ED9OpenRocket\u5F00\u53D1\u7EC4 @@ -1275,6 +1358,7 @@ compaddbuttons.Shockcord = \u51CF\u9707\u7D22 compaddbuttons.Streamer = \u98D8\u5E26 compaddbuttons.Transition = \u7EA7\u95F4\u6BB5 compaddbuttons.Trapezoidal = \u68AF\u5F62\u7A33\u5B9A\u7FFC +compaddbuttons.Tubefin = \u7BA1\u5F62\u7FFC compaddbuttons.askPosition.Addtotheend = \u5728\u5C3E\u90E8\u6DFB\u52A0 compaddbuttons.askPosition.Cancel = \u53D6\u6D88 compaddbuttons.askPosition.Inserthere = \u5728\u6B64\u63D2\u5165 @@ -1417,6 +1501,10 @@ filetypes.images = \u56FE\u50CF\u6587\u4EF6 ! General file type names filetypes.pdf = PDF \u6587\u4EF6 (*.pdf) +generalprefs.languages.default = \u7CFB\u7EDF\u9ED8\u8BA4 +generalprefs.lbl.language = \u754C\u9762\u8BED\u8A00 +generalprefs.lbl.languageEffect = \u65B0\u7684\u8BED\u8A00\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u65F6\u751F\u6548. + main.menu.analyze = \u5206\u6790 main.menu.analyze.componentAnalysis = \u7EC4\u4EF6\u5206\u6790 main.menu.analyze.componentAnalysis.desc = \u4EC5\u5206\u6790\u706B\u7BAD\u90E8\u4EF6 @@ -1620,12 +1708,15 @@ optimization.modifier.trapezoidfinset.tipChord.desc = \u4F18\u5316\u7FFC\u6 pref.dlg.Add = \u6DFB\u52A0 pref.dlg.Allthrustcurvefiles = \u652F\u6301\u7684\u63A8\u529B\u66F2\u7EBF\u6587\u4EF6(*.eng; *.rse; *.zip; \u6587\u4EF6\u5939) -pref.dlg.DescriptionArea.Adddirectories = \u4EFB\u4F55\u65B0\u6DFB\u52A0\u7684RASP\u53D1\u52A8\u673A\u6587\u4EF6(*.eng), RockSim\u53D1\u52A8\u673A\u6587\u4EF6(*.rse), ZIP\u538B\u7F29\u5305\u6216\u6587\u4EF6\u5939\u6240\u5305\u542B\u7684\u63A8\u529B\u66F2\u7EBF\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u540E\u751F\u6548 +pref.dlg.DescriptionArea.Adddirectories = \u4EFB\u4F55\u65B0\u6DFB\u52A0\u7684RASP\u53D1\u52A8\u673A\u6587\u4EF6(*.eng), RockSim\u53D1\u52A8\u673A\u6587\u4EF6(*.rse), ZIP\u538B\u7F29\u5305\u6216\u6587\u4EF6\u5939\u6240\u5305\u542B\u7684\u63A8\u529B\u66F2\u7EBF\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u65F6\u751F\u6548 pref.dlg.PrefBooleanSelector1 = \u5220\u9664 pref.dlg.PrefBooleanSelector2 = \u786E\u8BA4 pref.dlg.PrefChoiseSelector1 = \u603B\u662F\u8BE2\u95EE pref.dlg.PrefChoiseSelector2 = \u63D2\u5728\u4E2D\u95F4 pref.dlg.PrefChoiseSelector3 = \u63D2\u5728\u6700\u540E +pref.dlg.PrefFontLarge = \u5927 +pref.dlg.PrefFontMedium = \u4E2D +pref.dlg.PrefFontSmall = \u5C0F pref.dlg.RASPfiles = RASP\u53D1\u52A8\u673A\u6587\u4EF6(*.eng) pref.dlg.RockSimfiles = RockSim\u53D1\u52A8\u673A\u6587\u4EF6(*.rse) pref.dlg.ZIParchives = ZIP\u538B\u7F29\u5305(*.zip) @@ -1637,6 +1728,8 @@ pref.dlg.but.defaultmetric = \u7F3A\u7701\u516C\u5236 pref.dlg.but.openlast = \u5728\u542F\u52A8\u7684\u65F6\u5019\u6253\u5F00\u4E0A\u6B21\u8BBE\u8BA1 pref.dlg.but.reset = \u91CD\u7F6E pref.dlg.checkbox.Checkupdates = \u542F\u52A8\u65F6\u68C0\u67E5\u66F4\u65B0 +pref.dlg.checkbox.Runsimulations = \u5728\u67E5\u770B\u4EFF\u771F\u9762\u677F\u65F6\u91CD\u65B0\u8FD0\u884C\u8FC7\u65F6\u7684\u4EFF\u771F\u9879. +pref.dlg.checkbox.Updateestimates = \u5728\u8BBE\u8BA1\u7A97\u53E3\u66F4\u65B0\u9884\u4F30\u7684\u98DE\u884C\u53C2\u6570. pref.dlg.lbl.Acceleration = \u52A0\u901F\u5EA6: pref.dlg.lbl.Angle = \u89D2\u5EA6: pref.dlg.lbl.Area = \u9762\u79EF: @@ -1654,6 +1747,7 @@ pref.dlg.lbl.Motordimensions = \u53D1\u52A8\u673A\u5C3A\u5BF8: pref.dlg.lbl.Positiontoinsert = \u65B0\u7EC4\u4EF6\u63D2\u5165\u4F4D\u7F6E: pref.dlg.lbl.Pressure = \u538B\u529B: pref.dlg.lbl.Rocketdimensions = \u706B\u7BAD\u5C3A\u5BF8: +pref.dlg.lbl.Rocketinfofontsize = \u706B\u7BAD\u8BBE\u8BA1\u9762\u677F\u7684\u6587\u5B57\u5927\u5C0F: pref.dlg.lbl.Rollrate = \u89D2\u901F\u5EA6: pref.dlg.lbl.Selectprefunits = \u8BF7\u9009\u62E9\u5355\u4F4D\u5236: pref.dlg.lbl.Stability = \u7A33\u5B9A\u6027: @@ -1673,15 +1767,19 @@ pref.dlg.opengl.but.enableAA = \u542F\u7528\u53CD\u952F\u9F7F pref.dlg.opengl.but.enableGL = \u542F\u7528\u4E09\u7EF4\u56FE\u50CF pref.dlg.opengl.lbl.title = \u4E09\u7EF4\u56FE\u50CF pref.dlg.opengl.lbl.useFBO = \u79BB\u7EBF\u6E32\u67D3 +pref.dlg.tab.Colors = \u663E\u793A: pref.dlg.tab.Custommaterials = \u81EA\u5B9A\u4E49\u6750\u6599 pref.dlg.tab.Defaultunits = \u7F3A\u7701\u5355\u4F4D pref.dlg.tab.Graphics = \u56FE\u50CF +pref.dlg.tab.Launch = \u53D1\u5C04 pref.dlg.tab.Materials = \u6750\u6599 pref.dlg.tab.Miscellaneousoptions = \u6742\u9879 pref.dlg.tab.Options = \u9009\u9879 +pref.dlg.tab.Simulation = \u4EFF\u771F pref.dlg.tab.Units = \u5355\u4F4D\u5236 pref.dlg.title.Preferences = \u9996\u9009\u9879 pref.dlg.ttip.Checkupdatesnow = \u73B0\u5728\u68C0\u67E5\u8F6F\u4EF6\u66F4\u65B0 +pref.dlg.ttip.DefaultMach1 = \u672C\u8BBE\u5B9A\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u65F6\u751F\u6548.
printdlg.but.preview = \u9884\u89C8 printdlg.but.saveaspdf = \u4FDD\u5B58\u4E3A PDF @@ -1712,9 +1810,13 @@ simedtdlg.IntensityDesc.Medium = \u4E2D simedtdlg.IntensityDesc.None = \u65E0 simedtdlg.IntensityDesc.Veryhigh = \u5F88\u9AD8 simedtdlg.IntensityDesc.Verylow = \u5F88\u4F4E +simedtdlg.SimExt.add = \u6DFB\u52A0\u6269\u5C55 +simedtdlg.SimExt.copyExtension = \u590D\u5236\u6269\u5C55 +simedtdlg.SimExt.desc = \u6A21\u62DF\u6269\u5C55 \u80FD\u5728\u6A21\u62DF\u8FC7\u7A0B\u4E2D\u542F\u7528\u9AD8\u7EA7\u7279\u6027\u4EE5\u53CA\u81EA\u5B9A\u4E49\u529F\u80FD. \u6BD4\u5982\u4F60\u53EF\u4EE5\u505A hardware-in-the-loop \u6D4B\u8BD5. +simedtdlg.SimExt.noExtensions = \u65E0\u6269\u5C55\u5B9A\u4E49\u9879. simedtdlg.border.Atmoscond = \u5927\u6C14\u6761\u4EF6 simedtdlg.border.Launchrod = \u53D1\u5C04\u67B6 -simedtdlg.border.Simlist = \u4EFF\u771F\u76D1\u542C\u5668 +simedtdlg.border.SimExt = \u6A21\u62DF\u6269\u5C55 simedtdlg.border.Simopt = \u4EFF\u771F\u9009\u9879 simedtdlg.but.add = \u6DFB\u52A0 simedtdlg.but.remove = \u79FB\u9664 @@ -1725,9 +1827,14 @@ simedtdlg.but.savedefault = \u8BBE\u4E3A\u9ED8\u8BA4 simedtdlg.but.ttip.resettodefault = \u91CD\u7F6E\u65F6\u95F4\u6B65\u957F\u4E3A\u7F3A\u7701\u503C ( simedtdlg.chart.Simflight = \u5DF2\u4EFF\u771F\u7684\u98DE\u884C simedtdlg.checkbox.InterStdAtmosphere = \u4F7F\u7528\u56FD\u9645\u6807\u51C6\u5927\u6C14\u6A21\u578B +simedtdlg.checkbox.Intowind = \u603B\u662F\u987A\u98CE\u6216\u9006\u98CE\u53D1\u5C04 simedtdlg.checkbox.ttip.InterStdAtmosphere1 = \u9009\u62E9\u4F7F\u7528\u56FD\u9645\u6807\u51C6\u5927\u6C14\u6A21\u578B.
\u8BE5\u6A21\u578B\u7684\u5927\u6C14\u6E29\u5EA6\u4E3A simedtdlg.checkbox.ttip.InterStdAtmosphere2 = , \u5927\u6C14\u538B\u4E3A simedtdlg.checkbox.ttip.InterStdAtmosphere3 = \u4E14\u5747\u4E3A\u6D77\u5E73\u9762\u503C. +simedtdlg.checkbox.ttip.Intowind1 = \u52FE\u9009\u540E\u53D1\u5C04\u6746\u5C06\u4F1A\u6307\u5411\u98CE\u5411.
+simedtdlg.checkbox.ttip.Intowind2 = 0\u89D2\u5EA6\u53D1\u5C04\u5373\u53D1\u5C04\u6746\u5782\u76F4\u5411\u4E0A.
+simedtdlg.checkbox.ttip.Intowind3 = \u8D1F\u53D1\u5C04\u6746\u89D2\u5EA6\u5C06\u987A\u98CE\u53D1\u5C04.
\u53D6\u6D88\u52FE\u9009\u672C\u9879\u540E\u4F60\u53EF\u4EE5\u6307\u5B9A\u4EFB\u610F\u53D1\u5C04\u6746\u89D2\u5EA6. +simedtdlg.checkbox.ttip.Intowind4 = \u53D6\u6D88\u52FE\u9009\u672C\u9879\u540E\u4F60\u53EF\u4EE5\u6307\u5B9A\u4EFB\u610F\u53D1\u5C04\u6746\u89D2\u5EA6. simedtdlg.combo.ttip.Flightcfg = \u9009\u62E9\u8981\u4F7F\u7528\u7684\u98DE\u884C\u914D\u7F6E. simedtdlg.dlg.Simres = \u4EFF\u771F\u7ED3\u679C simedtdlg.lbl.Addsimlist = \u6DFB\u52A0\u4EFF\u771F\u76D1\u542C\u5668 @@ -1753,6 +1860,7 @@ simedtdlg.lbl.Temperature = \u6E29\u5EA6: simedtdlg.lbl.Timestep = \u65F6\u95F4\u6B65\u957F: simedtdlg.lbl.Turbulenceintensity = \u6E4D\u6D41\u5F3A\u5EA6: simedtdlg.lbl.Wind = \u98CE\u573A\u6761\u4EF6 +simedtdlg.lbl.Winddirection = \u98CE\u5411: simedtdlg.lbl.runsimfirst = \u8BF7\u5148\u8FD0\u884C\u4EFF\u771F simedtdlg.lbl.ttip.Altitude = \u53D1\u5C04\u9AD8\u5EA6\u57FA\u4E8E\u6D77\u5E73\u9762.
\u8FD9\u4F1A\u5F71\u54CD\u5927\u6C14\u6A21\u578B\u4E2D\u706B\u7BAD\u7684\u4F4D\u7F6E. simedtdlg.lbl.ttip.Angle = \u53D1\u5C04\u67B6\u76F8\u5BF9\u4E8E\u5782\u76F4\u65B9\u5411\u7684\u89D2\u5EA6 @@ -1776,6 +1884,7 @@ simedtdlg.lbl.ttip.Timestep2 = 4\u9636\u6A21\u62DF\u65B9\u6CD5\u9 simedtdlg.lbl.ttip.Turbulenceintensity1 = \u6E4D\u6D41\u5F3A\u5EA6\u8FD1\u4F3C\u4E3A\u6807\u51C6\u5DEE\u9664\u4EE5\u5E73\u5747\u98CE\u901F.
simedtdlg.lbl.ttip.Turbulenceintensity2 = \u5178\u578B\u53D6\u503C\u8303\u56F4\u662F\u4ECE simedtdlg.lbl.ttip.Turbulenceintensity3 = \u5230 +simedtdlg.lbl.ttip.Winddirection = \u98CE\u5411, 0-360\u5EA6.
0 \u662F\u5317\u98CE,
90 \u662F\u4E1C\u98CE simedtdlg.tab.CustomExpressions = \u81EA\u5B9A\u4E49\u8868\u8FBE\u5F0F simedtdlg.tab.Exportdata = \u8F93\u51FA\u6570\u636E simedtdlg.tab.Launchcond = \u53D1\u5C04\u6761\u4EF6 @@ -1785,40 +1894,42 @@ simedtdlg.title.Editsim = \u7F16\u8F91\u4EFF\u771F simedtdlg.txt.longA1 = \u4EFF\u771F\u76D1\u542C\u5668(Simulation Listener)\u662F\u4E00\u4E2A\u9AD8\u7EA7\u7279\u6027,\u5141\u8BB8\u7528\u6237\u81EA\u5B9A\u4E49\u4EE3\u7801\u4E0E\u4EFF\u771F\u8FC7\u7A0B\u4EA4\u4E92 simedtdlg.txt.longA2 = \u5173\u4E8E\u4EFF\u771F\u76D1\u542C\u5668\u7684\u8BE6\u7EC6\u4FE1\u606F,\u8BF7\u53C2\u9605OpenRocket\u76F8\u5173\u6280\u672F\u6587\u6863. -simpanel.but.deletesimulations = \u5220\u9664\u4EFF\u771F -simpanel.but.editsimulation = \u7F16\u8F91\u4EFF\u771F +simpanel.but.deletesimulations = \u5220\u9664\u4EFF\u771F +simpanel.but.editsimulation = \u7F16\u8F91\u4EFF\u771F ! Simulation Panel -simpanel.but.newsimulation = \u65B0\u5EFA\u4EFF\u771F -simpanel.but.plotexport = \u7ED8\u56FE/\u8F93\u51FA -simpanel.but.runsimulations = \u8FD0\u884C\u4EFF\u771F -simpanel.but.ttip.deletesim = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F -simpanel.but.ttip.editsim = \u7F16\u8F91\u9009\u4E2D\u7684\u4EFF\u771F -simpanel.but.ttip.newsimulation = \u6DFB\u52A0\u4E00\u4E2A\u65B0\u7684\u4EFF\u771F -simpanel.but.ttip.runsimu = \u91CD\u65B0\u8FD0\u884C\u9009\u4E2D\u7684\u4EFF\u771F -simpanel.checkbox.donotask = \u4E0D\u518D\u8BE2\u95EE -simpanel.col.Apogee = \u6700\u9AD8\u70B9 -simpanel.col.Configuration = \u914D\u7F6E -simpanel.col.Flighttime = \u98DE\u884C\u65F6\u95F4 -simpanel.col.Groundhitvelocity = \u649E\u51FB\u5730\u9762\u901F\u5EA6 -simpanel.col.Maxacceleration = \u6700\u5927\u52A0\u901F\u5EA6 -simpanel.col.Maxvelocity = \u6700\u5927\u901F\u5EA6 -simpanel.col.Motors = \u53D1\u52A8\u673A -simpanel.col.Name = \u540D\u79F0 -simpanel.col.Timetoapogee = \u6700\u9AD8\u70B9\u65F6\u95F4 -simpanel.col.Velocityatdeploy = \u6709\u6548\u8D1F\u8377\u901F\u5EA6 -simpanel.col.Velocityoffrod = \u79BB\u67B6\u901F\u5EA6 -simpanel.dlg.lbl.DeleteSim1 = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F? -simpanel.dlg.lbl.DeleteSim2 = \u8BE5\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500. -simpanel.dlg.lbl.DeleteSim3 = \u5220\u9664\u4EFF\u771F -simpanel.lbl.defpref = \u60A8\u53EF\u5728\u9996\u9009\u9879\u4E2D\u4FEE\u6539\u9ED8\u8BA4\u64CD\u4F5C. -simpanel.ttip.external = \u5BFC\u5165\u7684\u6570\u636E -simpanel.ttip.loaded = \u4ECE\u6587\u4EF6\u8F7D\u5165\u6570\u636E -simpanel.ttip.noData = \u6CA1\u6709\u53EF\u7528\u7684\u4EFF\u771F\u6570\u636E. -simpanel.ttip.noWarnings = \u6CA1\u6709\u8B66\u544A. -simpanel.ttip.notSimulated = \u672A\u8FDB\u884C\u8FC7\u4EFF\u771F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F. -simpanel.ttip.outdated = \u6570\u636E\u5DF2\u8FC7\u671F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F\u91CD\u65B0\u8BA1\u7B97. -simpanel.ttip.uptodate = \u6700\u65B0\u7684\u6570\u636E -simpanel.ttip.warnings = \u8B66\u544A: +simpanel.but.newsimulation = \u65B0\u5EFA\u4EFF\u771F +simpanel.but.plotexport = \u7ED8\u56FE/\u8F93\u51FA +simpanel.but.runsimulations = \u8FD0\u884C\u4EFF\u771F +simpanel.but.ttip.deletesim = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F +simpanel.but.ttip.editsim = \u7F16\u8F91\u9009\u4E2D\u7684\u4EFF\u771F +simpanel.but.ttip.newsimulation = \u6DFB\u52A0\u4E00\u4E2A\u65B0\u7684\u4EFF\u771F +simpanel.but.ttip.runsimu = \u91CD\u65B0\u8FD0\u884C\u9009\u4E2D\u7684\u4EFF\u771F +simpanel.checkbox.donotask = \u4E0D\u518D\u8BE2\u95EE +simpanel.col.Apogee = \u6700\u9AD8\u70B9 +simpanel.col.Configuration = \u914D\u7F6E +simpanel.col.Flighttime = \u98DE\u884C\u65F6\u95F4 +simpanel.col.Groundhitvelocity = \u649E\u51FB\u5730\u9762\u901F\u5EA6 +simpanel.col.Maxacceleration = \u6700\u5927\u52A0\u901F\u5EA6 +simpanel.col.Maxvelocity = \u6700\u5927\u901F\u5EA6 +simpanel.col.Motors = \u53D1\u52A8\u673A +simpanel.col.Name = \u540D\u79F0 +simpanel.col.OptimumCoastTime = \u6700\u957F\u5EF6\u6EDE\u65F6\u95F4 +simpanel.col.OptimumCoastTime.ttip = \u4ECE\u6700\u540E\u4E00\u7EA7\u53D1\u52A8\u673A\u71C3\u5C3D\u81F3\u8FBE\u5230\u6700\u9AD8\u9AD8\u5EA6\u7684\u65F6\u95F4. +simpanel.col.Timetoapogee = \u6700\u9AD8\u70B9\u65F6\u95F4 +simpanel.col.Velocityatdeploy = \u6709\u6548\u8D1F\u8377\u901F\u5EA6 +simpanel.col.Velocityoffrod = \u79BB\u67B6\u901F\u5EA6 +simpanel.dlg.lbl.DeleteSim1 = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F? +simpanel.dlg.lbl.DeleteSim2 = \u8BE5\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500. +simpanel.dlg.lbl.DeleteSim3 = \u5220\u9664\u4EFF\u771F +simpanel.lbl.defpref = \u60A8\u53EF\u5728\u9996\u9009\u9879\u4E2D\u4FEE\u6539\u9ED8\u8BA4\u64CD\u4F5C. +simpanel.ttip.external = \u5BFC\u5165\u7684\u6570\u636E +simpanel.ttip.loaded = \u4ECE\u6587\u4EF6\u8F7D\u5165\u6570\u636E +simpanel.ttip.noData = \u6CA1\u6709\u53EF\u7528\u7684\u4EFF\u771F\u6570\u636E. +simpanel.ttip.noWarnings = \u6CA1\u6709\u8B66\u544A. +simpanel.ttip.notSimulated = \u672A\u8FDB\u884C\u8FC7\u4EFF\u771F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F. +simpanel.ttip.outdated = \u6570\u636E\u5DF2\u8FC7\u671F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F\u91CD\u65B0\u8BA1\u7B97. +simpanel.ttip.uptodate = \u6700\u65B0\u7684\u6570\u636E +simpanel.ttip.warnings = \u8B66\u544A: simplotpanel.AUTO_NAME = \u81EA\u52A8 simplotpanel.CUSTOM = \u81EA\u5B9A\u4E49 From f1cf8c88bdc890e0414475c3803fbb7dfa95a1f2 Mon Sep 17 00:00:00 2001 From: Doug Pedrick Date: Sun, 29 Mar 2015 11:56:15 -0500 Subject: [PATCH 09/10] Added support for Rocksim Tube Fin Set file elements (import and export). --- .../file/rocksim/RocksimCommonConstants.java | 2 + .../file/rocksim/export/BodyTubeDTO.java | 6 +- .../file/rocksim/export/TubeFinSetDTO.java | 109 ++ .../rocksim/importt/AttachedPartsHandler.java | 2 +- .../rocksim/importt/TubeFinSetHandler.java | 119 ++ .../rocksim/importt/RocksimLoaderTest.java | 2 +- .../importt/TubeFinSetHandlerTest.java | 84 ++ .../file/rocksim/importt/TubeFins1.rkt | 1127 +++++++++++++++++ .../file/rocksim/importt/TubeFins2.rkt | 1127 +++++++++++++++++ 9 files changed, 2575 insertions(+), 3 deletions(-) create mode 100644 core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java create mode 100644 core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java create mode 100644 core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java create mode 100644 core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt create mode 100644 core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt diff --git a/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java b/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java index 86cc5861d..1b8e92fca 100644 --- a/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java +++ b/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java @@ -84,6 +84,8 @@ public class RocksimCommonConstants { public static final String RING_TAIL = "RingTail"; public static final String EXTERNAL_POD = "ExternalPod"; public static final String TEXTURE = "Texture"; + public static final String TUBE_COUNT = "TubeCount"; + public static final String MAX_TUBES_ALLOWED = "MaxTubesAllowed"; /** * Length conversion. Rocksim is in millimeters, OpenRocket in meters. diff --git a/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java index 4f9f708d9..18c56f70e 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java @@ -15,6 +15,7 @@ import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.Streamer; import net.sf.openrocket.rocketcomponent.Transition; import net.sf.openrocket.rocketcomponent.TubeCoupler; +import net.sf.openrocket.rocketcomponent.TubeFinSet; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -53,10 +54,11 @@ public class BodyTubeDTO extends BasePartDTO implements AttachableParts { @XmlElementRef(name = RocksimCommonConstants.LAUNCH_LUG, type = LaunchLugDTO.class), @XmlElementRef(name = RocksimCommonConstants.FIN_SET, type = FinSetDTO.class), @XmlElementRef(name = RocksimCommonConstants.CUSTOM_FIN_SET, type = CustomFinSetDTO.class), + @XmlElementRef(name = RocksimCommonConstants.TUBE_FIN_SET, type = TubeFinSetDTO.class), @XmlElementRef(name = RocksimCommonConstants.STREAMER, type = StreamerDTO.class), @XmlElementRef(name = RocksimCommonConstants.PARACHUTE, type = ParachuteDTO.class), @XmlElementRef(name = RocksimCommonConstants.MASS_OBJECT, type = MassObjectDTO.class)}) - List attachedParts = new ArrayList(); + List attachedParts = new ArrayList(); /** * Constructor. @@ -121,6 +123,8 @@ public class BodyTubeDTO extends BasePartDTO implements AttachableParts { attachedParts.add(new CustomFinSetDTO((FreeformFinSet) rocketComponents)); } else if (rocketComponents instanceof FinSet) { attachedParts.add(new FinSetDTO((FinSet) rocketComponents)); + } else if (rocketComponents instanceof TubeFinSet) { + attachedParts.add(new TubeFinSetDTO((TubeFinSet) rocketComponents)); } } } diff --git a/core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java new file mode 100644 index 000000000..8c98a066b --- /dev/null +++ b/core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java @@ -0,0 +1,109 @@ +package net.sf.openrocket.file.rocksim.export; + +import net.sf.openrocket.file.rocksim.RocksimCommonConstants; +import net.sf.openrocket.rocketcomponent.TubeFinSet; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * This class models an XML element for a Rocksim TubeFinSet. + */ +@XmlRootElement(name = RocksimCommonConstants.TUBE_FIN_SET) +@XmlAccessorType(XmlAccessType.FIELD) +public class TubeFinSetDTO extends BasePartDTO { + + @XmlElement(name = RocksimCommonConstants.OD) + private double od = 0d; + @XmlElement(name = RocksimCommonConstants.ID) + private double id = 0d; + @XmlElement(name = RocksimCommonConstants.TUBE_COUNT) + private int tubeCount = 0; + @XmlElement(name = RocksimCommonConstants.MAX_TUBES_ALLOWED) + private int maxTubeCount = 0; + + /** + * Default constructor. + */ + public TubeFinSetDTO() { + } + + /** + * Copy constructor. Fully populates this instance with values taken from the OR TubeFinSet. + * + * @param theORTubeFinSet The OR TubeFinSet component to be serialized in Rocksim format + */ + public TubeFinSetDTO(TubeFinSet theORTubeFinSet) { + super(theORTubeFinSet); + setId(theORTubeFinSet.getInnerRadius() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS); + setOd(theORTubeFinSet.getOuterRadius() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS); + setRadialAngle(theORTubeFinSet.getBaseRotation()); + setTubeCount(theORTubeFinSet.getFinCount()); + } + + /** + * Set the outer diameter of the tube fin(s). + * + * @return diameter in meters + */ + public double getOd() { + return od; + } + + /** + * Set the outer diameter of the tube fin(s). + * + * @param theOd diameter in meters + */ + public void setOd(double theOd) { + od = theOd; + } + + /** + * Get the inner diameter of the tube fin(s). + * + * @return diameter in meters + */ + public double getId() { + return id; + } + + /** + * Set the inner diameter of the tube fin(s). + * + * @param theId diameter in meters + */ + public void setId(double theId) { + id = theId; + } + + /** + * Get the tube fin count. + * + * @return # tube fins + */ + public int getTubeCount() { + return tubeCount; + } + + /** + * Set the tube fin count. + * + * @param theTubeCount # tube fins + */ + public void setTubeCount(final int theTubeCount) { + tubeCount = theTubeCount; + maxTubeCount = tubeCount; + } + + /** + * Get the max tube fin count. Since OR doesn't have this concept, just set it to the actual count. + * + * @return # tube fins + */ + public int getMaxTubeCount() { + return maxTubeCount; + } +} diff --git a/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java b/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java index 3738a160f..7c3d57285 100644 --- a/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java +++ b/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java @@ -77,7 +77,7 @@ class AttachedPartsHandler extends AbstractElementHandler { return new SubAssemblyHandler(context, component); } if (RocksimCommonConstants.TUBE_FIN_SET.equals(element)) { - warnings.add("Tube fins are not currently supported. Ignoring."); + return new TubeFinSetHandler(context, component, warnings); } if (RocksimCommonConstants.RING_TAIL.equals(element)) { warnings.add("Ring tails are not currently supported. Ignoring."); diff --git a/core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java b/core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java new file mode 100644 index 000000000..64c8de1b3 --- /dev/null +++ b/core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java @@ -0,0 +1,119 @@ +package net.sf.openrocket.file.rocksim.importt; + +import net.sf.openrocket.aerodynamics.WarningSet; +import net.sf.openrocket.file.DocumentLoadingContext; +import net.sf.openrocket.file.rocksim.RocksimCommonConstants; +import net.sf.openrocket.file.rocksim.RocksimFinishCode; +import net.sf.openrocket.file.simplesax.ElementHandler; +import net.sf.openrocket.file.simplesax.PlainTextHandler; +import net.sf.openrocket.material.Material; +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.rocketcomponent.TubeFinSet; +import org.xml.sax.SAXException; + +import java.util.HashMap; + +/** + * Rocksim import SAX handler for Tube Fin Sets. + */ +public class TubeFinSetHandler extends PositionDependentHandler { + + /** + * The OpenRocket TubeFinSet instance. + */ + private final TubeFinSet tubeFin; + + /** + * Constructor. + * + * @param c the parent + * @param warnings the warning set + * + * @throws IllegalArgumentException thrown if c is null + */ + public TubeFinSetHandler(DocumentLoadingContext context, RocketComponent c, WarningSet warnings) throws IllegalArgumentException { + super(context); + if (c == null) { + throw new IllegalArgumentException("The parent component of a tube fin may not be null."); + } + tubeFin = new TubeFinSet(); + if (isCompatible(c, TubeFinSet.class, warnings)) { + c.addChild(tubeFin); + } + } + + + /** + * Set the relative position onto the component. + * + * @param position the OpenRocket position + */ + @Override + protected void setRelativePosition(final RocketComponent.Position position) { + tubeFin.setRelativePosition(position); + } + + /** + * Get the OR instance after the XML parsing is done. + * + * @return a TubeFinSet instance + */ + @Override + protected TubeFinSet getComponent() { + return tubeFin; + } + + /** + * Get the type of material the tube fins are constructed from. + * + * @return Material.Type + */ + @Override + protected Material.Type getMaterialType() { + return Material.Type.BULK; + } + + /** + * {@inheritDoc} + */ + @Override + public ElementHandler openElement(final String element, final HashMap attributes, final WarningSet warnings) throws SAXException { + return PlainTextHandler.INSTANCE; + } + + /** + * {@inheritDoc} + */ + @Override + public void closeElement(String element, HashMap attributes, String content, WarningSet warnings) + throws SAXException { + super.closeElement(element, attributes, content, warnings); + + try { + if (RocksimCommonConstants.OD.equals(element)) { + tubeFin.setOuterRadius(Math.max(0, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS)); + } + if (RocksimCommonConstants.ID.equals(element)) { + tubeFin.setInnerRadius(Math.max(0, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS)); + } + if (RocksimCommonConstants.LEN.equals(element)) { + tubeFin.setLength(Math.max(0, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH)); + } + if (RocksimCommonConstants.MATERIAL.equals(element)) { + setMaterialName(content); + } + if (RocksimCommonConstants.RADIAL_ANGLE.equals(element)) { + tubeFin.setBaseRotation(Double.parseDouble(content)); + } + if (RocksimCommonConstants.TUBE_COUNT.equals(element)) { + tubeFin.setFinCount(Integer.parseInt(content)); + } + if (RocksimCommonConstants.FINISH_CODE.equals(element)) { + tubeFin.setFinish(RocksimFinishCode.fromCode(Integer.parseInt(content)).asOpenRocket()); + } + } catch (NumberFormatException nfe) { + warnings.add("Could not convert " + element + " value of " + content + ". It is expected to be a number."); + } + } + +} diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java b/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java index 7711c463c..72d8be26c 100644 --- a/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java +++ b/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java @@ -122,7 +122,7 @@ public class RocksimLoaderTest extends BaseTestCase { Assert.assertEquals(0.185d, stage1.getOverrideMass(), 0.001); Assert.assertTrue(stage1.isCGOverridden()); Assert.assertEquals(0.3d, stage1.getOverrideCG().x, 0.001); - Assert.assertEquals(4, loader.getWarnings().size()); + Assert.assertEquals(3, loader.getWarnings().size()); Assert.assertEquals(1, stage2.getChildCount()); Assert.assertEquals("2nd Stage Tube", stage2.getChild(0).getName()); diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java new file mode 100644 index 000000000..0bd298a67 --- /dev/null +++ b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java @@ -0,0 +1,84 @@ +package net.sf.openrocket.file.rocksim.importt; + +import net.sf.openrocket.aerodynamics.WarningSet; +import net.sf.openrocket.file.rocksim.RocksimCommonConstants; +import net.sf.openrocket.rocketcomponent.BodyTube; +import net.sf.openrocket.rocketcomponent.ExternalComponent; +import net.sf.openrocket.rocketcomponent.TubeFinSet; +import org.junit.Assert; + +import java.util.HashMap; + +/** + * Test for importing a Rocksim TubeFinSet into OR. + */ +public class TubeFinSetHandlerTest { + + /** + * Method: asOpenRocket(WarningSet warnings) + * + * @throws Exception thrown if something goes awry + */ + @org.junit.Test + public void testAsOpenRocket() throws Exception { + + WarningSet warnings = new WarningSet(); + TubeFinSetHandler handler = new TubeFinSetHandler(null, new BodyTube(), warnings); + + HashMap attributes = new HashMap<>(); + + handler.closeElement("Name", attributes, "The name", warnings); + handler.closeElement("TubeCount", attributes, "4", warnings); + handler.closeElement("RadialAngle", attributes, ".123", warnings); + + TubeFinSet fins = handler.getComponent(); + Assert.assertNotNull(fins); + Assert.assertEquals(0, warnings.size()); + + Assert.assertEquals("The name", fins.getName()); + Assert.assertEquals(4, fins.getFinCount()); + + Assert.assertEquals(.123d, fins.getBaseRotation(), 0d); + + handler.closeElement("OD", attributes, "-1", warnings); + Assert.assertEquals(0d, fins.getOuterRadius(), 0.001); + handler.closeElement("OD", attributes, "0", warnings); + Assert.assertEquals(0d, fins.getOuterRadius(), 0.001); + handler.closeElement("OD", attributes, "75", warnings); + Assert.assertEquals(75d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS, fins.getOuterRadius(), 0.001); + handler.closeElement("OD", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + handler.closeElement("ID", attributes, "-1", warnings); + Assert.assertEquals(0d, fins.getInnerRadius(), 0.001); + handler.closeElement("ID", attributes, "0", warnings); + Assert.assertEquals(0d, fins.getInnerRadius(), 0.001); + handler.closeElement("ID", attributes, "75", warnings); + Assert.assertEquals(75d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS, fins.getInnerRadius(), 0.001); + handler.closeElement("ID", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + handler.closeElement("Len", attributes, "-1", warnings); + Assert.assertEquals(0d, fins.getLength(), 0.001); + handler.closeElement("Len", attributes, "10", warnings); + Assert.assertEquals(10d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH, fins.getLength(), 0.001); + handler.closeElement("Len", attributes, "10.0", warnings); + Assert.assertEquals(10d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH, fins.getLength(), 0.001); + handler.closeElement("Len", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + handler.closeElement("FinishCode", attributes, "-1", warnings); + Assert.assertEquals(ExternalComponent.Finish.NORMAL, fins.getFinish()); + handler.closeElement("FinishCode", attributes, "100", warnings); + Assert.assertEquals(ExternalComponent.Finish.NORMAL, fins.getFinish()); + handler.closeElement("FinishCode", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + + } + +} diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt new file mode 100644 index 000000000..e91d25d50 --- /dev/null +++ b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt @@ -0,0 +1,1127 @@ + + 4 + + + Airplane Look-A-Like Design + 0 + 1 + 1 + 0. + 0. + 0. + 0. + 0. + 1 + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 4 + 914.4 + 0 + 0 + 0 + 1 + 0 + This is a neat design that shows off the ability of RockSim to compute the stability of Assymetrical fin arrangements. + Tim Van Milligan. Visit my web site at: www.ApogeeRockets.com + 4 + 29 + 1 + 0 + CSV1|1|269.85,7.10543e-15,0|234.797,725.664,238.862|-0.445864,0.260358,-0.856399|544.986,1043.28|30|2|764.769|-34.4359|0|0|0|0 + 0,429.071,0,0 + 0,17.5351,0,0 + 0,429.071,0,0 + 0,17.5351,0,0 + 0,0,0,0 + 0,0,0,0 + 2 + 1 + 1 + 1 + 0. + 0. + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0. + 10. + 10.0076 + 10.0076 + 10.0076 + 0 + 0 + 0 + 10. + 0.15 + black + 87.122 + 29.972 + 635.051 + 635.051 + 0. + 635.051 + 0,29.972,0,0 + 0,635.051,0,0 + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +11 +1 +0. +0. +0 +0. +0. +0. +0. +-1 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +Apogee +11.8 +1049.21 +Polystyrene PS +Nose cone +72.9996 +1 +0. +10.0765 +86.8842 +0.0068397 +0.0068397 +0. +0 +19114 +PNC 29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +1 +0 +0 +0 +rgb(204,43,29) +2. +0.0500862 +2. +0.0500862 +1 +0 +8 +0 +0. +108.001 +29.8958 +0 +1 +1 +29.9974 +0.9906 +0. +28.8036 +0. +0. +0. + + + + +Apogee +0. +1121.29 +Paper +Forward Fuselage Tube +0. +0 +0. +10.7139 +101.6 +0.0191333 +0.0191333 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +2 +1 +0 +0 +rgb(102,255,102) +0. +0. +0. +0. +1 +0 +8 +0 +108.001 +29.972 +28.956 +203.2 +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +924.265 +Polyethylene LDPE +Parachute +0. +0 +60.325 +6.87245 +50.8 +0. +0. +0. +0 +29115 + +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,0) +white +1 +11 +0 +0 +0 +rgb(255,102,0) +0. +0. +0. +0. +1 +0 +8 +0 +168.326 +609.6 +0. +6 +6 +0.0254 +609.6 +1 +0.00032972 +Carpet String (Apogee 29500) +0.75 + + + + +Estes +0. +0.00039698 +100lb Kevlar (Apogee 29505) +Shock Cord (Mass Object) +180.975 +0 +180.975 +0.483998 +0. +0. +0. +0. +2 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +12 +0 +0 +0 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +288.976 +1 +1219.2 + + + + +Apogee +63.786 +1121.29 +Paper +Tube coupler +0. +1 +-31.75 +2.41365 +31.75 +0. +0. +0. +0 +13008 +AC-29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,55,41) +white +1 +15 +0 +0 +2 +rgb(190,11,17) +0. +0. +0. +0. +1 +0 +8 +0 +279.451 +28.702 +27.94 +63.5 +0 +4 +0 + + + + + + +Apogee +0. +1121.29 +Paper +Aft Fuselage Tube +0. +0 +0. +13.3924 +127. +0.0239166 +0.0239166 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +3 +1 +0 +0 +rgb(26,209,56) +0. +0. +0. +0. +1 +0 +8 +0 +311.201 +29.972 +28.956 +254. +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +1121.29 +Paper +Engine Mount Tube +0. +0 +-69.85 +2.17025 +50.8 +0. +0. +0. +0 +10085 +18 mm +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(76,76,76) +white +1 +5 +0 +0 +2 +rgb(71,96,255) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +18.6944 +18.034 +101.6 +0 +1 +18. +12.7 +0. +0. +1 +0 + + +Apogee +0.44 +1121.29 +Paper +Engine block +0. +1 +57.15 +0.680438 +3.175 +0. +0. +0. +0 +13029 +CR 13-18 ring +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(39,181,255) +white +1 +6 +0 +0 +2 +rgb(0,51,153) +0. +0. +0. +0. +1 +0 +8 +0 +571.551 +17.78 +13.9446 +6.35 +0 +2 +0 + + + + +Estes +1.4 +0.00112861 +Engine hook (mass object) +28.575 +1 +28.575 +0. +0. +0. +0. +0. +2 +Engine hook +Standard size +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +8 +0 +0 +2 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +606.476 +0 +0. + + + + + + +Apogee +1.64 +1121.29 +Paper +Front Engine Mount Centering Ring +0. +1 +25.4 +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +9 +0 +0 +2 +rgb(204,0,153) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Apogee +1.64 +1121.29 +Paper +Rear Engine Mount Centering Ring +0. +1 +0. +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +10 +0 +0 +2 +rgb(204,30,85) +0. +0. +0. +0. +1 +0 +8 +0 +558.851 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Custom +0. +688.794 +Cardboard +Tube fins +0. +0 +174.625 +193.542 +36.5125 +0.043181 +0.043181 +0. +0 +29.2735 +0.903382 +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +29 +0 +0 +0 +blue +10.2204 +0.524222 +16.7631 +0.487223 +1 +0 +8 +0 +485.826 +28.575 +0. +73.025 +0 +6 +1.01975 +6 + + + + + + +Custom +0. +1049.21 +Polystyrene PS +Rear Boattail (transition) +0. +0 +0. +7.91299 +29.4088 +0.00525216 +0.00525216 +0. +0 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +4 +0 +0 +0 +rgb(0,64,128) +-1.22806 +0.605641 +-1.22806 +0.605641 +1 +0 +8 +0 +565.201 +29.972 +18.6944 +63.5 +0 +0. +0. +1 +1.524 +0. +0. +0. +1 +0. +102.846 +39.3464 + + + + + + + + + + + + + + + + + + +134.44 +45.3235 +80.1762 +5.98125 +4.53 +1 +10.207 +133.356 +5 +6.45125 +1 +1.45125 +44.3662 +6.45125 +2.10759 +44.3969 +9.12783 +78.9581 +13.9226 +129.31 +0. +0. +0 +914.4 +0 +0. +0 +0.174533 +0. +0. +759.813 +1.571 +0. +50. +15. +0. +0. +0 +3 +1.34112 +3.53162 +3 +0.04 +0.02 +0 +6 +1. +1. +1 +0. +0 +3 +300. +2000. +1 +5.99999 +0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2 +0.99 +2000. +1500. +2 +0.98 +1 +0. +0 +0.08 +1 +0. +1 +0. +1 +0. +1. +1. +0. +0 +0 +3600. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +[C6-5] +10.1691 +0. +0. +0.25625 +1.435 +0.18 +10 +1 +800. +0 +Earth +Standard earth condistions. +2.681 +129.31 +0. +3.75682 +1.36125 +-3.50153 +0. +0,0,6.45125,0,0 +-1,-1,6.45,0,0 +0,0,6.45125,0,0 +32,32,80,32,32 +0.25 +1 +0.149308 +0.356462 +0.00433885 +3.02787e-05 +0. +0. +0. + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +11 +1 +0. +0. +1 +133.356 +10.207 +58.8311 +6.45125 +128 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + + + + + +1 +C6 +0. +Estes +12.7 +0. +5 +5. +0. +0. + + + + + + + diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt new file mode 100644 index 000000000..ea1c6673c --- /dev/null +++ b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt @@ -0,0 +1,1127 @@ + + 4 + + + Airplane Look-A-Like Design + 0 + 1 + 1 + 0. + 0. + 0. + 0. + 0. + 1 + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 4 + 914.4 + 0 + 0 + 0 + 1 + 0 + This is a neat design that shows off the ability of RockSim to compute the stability of Assymetrical fin arrangements. + Tim Van Milligan. Visit my web site at: www.ApogeeRockets.com + 4 + 29 + 1 + 0 + CSV1|1|269.85,7.10543e-15,0|234.797,725.664,238.862|-0.445864,0.260358,-0.856399|544.986,1043.28|30|2|764.769|-34.4359|0|0|0|0 + 0,329.307,0,0 + 0,9.1535,0,0 + 0,329.307,0,0 + 0,9.1535,0,0 + 0,0,0,0 + 0,0,0,0 + 2 + 1 + 1 + 1 + 0. + 0. + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0. + 10. + 10.0076 + 10.0076 + 10.0076 + 0 + 0 + 0 + 10. + 0.15 + black + 87.122 + 29.972 + 635.051 + 635.051 + 0. + 635.051 + 0,29.972,0,0 + 0,635.051,0,0 + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +11 +1 +0. +0. +0 +0. +0. +0. +0. +-1 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +Apogee +11.8 +1049.21 +Polystyrene PS +Nose cone +72.9996 +1 +0. +10.0765 +86.8842 +0.0068397 +0.0068397 +0. +0 +19114 +PNC 29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +1 +0 +0 +0 +rgb(204,43,29) +2. +0.0500862 +2. +0.0500862 +1 +0 +8 +0 +0. +108.001 +29.8958 +0 +1 +1 +29.9974 +0.9906 +0. +28.8036 +0. +0. +0. + + + + +Apogee +0. +1121.29 +Paper +Forward Fuselage Tube +0. +0 +0. +10.7139 +101.6 +0.0191333 +0.0191333 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +2 +1 +0 +0 +rgb(102,255,102) +0. +0. +0. +0. +1 +0 +8 +0 +108.001 +29.972 +28.956 +203.2 +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +924.265 +Polyethylene LDPE +Parachute +0. +0 +60.325 +6.87245 +50.8 +0. +0. +0. +0 +29115 + +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,0) +white +1 +11 +0 +0 +0 +rgb(255,102,0) +0. +0. +0. +0. +1 +0 +8 +0 +168.326 +609.6 +0. +6 +6 +0.0254 +609.6 +1 +0.00032972 +Carpet String (Apogee 29500) +0.75 + + + + +Estes +0. +0.00039698 +100lb Kevlar (Apogee 29505) +Shock Cord (Mass Object) +180.975 +0 +180.975 +0.483998 +0. +0. +0. +0. +2 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +12 +0 +0 +0 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +288.976 +1 +1219.2 + + + + +Apogee +63.786 +1121.29 +Paper +Tube coupler +0. +1 +-31.75 +2.41365 +31.75 +0. +0. +0. +0 +13008 +AC-29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,55,41) +white +1 +15 +0 +0 +2 +rgb(190,11,17) +0. +0. +0. +0. +1 +0 +8 +0 +279.451 +28.702 +27.94 +63.5 +0 +4 +0 + + + + + + +Apogee +0. +1121.29 +Paper +Aft Fuselage Tube +0. +0 +0. +13.3924 +127. +0.0239166 +0.0239166 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +3 +1 +0 +0 +rgb(26,209,56) +0. +0. +0. +0. +1 +0 +8 +0 +311.201 +29.972 +28.956 +254. +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +1121.29 +Paper +Engine Mount Tube +0. +0 +-69.85 +2.17025 +50.8 +0. +0. +0. +0 +10085 +18 mm +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(76,76,76) +white +1 +5 +0 +0 +2 +rgb(71,96,255) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +18.6944 +18.034 +101.6 +0 +1 +18. +12.7 +0. +0. +1 +0 + + +Apogee +0.44 +1121.29 +Paper +Engine block +0. +1 +57.15 +0.680438 +3.175 +0. +0. +0. +0 +13029 +CR 13-18 ring +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(39,181,255) +white +1 +6 +0 +0 +2 +rgb(0,51,153) +0. +0. +0. +0. +1 +0 +8 +0 +571.551 +17.78 +13.9446 +6.35 +0 +2 +0 + + + + +Estes +1.4 +0.00112861 +Engine hook (mass object) +28.575 +1 +28.575 +0. +0. +0. +0. +0. +2 +Engine hook +Standard size +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +8 +0 +0 +2 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +606.476 +0 +0. + + + + + + +Apogee +1.64 +1121.29 +Paper +Front Engine Mount Centering Ring +0. +1 +25.4 +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +9 +0 +0 +2 +rgb(204,0,153) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Apogee +1.64 +1121.29 +Paper +Rear Engine Mount Centering Ring +0. +1 +0. +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +10 +0 +0 +2 +rgb(204,30,85) +0. +0. +0. +0. +1 +0 +8 +0 +558.851 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Custom +10. +688.794 +Cardboard +Tube fins +0. +1 +123.825 +20.31 +36.5125 +0.0375518 +0.0375518 +0. +0 +29.2735 +3.14177 +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +29 +0 +0 +0 +blue +5.11021 +0.459553 +8.38157 +0.436423 +1 +0 +8 +0 +435.026 +28.575 +25.4 +73.025 +0 +3 +1.01975 +6 + + + + + + +Custom +0. +1049.21 +Polystyrene PS +Rear Boattail (transition) +0. +0 +0. +7.91299 +29.4088 +0.00525216 +0.00525216 +0. +0 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +4 +0 +0 +0 +rgb(0,64,128) +-1.22806 +0.605641 +-1.22806 +0.605641 +1 +0 +8 +0 +565.201 +29.972 +18.6944 +63.5 +0 +0. +0. +1 +1.524 +0. +0. +0. +1 +0. +102.846 +39.3464 + + + + + + + + + + + + + + + + + + +134.44 +45.3235 +80.1762 +5.98125 +4.53 +1 +10.207 +133.356 +5 +6.45125 +1 +1.45125 +44.3662 +6.45125 +2.10759 +44.3969 +9.12783 +78.9581 +13.9226 +129.31 +0. +0. +0 +914.4 +0 +0. +0 +0.174533 +0. +0. +759.813 +1.571 +0. +50. +15. +0. +0. +0 +3 +1.34112 +3.53162 +3 +0.04 +0.02 +0 +6 +1. +1. +1 +0. +0 +3 +300. +2000. +1 +5.99999 +0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2 +0.99 +2000. +1500. +2 +0.98 +1 +0. +0 +0.08 +1 +0. +1 +0. +1 +0. +1. +1. +0. +0 +0 +3600. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +[C6-5] +10.1691 +0. +0. +0.25625 +1.435 +0.18 +10 +1 +800. +0 +Earth +Standard earth condistions. +2.681 +129.31 +0. +3.75682 +1.36125 +-3.50153 +0. +0,0,6.45125,0,0 +-1,-1,6.45,0,0 +0,0,6.45125,0,0 +32,32,80,32,32 +0.25 +1 +0.149308 +0.356462 +0.00433885 +3.02787e-05 +0. +0. +0. + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +11 +1 +0. +0. +1 +133.356 +10.207 +58.8311 +6.45125 +128 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + + + + + +1 +C6 +0. +Estes +12.7 +0. +5 +5. +0. +0. + + + + + + + From 7b6367b30b0832fd51e86356ad8cbe32049e74e0 Mon Sep 17 00:00:00 2001 From: Daniel_M_Williams Date: Sun, 31 May 2015 12:38:39 -0400 Subject: [PATCH 10/10] Bugfix: If configured wrong, booster stage recovery device would not deploy. This patch prevents the UI from showing those options. --- .../sf/openrocket/gui/adaptors/EnumModel.java | 50 ++++++++++++++++--- .../gui/configdialog/ParachuteConfig.java | 12 ++++- .../configdialog/RecoveryDeviceConfig.java | 2 + .../gui/configdialog/StreamerConfig.java | 6 +++ .../DeploymentSelectionDialog.java | 6 ++- 5 files changed, 66 insertions(+), 10 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/adaptors/EnumModel.java b/swing/src/net/sf/openrocket/gui/adaptors/EnumModel.java index a6757a380..4a7b49f98 100644 --- a/swing/src/net/sf/openrocket/gui/adaptors/EnumModel.java +++ b/swing/src/net/sf/openrocket/gui/adaptors/EnumModel.java @@ -1,9 +1,13 @@ package net.sf.openrocket.gui.adaptors; +import java.util.ArrayList; import java.util.EventObject; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; +import javax.swing.MutableComboBoxModel; + +import org.jfree.util.Log; import net.sf.openrocket.util.ChangeSource; import net.sf.openrocket.util.Reflection; @@ -11,7 +15,7 @@ import net.sf.openrocket.util.StateChangeListener; public class EnumModel> extends AbstractListModel - implements ComboBoxModel, StateChangeListener { + implements ComboBoxModel, MutableComboBoxModel, StateChangeListener { private final ChangeSource source; private final String valueName; @@ -20,6 +24,8 @@ public class EnumModel> extends AbstractListModel private final Enum[] values; private Enum currentValue = null; + ArrayList> displayedValues = new ArrayList>(); + private final Reflection.Method getMethod; private final Reflection.Method setMethod; @@ -60,6 +66,9 @@ public class EnumModel> extends AbstractListModel else this.values = enumClass.getEnumConstants(); + for (Enum e : this.values){ + this.displayedValues.add( e ); + } this.nullText = nullText; stateChanged(null); // Update current value @@ -99,20 +108,20 @@ public class EnumModel> extends AbstractListModel @Override public Object getElementAt(int index) { + if( ( index < 0 ) || ( index >= this.displayedValues.size())){ + return nullText; // bad parameter + } + if (values[index] == null) return nullText; - return values[index]; + return displayedValues.get( index); } @Override public int getSize() { - return values.length; + return displayedValues.size(); } - - - - @SuppressWarnings("unchecked") @Override public void stateChanged(EventObject e) { @@ -130,4 +139,31 @@ public class EnumModel> extends AbstractListModel return "EnumModel["+source.getClass().getCanonicalName()+":"+valueName+"]"; } + @Override + public void addElement(Object item) { + // Not actually allowed. The model starts out with all the enums, and only allows hiding some. + } + + @Override + public void removeElement(Object obj) { + if( null == obj ){ + return; + } + this.displayedValues.remove( obj ); + } + + @Override + public void insertElementAt(Object item, int index) { + // Not actually allowed. The model starts out with all the enums, and only allows hiding some. + } + + @Override + public void removeElementAt(int index) { + if( ( index < 0 ) || ( index >= this.displayedValues.size())){ + return; // bad parameter + } + + this.displayedValues.remove( index ); + } + } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java index d20ee770e..107fca930 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java @@ -4,6 +4,7 @@ package net.sf.openrocket.gui.configdialog; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.ComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; @@ -25,6 +26,7 @@ import net.sf.openrocket.gui.components.UnitSelector; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.material.Material; import net.sf.openrocket.rocketcomponent.DeploymentConfiguration; +import net.sf.openrocket.rocketcomponent.DeploymentConfiguration.DeployEvent; import net.sf.openrocket.rocketcomponent.Parachute; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.startup.Application; @@ -85,7 +87,7 @@ public class ParachuteConfig extends RecoveryDeviceConfig { //// Material: panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Material"))); - JComboBox combo = new JComboBox(new MaterialModel(panel, component, + JComboBox combo = new JComboBox(new MaterialModel(panel, component, Material.Type.SURFACE)); combo.setToolTipText(trans.get("ParachuteCfg.combo.MaterialModel")); panel.add(combo, "spanx 3, growx, wrap 30lp"); @@ -193,7 +195,13 @@ public class ParachuteConfig extends RecoveryDeviceConfig { panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Deploysat") + " " + CommonStrings.dagger), ""); DeploymentConfiguration deploymentConfig = parachute.getDeploymentConfiguration().getDefault(); - combo = new JComboBox(new EnumModel(deploymentConfig, "DeployEvent")); + // this issues a warning because EnumModel ipmlements ComboBoxModel without a parameter... + ComboBoxModel deployOptionsModel = new EnumModel(deploymentConfig, "DeployEvent"); + combo = new JComboBox( deployOptionsModel ); + if( (component.getStageNumber() + 1 ) == d.getRocket().getStageCount() ){ + // This is the bottom stage: Restrict deployment options. + combo.removeItem( DeployEvent.LOWER_STAGE_SEPARATION ); + } panel.add(combo, "spanx 3, growx, wrap"); // ... and delay diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RecoveryDeviceConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RecoveryDeviceConfig.java index 2f5f37c30..ea5a71438 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RecoveryDeviceConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RecoveryDeviceConfig.java @@ -13,6 +13,8 @@ import net.sf.openrocket.rocketcomponent.RocketComponent; public abstract class RecoveryDeviceConfig extends RocketComponentConfig { + private static final long serialVersionUID = 7263235700953855062L; + protected final List altitudeComponents = new ArrayList(); public RecoveryDeviceConfig(OpenRocketDocument d, RocketComponent component) { diff --git a/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java index a9977abb7..68ad60ccf 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java @@ -4,6 +4,7 @@ package net.sf.openrocket.gui.configdialog; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.ComboBoxModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; @@ -26,6 +27,7 @@ import net.sf.openrocket.material.Material; import net.sf.openrocket.rocketcomponent.DeploymentConfiguration; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.Streamer; +import net.sf.openrocket.rocketcomponent.DeploymentConfiguration.DeployEvent; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; @@ -196,6 +198,10 @@ public class StreamerConfig extends RecoveryDeviceConfig { DeploymentConfiguration deploymentConfig = streamer.getDeploymentConfiguration().getDefault(); combo = new JComboBox(new EnumModel(deploymentConfig, "DeployEvent")); + if( (component.getStageNumber() + 1 ) == d.getRocket().getStageCount() ){ + // This is the bottom stage. restrict deployment options. + combo.removeItem( DeployEvent.LOWER_STAGE_SEPARATION ); + } panel.add(combo, "spanx 3, growx, wrap"); // ... and delay diff --git a/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java index 6744f07eb..3b8430153 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java @@ -76,7 +76,11 @@ public class DeploymentSelectionDialog extends JDialog { //// Deploys at: panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Deploysat")), ""); - final JComboBox event = new JComboBox(new EnumModel(newConfiguration, "DeployEvent")); + final JComboBox event = new JComboBox(new EnumModel(newConfiguration, "DeployEvent")); + if( (component.getStageNumber() + 1 ) == rocket.getStageCount() ){ + // This is the bottom stage: Restrict deployment options. + event.removeItem( DeployEvent.LOWER_STAGE_SEPARATION ); + } panel.add(event, "spanx 3, growx, wrap"); // ... and delay