@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile name="Maven default annotation processors profile" enabled="true">
|
||||
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
<bytecodeTargetLevel>
|
||||
<module name="OpenRokcet" target="1.7" />
|
||||
<module name="SSM_Stuct" target="1.7" />
|
||||
<module name="swing" target="11" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
</project>
|
||||
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
</project>
|
||||
@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/swing/pom.xml" />
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="ignoredFiles">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
<option value="$PROJECT_DIR$/swing/pom.xml" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/OpenRocket Core.iml" filepath="$PROJECT_DIR$/OpenRocket Core.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/OpenRocket Swing.iml" filepath="$PROJECT_DIR$/OpenRocket Swing.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/OpenRocket Test Libraries.iml" filepath="$PROJECT_DIR$/OpenRocket Test Libraries.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="eclipse" classpath-dir="$MODULE_DIR$/core" type="JAVA_MODULE" version="4" />
|
||||
@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="eclipse" classpath-dir="$MODULE_DIR$/swing" type="JAVA_MODULE" version="4" />
|
||||
@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="eclipse" classpath-dir="$MODULE_DIR$/lib-test" type="JAVA_MODULE" version="4" />
|
||||
@ -1,13 +1,13 @@
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - A6
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
A6 18 70 4 0.0035 0.0145 Klima
|
||||
0.088 0.502
|
||||
0.186 4.601
|
||||
0.232 7.089
|
||||
0.314 10.477
|
||||
0.418 6.713
|
||||
0.467 3.011
|
||||
0.501 0.418
|
||||
0.71 0.0
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - A6
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
A6 18 70 4 0.0035 0.0145 Klima
|
||||
0.088 0.502
|
||||
0.186 4.601
|
||||
0.232 7.089
|
||||
0.314 10.477
|
||||
0.418 6.713
|
||||
0.467 3.011
|
||||
0.501 0.418
|
||||
0.71 0.0
|
||||
|
||||
@ -1,27 +1,27 @@
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - B4
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
B4 18 70 0-4 0.0054 0.0163 Klima
|
||||
0.049 0.83
|
||||
0.096 1.745
|
||||
0.157 2.946
|
||||
0.209 3.89
|
||||
0.273 4.977
|
||||
0.335 6.093
|
||||
0.380 7.122
|
||||
0.411 8.001
|
||||
0.436 7.065
|
||||
0.465 6.236
|
||||
0.516 5.063
|
||||
0.564 4.462
|
||||
0.607 4.205
|
||||
0.669 4.09
|
||||
0.90 4.09
|
||||
0.966 3.976
|
||||
1.025 3.719
|
||||
1.084 3.261
|
||||
1.145 2.546
|
||||
1.212 1.745
|
||||
1.295 0.772
|
||||
1.364 0.0
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - B4
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
B4 18 70 0-4 0.0054 0.0163 Klima
|
||||
0.049 0.83
|
||||
0.096 1.745
|
||||
0.157 2.946
|
||||
0.209 3.89
|
||||
0.273 4.977
|
||||
0.335 6.093
|
||||
0.380 7.122
|
||||
0.411 8.001
|
||||
0.436 7.065
|
||||
0.465 6.236
|
||||
0.516 5.063
|
||||
0.564 4.462
|
||||
0.607 4.205
|
||||
0.669 4.09
|
||||
0.90 4.09
|
||||
0.966 3.976
|
||||
1.025 3.719
|
||||
1.084 3.261
|
||||
1.145 2.546
|
||||
1.212 1.745
|
||||
1.295 0.772
|
||||
1.364 0.0
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - C2
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
C2 18 70 0-P 0.0113 0.0224 Klima
|
||||
0.04 0.229
|
||||
0.12 0.658
|
||||
0.211 1.144
|
||||
0.291 1.831
|
||||
0.385 2.86
|
||||
0.447 3.833
|
||||
0.505 5.001
|
||||
0.567 3.89
|
||||
0.615 3.146
|
||||
0.665 2.66
|
||||
0.735 2.203
|
||||
0.815 2.088
|
||||
0.93 1.98
|
||||
4.589 1.96
|
||||
4.729 1.888
|
||||
4.815 1.602
|
||||
4.873 1.259
|
||||
4.969 0.658
|
||||
5.083 0.0
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - C2
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
C2 18 70 0-P 0.0113 0.0224 Klima
|
||||
0.04 0.229
|
||||
0.12 0.658
|
||||
0.211 1.144
|
||||
0.291 1.831
|
||||
0.385 2.86
|
||||
0.447 3.833
|
||||
0.505 5.001
|
||||
0.567 3.89
|
||||
0.615 3.146
|
||||
0.665 2.66
|
||||
0.735 2.203
|
||||
0.815 2.088
|
||||
0.93 1.98
|
||||
4.589 1.96
|
||||
4.729 1.888
|
||||
4.815 1.602
|
||||
4.873 1.259
|
||||
4.969 0.658
|
||||
5.083 0.0
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - C6
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
C6 18 70 0-3-5-7-P 0.0096 0.0205 Klima
|
||||
0.046 0.953
|
||||
0.168 5.259
|
||||
0.235 10.023
|
||||
0.291 15.00
|
||||
0.418 9.87
|
||||
0.505 7.546
|
||||
0.582 6.631
|
||||
0.679 6.136
|
||||
0.786 5.716
|
||||
1.26 5.678
|
||||
1.357 5.488
|
||||
1.423 4.992
|
||||
1.469 4.116
|
||||
1.618 1.22
|
||||
1.701 0.0
|
||||
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - C6
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
C6 18 70 0-3-5-7-P 0.0096 0.0205 Klima
|
||||
0.046 0.953
|
||||
0.168 5.259
|
||||
0.235 10.023
|
||||
0.291 15.00
|
||||
0.418 9.87
|
||||
0.505 7.546
|
||||
0.582 6.631
|
||||
0.679 6.136
|
||||
0.786 5.716
|
||||
1.26 5.678
|
||||
1.357 5.488
|
||||
1.423 4.992
|
||||
1.469 4.116
|
||||
1.618 1.22
|
||||
1.701 0.0
|
||||
|
||||
|
||||
@ -1,28 +1,28 @@
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - D3
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
D3 18 70 0-P 0.017 0.0279 Klima
|
||||
0.073 0.229
|
||||
0.178 0.686
|
||||
0.251 1.287
|
||||
0.313 2.203
|
||||
0.375 3.633
|
||||
0.425 5.006
|
||||
0.473 6.465
|
||||
0.556 8.181
|
||||
0.603 9.01
|
||||
0.655 6.922
|
||||
0.698 5.463
|
||||
0.782 4.291
|
||||
0.873 3.576
|
||||
1.024 3.146
|
||||
1.176 2.946
|
||||
5.282 2.918
|
||||
5.491 2.832
|
||||
5.59 2.517
|
||||
5.782 1.859
|
||||
5.924 1.287
|
||||
6.061 0.715
|
||||
6.17 0.286
|
||||
6.26 0.0
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - D3
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
D3 18 70 0-P 0.017 0.0279 Klima
|
||||
0.073 0.229
|
||||
0.178 0.686
|
||||
0.251 1.287
|
||||
0.313 2.203
|
||||
0.375 3.633
|
||||
0.425 5.006
|
||||
0.473 6.465
|
||||
0.556 8.181
|
||||
0.603 9.01
|
||||
0.655 6.922
|
||||
0.698 5.463
|
||||
0.782 4.291
|
||||
0.873 3.576
|
||||
1.024 3.146
|
||||
1.176 2.946
|
||||
5.282 2.918
|
||||
5.491 2.832
|
||||
5.59 2.517
|
||||
5.782 1.859
|
||||
5.924 1.287
|
||||
6.061 0.715
|
||||
6.17 0.286
|
||||
6.26 0.0
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - D9
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
D9 18 70 0-3-5-7-P 0.0161 0.0271 Klima
|
||||
0.04 2.111
|
||||
0.116 9.685
|
||||
0.213 25.0
|
||||
0.286 15.738
|
||||
0.329 12.472
|
||||
0.369 10.67
|
||||
0.42 9.713
|
||||
0.495 9.178
|
||||
0.597 8.896
|
||||
1.711 8.925
|
||||
1.826 8.699
|
||||
1.917 8.052
|
||||
1.975 6.954
|
||||
2.206 1.07
|
||||
2.242 0.0
|
||||
; Raketenmodellbau Klima GmbH
|
||||
; Official manufacturer thrust data - D9
|
||||
; Created by Leo Nutz for OpenRocket,
|
||||
; released into the Public Domain (3/2014)
|
||||
D9 18 70 0-3-5-7-P 0.0161 0.0271 Klima
|
||||
0.04 2.111
|
||||
0.116 9.685
|
||||
0.213 25.0
|
||||
0.286 15.738
|
||||
0.329 12.472
|
||||
0.369 10.67
|
||||
0.42 9.713
|
||||
0.495 9.178
|
||||
0.597 8.896
|
||||
1.711 8.925
|
||||
1.826 8.699
|
||||
1.917 8.052
|
||||
1.975 6.954
|
||||
2.206 1.07
|
||||
2.242 0.0
|
||||
|
||||
@ -1,171 +1,171 @@
|
||||
#
|
||||
# English base translation file
|
||||
#
|
||||
# Should you need to add new logical keys here is the proposed method
|
||||
#
|
||||
# className.ComponentType.componentName
|
||||
#
|
||||
#
|
||||
# Text tokens within braces should not be translated, e.g.
|
||||
# "The file '{filename}' exists."
|
||||
# They are pieces that are inserted dynamically.
|
||||
#
|
||||
|
||||
|
||||
! Set to the name of the current translation file (used for debugging
|
||||
purposes)
|
||||
debug.currentFile = messages.properties
|
||||
|
||||
! RocketActions
|
||||
RocketActions.checkbox.Donotaskmeagain = Yeniden Tekrarlama
|
||||
RocketActions.lbl.Youcanchangedefop = Hatal\u0131 \u00c7al\u0131\u015fmay\u0131 De\u011fi\u015ftirebilirsin
|
||||
in the preferences.
|
||||
RocketActions.showConfirmDialog.lbl1 = Se\u00e7ili sim\u00fclasyonlar\u0131 silmek ister misiniz?
|
||||
RocketActions.showConfirmDialog.lbl2 = <html><i>Bu \u00e7al\u0131\u015fma tamamlanmad\u0131.</i>
|
||||
RocketActions.showConfirmDialog.title = Sim\u00fclasyonlar\u0131 Sil
|
||||
RocketActions.DelCompAct.Delete = Sil
|
||||
RocketActions.DelCompAct.ttip.Delete = Se\u00e7ili par\u00e7ay\u0131 sil.
|
||||
RocketActions.DelSimuAct.Delete = Sil
|
||||
RocketActions.DelSimuAct.ttip.Delete = Se\u00e7ili sim\u00fclasyonu sil.
|
||||
RocketActions.DelAct.Delete = Sil
|
||||
RocketActions.DelAct.ttip.Delete = Se\u00e7ilen par\u00e7ay\u0131 ya da sim\u00fclasyonu sil
|
||||
RocketActions.CutAction.Cut = Kes
|
||||
RocketActions.CutAction.ttip.Cut = Kes bu par\u00e7ay\u0131 yada sim\u00fclasyonun
|
||||
haf\u0131zadan ve kald\u0131r bu tasar\u0131mdan
|
||||
RocketActions.CopyAct.Copy = Kopyala
|
||||
RocketActions.CopyAct.ttip.Copy = Bu par\u00e7ay\u0131 kopyala (ve altpar\u00e7alar\u0131)
|
||||
haf\u0131zaya
|
||||
RocketActions.PasteAct.Paste = Yap\u0131\u015ft\u0131r
|
||||
RocketActions.PasteAct.ttip.Paste = Yap\u0131\u015ft\u0131r par\u00e7ay\u0131 ya da simulasyonu haf\u0131za \u00fczerinden
|
||||
tasar\u0131ma do\u011fru.
|
||||
RocketActions.EditAct.Edit = D\u00fczenle
|
||||
RocketActions.EditAct.ttip.Edit = Se\u00e7ilmi\u015f par\u00e7ay\u0131 d\u00fczenle .
|
||||
RocketActions.NewStageAct.Newstage = Yeni A\u015fama
|
||||
RocketActions.NewStageAct.ttip.Newstage = Yeni bir roket tasar\u0131m\u0131 ekle
|
||||
RocketActions.ActBoosterstage = Yard\u0131mc\u0131/Y\u00fckseltici A\u015fama
|
||||
RocketActions.MoveUpAct.Moveup = Yukar\u0131 \u00c7\u0131kar
|
||||
RocketActions.MoveUpAct.ttip.Moveup = Yukar\u0131ya do\u011fru bu par\u00e7ay\u0131 haraket ettir.
|
||||
RocketActions.MoveDownAct.Movedown = A\u015fa\u011f\u0131ya \u0130ndir
|
||||
RocketActions.MoveDownAct.ttip.Movedown = A\u015fa\u011f\u0131ya do\u011fru bu par\u00e7ay\u0131 haraket
|
||||
ettir.
|
||||
|
||||
! RocketPanel
|
||||
RocketPanel.FigTypeAct.SideView = Yandan G\u00f6r\u00fcn\u00fc\u015f
|
||||
RocketPanel.FigTypeAct.BackView = Arkadan G\u00f6r\u00fcn\u00fc\u015f
|
||||
RocketPanel.FigTypeAct.Figure3D = 3D Resimlendirme
|
||||
RocketPanel.FigTypeAct.Finished = 3D Bitmi\u015f
|
||||
RocketPanel.FigTypeAct.Unfinished = 3D Bitmemi\u015f
|
||||
|
||||
|
||||
RocketPanel.lbl.Flightcfg = U\u00e7u\u015f Bi\u00e7imi/Konumu:
|
||||
RocketPanel.lbl.infoMessage = <html>Click to select Shift+Click
|
||||
to select other Double-click to edit Click+drag to
|
||||
move
|
||||
RocketPanel.lbl.ViewType = G\u00f6r\u00fcn\u00fc\u015f \u015eekli:
|
||||
|
||||
! BasicFrame
|
||||
BasicFrame.tab.Rocketdesign = Roket Tasar\u0131m\u0131
|
||||
BasicFrame.tab.Flightconfig = Motorlar & Bi\u00e7imleri
|
||||
BasicFrame.tab.Flightsim = U\u00e7u\u015f Sim\u00fclasyonlar\u0131
|
||||
BasicFrame.title.Addnewcomp = Yeni par\u00e7a ekle
|
||||
BasicFrame.dlg.lbl1 = Tasar\u0131m '
|
||||
BasicFrame.dlg.lbl2 = ' Kaydedilmemi\u015f.
|
||||
BasicFrame.dlg.lbl3 = Kaydetmek ister misiniz?
|
||||
BasicFrame.dlg.title = Tasar\u0131m Kaydedilmedi
|
||||
BasicFrame.StageName.Sustainer = Devam Et
|
||||
BasicFrame.WarningDialog.txt1 = Problemler a\u00e7\u0131l\u0131rken d\u00fczenleniyor
|
||||
BasicFrame.WarningDialog.txt2 = Baz\u0131 tasar\u0131m par\u00e7alar\u0131 d\u00fczg\u00fcnce
|
||||
y\u00fcklenemedi.
|
||||
BasicFrame.WarningDialog.title = Dosya a\u00e7\u0131l\u0131rken Tehlike
|
||||
|
||||
|
||||
! General error messages used in multiple contexts
|
||||
error.fileExists.title = File exists
|
||||
error.fileExists.desc = File '{filename}' exists. \u00dczerine yazmak ister misiniz?
|
||||
|
||||
error.writing.title = Hata Dosya Yaz\u0131l\u0131rken
|
||||
error.writing.desc = Bir hata dosya yaz\u0131l\u0131rken ortaya \u00e7\u0131kt\u0131:
|
||||
Configuration.lbl.override = Bu durum baz\u0131 u\u00e7u\u015f bi\u00e7imlerinde ge\u00e7ersizdir.
|
||||
|
||||
|
||||
! Labels used in buttons of dialog windows
|
||||
# TODO: Rename these to "btn.xxx"
|
||||
button.ok = Tamam
|
||||
button.cancel = \u00c7\u0131k\u0131\u015f
|
||||
button.close = Kapat
|
||||
|
||||
! Common labels used in buttons of dialog windows
|
||||
dlg.but.ok = Tamam
|
||||
dlg.but.cancel = \u00c7\u0131k\u0131\u015f
|
||||
dlg.but.close = Kapat
|
||||
! General file type names
|
||||
FileHelper.PDF_FILTER = PDF files (*.pdf)
|
||||
FileHelper.ALL_DESIGNS_FILTER = All rocket designs (*.ork; *.rkt)
|
||||
FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket designs (*.ork)
|
||||
FileHelper.ROCKSIM_DESIGN_FILTER = RockSim designs (*.rkt)
|
||||
FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
|
||||
FileHelper.IMAGES = Resim Dosyalar\u0131
|
||||
|
||||
|
||||
! Diyolog Hakk\u0131nda
|
||||
AboutDialog.lbl.version = Version
|
||||
! The texts below provide additional credits for the translation maintainer
|
||||
! - In AboutDialog.lbl.translation replace "English" with the current
|
||||
language.
|
||||
! - AboutDialog.lbl.translator is the translator / group name (may be empty)
|
||||
! - AboutDialog.lbl.translatorWebsite is a URL to the translator / group
|
||||
(may be empty)
|
||||
! - AboutDialog.lbl.translatorIcon is the file name of an icon under
|
||||
pix/translators/ (may be empty)
|
||||
AboutDialog.lbl.translation = English translation by:Turkish
|
||||
AboutDialog.lbl.translator =Batuhan Dereli
|
||||
AboutDialog.lbl.translatorWebsite =www.batuhandereli.com
|
||||
AboutDialog.lbl.translatorIcon =
|
||||
|
||||
|
||||
! Yaz\u0131c\u0131
|
||||
PrintDialog.title = Yazd\u0131r yada \u00c7\u0131kart
|
||||
PrintDialog.but.previewAndPrint = \u00c7\u0131kt\u0131 \u00d6ncesi Bak & Yaz
|
||||
PrintDialog.checkbox.showByStage = Par\u00e7a G\u00f6ster
|
||||
PrintDialog.lbl.selectElements = \u0130\u00e7eren gruplar\u0131 se\u00e7:
|
||||
printdlg.but.saveaspdf = Kaydet PDF Olarak
|
||||
printdlg.but.preview = \u00d6nceki
|
||||
printdlg.but.settings = Ayarlar
|
||||
PrintDialog.error.preview.title = \u00d6nceki g\u00f6r\u00fcnt\u00fc ula\u015f\u0131lmaz
|
||||
PrintDialog.error.preview.desc1 = Pdf g\u00f6r\u00fcnt\u00fc ula\u015f\u0131lmaz.
|
||||
PrintDialog.error.preview.desc2 = L\u00fctfen kullan "Pdf Olarak Kaydet" i\u00e7eren
|
||||
ayarlardan.
|
||||
|
||||
|
||||
!PrintSettingsDialog
|
||||
PrintSettingsDialog.title = Yaz\u0131c\u0131 Ayarlar\u0131
|
||||
PrintSettingsDialog.lbl.Templatefillcolor = Kal\u0131p Renkli Doldur:
|
||||
PrintSettingsDialog.lbl.Templatebordercolor = Kal\u0131b\u0131 S\u0131n\u0131rl\u0131 Doldur:
|
||||
PrintSettingsDialog.lbl.Papersize = Ka\u011f\u0131t Boyutu:
|
||||
PrintSettingsDialog.lbl.Paperorientation = Ka\u011f\u0131t Hizalama:
|
||||
PrintSettingsDialog.but.Reset = Yeniden Ba\u015flat
|
||||
PrintSettingsDialog.but.Close = Kapat
|
||||
|
||||
|
||||
! Bug Report dialog
|
||||
bugreport.dlg.title = Hata Raporu
|
||||
bugreport.dlg.but.Sendbugreport = Hata Raporu G\u00f6nder
|
||||
bugreport.dlg.but.Sendbugreport.Ttip = Atomatik olarak hata raporu g\u00f6nder OPEN ROCKET
|
||||
geli\u015ftiricilerine.
|
||||
bugreport.dlg.successmsg1 = Hata raporu sorunsuz yolland\u0131.
|
||||
bugreport.dlg.successmsg2 = Te\u015fekk\u00fcrler sizin sayenizde OPENROCKET daha iyi geli\u015ficek!
|
||||
bugreport.dlg.successmsg3 = Hata Raporu G\u00f6nderildi
|
||||
bugreport.dlg.connectedInternet = <html>E\u011fer internet ba\u011flant\u0131n varsa,
|
||||
basit\u00e7e t\u0131klay\u0131p<em>Hata Raporu G\u00f6nder</em>.
|
||||
bugreport.dlg.otherwise = Ba\u015fka \u015fekilde,adrese yollay\u0131n:
|
||||
bugreport.lbl.Theinformation = Genel hata raporlar\u0131hakk\u0131nda bilgi i\u00e7eriyor.Emin de\u011filsen ve
|
||||
hislerinden \u00f6t\u00fcr\u00fc koyuyorsan hata raporunu koyma .
|
||||
bugreport.dlg.failedmsg1 = OpenRocket hata raporunu g\u00f6ndermek i\u00e7in uygun de\u011fil:
|
||||
bugreport.dlg.failedmsg2 = L\u00fctfen manual bir yolla g\u00f6nder
|
||||
bugreport.dlg.failedmsg3 = Hata raporu g\u00f6nderiliyor
|
||||
bugreport.reportDialog.txt = <html><b> OpenRocket i\u00e7erisindeki hatalar\u0131
|
||||
form doldurarak yollayabilirsiniz.</b><br>Hatta hatalar\u0131 dosyalay\u0131p internet sitesi
|
||||
\u00fczerinde proje sayfas\u0131na koyabilirsin.
|
||||
bugreport.reportDialog.txt2 = <html><b>L\u00fctfen belirtiniz tam olarak nas\u0131l bir beklentiniz vard\u0131</b>
|
||||
bugreport.dlg.provideDescription = L\u00fctfen Hatay\u0131 ilk ne zaman rastlad\u0131n\u0131z tam olarak a\u00e7\u0131klay\u0131n\u0131z
|
||||
#
|
||||
# English base translation file
|
||||
#
|
||||
# Should you need to add new logical keys here is the proposed method
|
||||
#
|
||||
# className.ComponentType.componentName
|
||||
#
|
||||
#
|
||||
# Text tokens within braces should not be translated, e.g.
|
||||
# "The file '{filename}' exists."
|
||||
# They are pieces that are inserted dynamically.
|
||||
#
|
||||
|
||||
|
||||
! Set to the name of the current translation file (used for debugging
|
||||
purposes)
|
||||
debug.currentFile = messages.properties
|
||||
|
||||
! RocketActions
|
||||
RocketActions.checkbox.Donotaskmeagain = Yeniden Tekrarlama
|
||||
RocketActions.lbl.Youcanchangedefop = Hatal\u0131 \u00c7al\u0131\u015fmay\u0131 De\u011fi\u015ftirebilirsin
|
||||
in the preferences.
|
||||
RocketActions.showConfirmDialog.lbl1 = Se\u00e7ili sim\u00fclasyonlar\u0131 silmek ister misiniz?
|
||||
RocketActions.showConfirmDialog.lbl2 = <html><i>Bu \u00e7al\u0131\u015fma tamamlanmad\u0131.</i>
|
||||
RocketActions.showConfirmDialog.title = Sim\u00fclasyonlar\u0131 Sil
|
||||
RocketActions.DelCompAct.Delete = Sil
|
||||
RocketActions.DelCompAct.ttip.Delete = Se\u00e7ili par\u00e7ay\u0131 sil.
|
||||
RocketActions.DelSimuAct.Delete = Sil
|
||||
RocketActions.DelSimuAct.ttip.Delete = Se\u00e7ili sim\u00fclasyonu sil.
|
||||
RocketActions.DelAct.Delete = Sil
|
||||
RocketActions.DelAct.ttip.Delete = Se\u00e7ilen par\u00e7ay\u0131 ya da sim\u00fclasyonu sil
|
||||
RocketActions.CutAction.Cut = Kes
|
||||
RocketActions.CutAction.ttip.Cut = Kes bu par\u00e7ay\u0131 yada sim\u00fclasyonun
|
||||
haf\u0131zadan ve kald\u0131r bu tasar\u0131mdan
|
||||
RocketActions.CopyAct.Copy = Kopyala
|
||||
RocketActions.CopyAct.ttip.Copy = Bu par\u00e7ay\u0131 kopyala (ve altpar\u00e7alar\u0131)
|
||||
haf\u0131zaya
|
||||
RocketActions.PasteAct.Paste = Yap\u0131\u015ft\u0131r
|
||||
RocketActions.PasteAct.ttip.Paste = Yap\u0131\u015ft\u0131r par\u00e7ay\u0131 ya da simulasyonu haf\u0131za \u00fczerinden
|
||||
tasar\u0131ma do\u011fru.
|
||||
RocketActions.EditAct.Edit = D\u00fczenle
|
||||
RocketActions.EditAct.ttip.Edit = Se\u00e7ilmi\u015f par\u00e7ay\u0131 d\u00fczenle .
|
||||
RocketActions.NewStageAct.Newstage = Yeni A\u015fama
|
||||
RocketActions.NewStageAct.ttip.Newstage = Yeni bir roket tasar\u0131m\u0131 ekle
|
||||
RocketActions.ActBoosterstage = Yard\u0131mc\u0131/Y\u00fckseltici A\u015fama
|
||||
RocketActions.MoveUpAct.Moveup = Yukar\u0131 \u00c7\u0131kar
|
||||
RocketActions.MoveUpAct.ttip.Moveup = Yukar\u0131ya do\u011fru bu par\u00e7ay\u0131 haraket ettir.
|
||||
RocketActions.MoveDownAct.Movedown = A\u015fa\u011f\u0131ya \u0130ndir
|
||||
RocketActions.MoveDownAct.ttip.Movedown = A\u015fa\u011f\u0131ya do\u011fru bu par\u00e7ay\u0131 haraket
|
||||
ettir.
|
||||
|
||||
! RocketPanel
|
||||
RocketPanel.FigTypeAct.SideView = Yandan G\u00f6r\u00fcn\u00fc\u015f
|
||||
RocketPanel.FigTypeAct.BackView = Arkadan G\u00f6r\u00fcn\u00fc\u015f
|
||||
RocketPanel.FigTypeAct.Figure3D = 3D Resimlendirme
|
||||
RocketPanel.FigTypeAct.Finished = 3D Bitmi\u015f
|
||||
RocketPanel.FigTypeAct.Unfinished = 3D Bitmemi\u015f
|
||||
|
||||
|
||||
RocketPanel.lbl.Flightcfg = U\u00e7u\u015f Bi\u00e7imi/Konumu:
|
||||
RocketPanel.lbl.infoMessage = <html>Click to select Shift+Click
|
||||
to select other Double-click to edit Click+drag to
|
||||
move
|
||||
RocketPanel.lbl.ViewType = G\u00f6r\u00fcn\u00fc\u015f \u015eekli:
|
||||
|
||||
! BasicFrame
|
||||
BasicFrame.tab.Rocketdesign = Roket Tasar\u0131m\u0131
|
||||
BasicFrame.tab.Flightconfig = Motorlar & Bi\u00e7imleri
|
||||
BasicFrame.tab.Flightsim = U\u00e7u\u015f Sim\u00fclasyonlar\u0131
|
||||
BasicFrame.title.Addnewcomp = Yeni par\u00e7a ekle
|
||||
BasicFrame.dlg.lbl1 = Tasar\u0131m '
|
||||
BasicFrame.dlg.lbl2 = ' Kaydedilmemi\u015f.
|
||||
BasicFrame.dlg.lbl3 = Kaydetmek ister misiniz?
|
||||
BasicFrame.dlg.title = Tasar\u0131m Kaydedilmedi
|
||||
BasicFrame.StageName.Sustainer = Devam Et
|
||||
BasicFrame.WarningDialog.txt1 = Problemler a\u00e7\u0131l\u0131rken d\u00fczenleniyor
|
||||
BasicFrame.WarningDialog.txt2 = Baz\u0131 tasar\u0131m par\u00e7alar\u0131 d\u00fczg\u00fcnce
|
||||
y\u00fcklenemedi.
|
||||
BasicFrame.WarningDialog.title = Dosya a\u00e7\u0131l\u0131rken Tehlike
|
||||
|
||||
|
||||
! General error messages used in multiple contexts
|
||||
error.fileExists.title = File exists
|
||||
error.fileExists.desc = File '{filename}' exists. \u00dczerine yazmak ister misiniz?
|
||||
|
||||
error.writing.title = Hata Dosya Yaz\u0131l\u0131rken
|
||||
error.writing.desc = Bir hata dosya yaz\u0131l\u0131rken ortaya \u00e7\u0131kt\u0131:
|
||||
Configuration.lbl.override = Bu durum baz\u0131 u\u00e7u\u015f bi\u00e7imlerinde ge\u00e7ersizdir.
|
||||
|
||||
|
||||
! Labels used in buttons of dialog windows
|
||||
# TODO: Rename these to "btn.xxx"
|
||||
button.ok = Tamam
|
||||
button.cancel = \u00c7\u0131k\u0131\u015f
|
||||
button.close = Kapat
|
||||
|
||||
! Common labels used in buttons of dialog windows
|
||||
dlg.but.ok = Tamam
|
||||
dlg.but.cancel = \u00c7\u0131k\u0131\u015f
|
||||
dlg.but.close = Kapat
|
||||
! General file type names
|
||||
FileHelper.PDF_FILTER = PDF files (*.pdf)
|
||||
FileHelper.ALL_DESIGNS_FILTER = All rocket designs (*.ork; *.rkt)
|
||||
FileHelper.OPENROCKET_DESIGN_FILTER = OpenRocket designs (*.ork)
|
||||
FileHelper.ROCKSIM_DESIGN_FILTER = RockSim designs (*.rkt)
|
||||
FileHelper.OPEN_ROCKET_COMPONENT_FILTER = OpenRocket presets (*.orc)
|
||||
FileHelper.IMAGES = Resim Dosyalar\u0131
|
||||
|
||||
|
||||
! Diyolog Hakk\u0131nda
|
||||
AboutDialog.lbl.version = Version
|
||||
! The texts below provide additional credits for the translation maintainer
|
||||
! - In AboutDialog.lbl.translation replace "English" with the current
|
||||
language.
|
||||
! - AboutDialog.lbl.translator is the translator / group name (may be empty)
|
||||
! - AboutDialog.lbl.translatorWebsite is a URL to the translator / group
|
||||
(may be empty)
|
||||
! - AboutDialog.lbl.translatorIcon is the file name of an icon under
|
||||
pix/translators/ (may be empty)
|
||||
AboutDialog.lbl.translation = English translation by:Turkish
|
||||
AboutDialog.lbl.translator =Batuhan Dereli
|
||||
AboutDialog.lbl.translatorWebsite =www.batuhandereli.com
|
||||
AboutDialog.lbl.translatorIcon =
|
||||
|
||||
|
||||
! Yaz\u0131c\u0131
|
||||
PrintDialog.title = Yazd\u0131r yada \u00c7\u0131kart
|
||||
PrintDialog.but.previewAndPrint = \u00c7\u0131kt\u0131 \u00d6ncesi Bak & Yaz
|
||||
PrintDialog.checkbox.showByStage = Par\u00e7a G\u00f6ster
|
||||
PrintDialog.lbl.selectElements = \u0130\u00e7eren gruplar\u0131 se\u00e7:
|
||||
printdlg.but.saveaspdf = Kaydet PDF Olarak
|
||||
printdlg.but.preview = \u00d6nceki
|
||||
printdlg.but.settings = Ayarlar
|
||||
PrintDialog.error.preview.title = \u00d6nceki g\u00f6r\u00fcnt\u00fc ula\u015f\u0131lmaz
|
||||
PrintDialog.error.preview.desc1 = Pdf g\u00f6r\u00fcnt\u00fc ula\u015f\u0131lmaz.
|
||||
PrintDialog.error.preview.desc2 = L\u00fctfen kullan "Pdf Olarak Kaydet" i\u00e7eren
|
||||
ayarlardan.
|
||||
|
||||
|
||||
!PrintSettingsDialog
|
||||
PrintSettingsDialog.title = Yaz\u0131c\u0131 Ayarlar\u0131
|
||||
PrintSettingsDialog.lbl.Templatefillcolor = Kal\u0131p Renkli Doldur:
|
||||
PrintSettingsDialog.lbl.Templatebordercolor = Kal\u0131b\u0131 S\u0131n\u0131rl\u0131 Doldur:
|
||||
PrintSettingsDialog.lbl.Papersize = Ka\u011f\u0131t Boyutu:
|
||||
PrintSettingsDialog.lbl.Paperorientation = Ka\u011f\u0131t Hizalama:
|
||||
PrintSettingsDialog.but.Reset = Yeniden Ba\u015flat
|
||||
PrintSettingsDialog.but.Close = Kapat
|
||||
|
||||
|
||||
! Bug Report dialog
|
||||
bugreport.dlg.title = Hata Raporu
|
||||
bugreport.dlg.but.Sendbugreport = Hata Raporu G\u00f6nder
|
||||
bugreport.dlg.but.Sendbugreport.Ttip = Atomatik olarak hata raporu g\u00f6nder OPEN ROCKET
|
||||
geli\u015ftiricilerine.
|
||||
bugreport.dlg.successmsg1 = Hata raporu sorunsuz yolland\u0131.
|
||||
bugreport.dlg.successmsg2 = Te\u015fekk\u00fcrler sizin sayenizde OPENROCKET daha iyi geli\u015ficek!
|
||||
bugreport.dlg.successmsg3 = Hata Raporu G\u00f6nderildi
|
||||
bugreport.dlg.connectedInternet = <html>E\u011fer internet ba\u011flant\u0131n varsa,
|
||||
basit\u00e7e t\u0131klay\u0131p<em>Hata Raporu G\u00f6nder</em>.
|
||||
bugreport.dlg.otherwise = Ba\u015fka \u015fekilde,adrese yollay\u0131n:
|
||||
bugreport.lbl.Theinformation = Genel hata raporlar\u0131hakk\u0131nda bilgi i\u00e7eriyor.Emin de\u011filsen ve
|
||||
hislerinden \u00f6t\u00fcr\u00fc koyuyorsan hata raporunu koyma .
|
||||
bugreport.dlg.failedmsg1 = OpenRocket hata raporunu g\u00f6ndermek i\u00e7in uygun de\u011fil:
|
||||
bugreport.dlg.failedmsg2 = L\u00fctfen manual bir yolla g\u00f6nder
|
||||
bugreport.dlg.failedmsg3 = Hata raporu g\u00f6nderiliyor
|
||||
bugreport.reportDialog.txt = <html><b> OpenRocket i\u00e7erisindeki hatalar\u0131
|
||||
form doldurarak yollayabilirsiniz.</b><br>Hatta hatalar\u0131 dosyalay\u0131p internet sitesi
|
||||
\u00fczerinde proje sayfas\u0131na koyabilirsin.
|
||||
bugreport.reportDialog.txt2 = <html><b>L\u00fctfen belirtiniz tam olarak nas\u0131l bir beklentiniz vard\u0131</b>
|
||||
bugreport.dlg.provideDescription = L\u00fctfen Hatay\u0131 ilk ne zaman rastlad\u0131n\u0131z tam olarak a\u00e7\u0131klay\u0131n\u0131z
|
||||
bugreport.dlg.provideDescription.title = Hata tan\u0131m\u0131 kayboluyor
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
@ -1,3 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: startup.net.sf.openrocket.SwingStartup
|
||||
Main-Class: net.sf.openrocket.startup.SwingStartup
|
||||
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
package net.sf.openrocket.database.motor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.openrocket.motor.Motor;
|
||||
|
||||
public interface MotorDatabase {
|
||||
|
||||
/**
|
||||
* Return all motors in the database matching a search criteria. Any search criteria that
|
||||
* is null or NaN is ignored.
|
||||
*
|
||||
* @param type the motor type, or null.
|
||||
* @param manufacturer the manufacturer, or null.
|
||||
* @param designation the designation, or null.
|
||||
* @param diameter the diameter, or NaN.
|
||||
* @param length the length, or NaN.
|
||||
* @return a list of all the matching motors.
|
||||
*/
|
||||
public List<? extends Motor> findMotors(String digest, Motor.Type type,
|
||||
String manufacturer, String designation, double diameter,
|
||||
double length);
|
||||
}
|
||||
package net.sf.openrocket.database.motor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.openrocket.motor.Motor;
|
||||
|
||||
public interface MotorDatabase {
|
||||
|
||||
/**
|
||||
* Return all motors in the database matching a search criteria. Any search criteria that
|
||||
* is null or NaN is ignored.
|
||||
*
|
||||
* @param type the motor type, or null.
|
||||
* @param manufacturer the manufacturer, or null.
|
||||
* @param designation the designation, or null.
|
||||
* @param diameter the diameter, or NaN.
|
||||
* @param length the length, or NaN.
|
||||
* @return a list of all the matching motors.
|
||||
*/
|
||||
public List<? extends Motor> findMotors(String digest, Motor.Type type,
|
||||
String manufacturer, String designation, double diameter,
|
||||
double length);
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package net.sf.openrocket.document;
|
||||
|
||||
import java.util.EventListener;
|
||||
|
||||
public interface UndoRedoListener extends EventListener {
|
||||
|
||||
public void setAllValues();
|
||||
}
|
||||
package net.sf.openrocket.document;
|
||||
|
||||
import java.util.EventListener;
|
||||
|
||||
public interface UndoRedoListener extends EventListener {
|
||||
|
||||
public void setAllValues();
|
||||
}
|
||||
|
||||
@ -1,176 +1,176 @@
|
||||
package net.sf.openrocket.models.wind;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
import net.sf.openrocket.util.PinkNoise;
|
||||
|
||||
/**
|
||||
* A wind simulator that generates wind speed as pink noise from a specified average wind speed
|
||||
* and standard deviance. Currently the wind is always directed in the direction of the negative
|
||||
* X-axis. The simulated wind is unaffected by the altitude.
|
||||
*
|
||||
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
||||
*/
|
||||
public class PinkNoiseWindModel implements WindModel {
|
||||
|
||||
/** Random value with which to XOR the random seed value */
|
||||
private static final int SEED_RANDOMIZATION = 0x7343AA03;
|
||||
|
||||
|
||||
|
||||
/** Pink noise alpha parameter. */
|
||||
private static final double ALPHA = 5.0 / 3.0;
|
||||
|
||||
/** Number of poles to use in the pink noise IIR filter. */
|
||||
private static final int POLES = 2;
|
||||
|
||||
/** The standard deviation of the generated pink noise with the specified number of poles. */
|
||||
private static final double STDDEV = 2.252;
|
||||
|
||||
/** Time difference between random samples. */
|
||||
private static final double DELTA_T = 0.05;
|
||||
|
||||
|
||||
private double average = 0;
|
||||
private double direction = Math.PI / 2; // this is an East wind
|
||||
private double standardDeviation = 0;
|
||||
|
||||
private final int seed;
|
||||
|
||||
private PinkNoise randomSource = null;
|
||||
private double time1;
|
||||
private double value1, value2;
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new wind simulation with a specific seed value.
|
||||
* @param seed the seed value.
|
||||
*/
|
||||
public PinkNoiseWindModel(int seed) {
|
||||
this.seed = seed ^ SEED_RANDOMIZATION;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Return the average wind speed.
|
||||
*
|
||||
* @return the average wind speed.
|
||||
*/
|
||||
public double getAverage() {
|
||||
return average;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the average wind speed. This method will also modify the
|
||||
* standard deviation such that the turbulence intensity remains constant.
|
||||
*
|
||||
* @param average the average wind speed to set
|
||||
*/
|
||||
public void setAverage(double average) {
|
||||
double intensity = getTurbulenceIntensity();
|
||||
this.average = Math.max(average, 0);
|
||||
setTurbulenceIntensity(intensity);
|
||||
}
|
||||
|
||||
public void setDirection(double direction) {
|
||||
this.direction = direction;
|
||||
}
|
||||
|
||||
public double getDirection() {
|
||||
return this.direction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the standard deviation from the average wind speed.
|
||||
*
|
||||
* @return the standard deviation of the wind speed
|
||||
*/
|
||||
public double getStandardDeviation() {
|
||||
return standardDeviation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the standard deviation of the average wind speed.
|
||||
*
|
||||
* @param standardDeviation the standardDeviation to set
|
||||
*/
|
||||
public void setStandardDeviation(double standardDeviation) {
|
||||
this.standardDeviation = Math.max(standardDeviation, 0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the turbulence intensity (standard deviation / average).
|
||||
*
|
||||
* @return the turbulence intensity
|
||||
*/
|
||||
public double getTurbulenceIntensity() {
|
||||
if (MathUtil.equals(average, 0)) {
|
||||
if (MathUtil.equals(standardDeviation, 0))
|
||||
return 0;
|
||||
else
|
||||
return 1000;
|
||||
}
|
||||
return standardDeviation / average;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the standard deviation to match the turbulence intensity.
|
||||
*
|
||||
* @param intensity the turbulence intensity
|
||||
*/
|
||||
public void setTurbulenceIntensity(double intensity) {
|
||||
setStandardDeviation(intensity * average);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Coordinate getWindVelocity(double time, double altitude) {
|
||||
if (time < 0) {
|
||||
throw new IllegalArgumentException("Requesting wind speed at t=" + time);
|
||||
}
|
||||
|
||||
if (randomSource == null) {
|
||||
randomSource = new PinkNoise(ALPHA, POLES, new Random(seed));
|
||||
time1 = 0;
|
||||
value1 = randomSource.nextValue();
|
||||
value2 = randomSource.nextValue();
|
||||
}
|
||||
|
||||
if (time < time1) {
|
||||
reset();
|
||||
return getWindVelocity(time, altitude);
|
||||
}
|
||||
|
||||
while (time1 + DELTA_T < time) {
|
||||
value1 = value2;
|
||||
value2 = randomSource.nextValue();
|
||||
time1 += DELTA_T;
|
||||
}
|
||||
|
||||
double a = (time - time1) / DELTA_T;
|
||||
|
||||
double speed = average + (value1 * (1 - a) + value2 * a) * standardDeviation / STDDEV;
|
||||
return new Coordinate(speed * Math.sin(direction), speed * Math.cos(direction), 0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void reset() {
|
||||
randomSource = null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public int getModID() {
|
||||
return (int) (average * 1000 + standardDeviation);
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.models.wind;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
import net.sf.openrocket.util.PinkNoise;
|
||||
|
||||
/**
|
||||
* A wind simulator that generates wind speed as pink noise from a specified average wind speed
|
||||
* and standard deviance. Currently the wind is always directed in the direction of the negative
|
||||
* X-axis. The simulated wind is unaffected by the altitude.
|
||||
*
|
||||
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
||||
*/
|
||||
public class PinkNoiseWindModel implements WindModel {
|
||||
|
||||
/** Random value with which to XOR the random seed value */
|
||||
private static final int SEED_RANDOMIZATION = 0x7343AA03;
|
||||
|
||||
|
||||
|
||||
/** Pink noise alpha parameter. */
|
||||
private static final double ALPHA = 5.0 / 3.0;
|
||||
|
||||
/** Number of poles to use in the pink noise IIR filter. */
|
||||
private static final int POLES = 2;
|
||||
|
||||
/** The standard deviation of the generated pink noise with the specified number of poles. */
|
||||
private static final double STDDEV = 2.252;
|
||||
|
||||
/** Time difference between random samples. */
|
||||
private static final double DELTA_T = 0.05;
|
||||
|
||||
|
||||
private double average = 0;
|
||||
private double direction = Math.PI / 2; // this is an East wind
|
||||
private double standardDeviation = 0;
|
||||
|
||||
private final int seed;
|
||||
|
||||
private PinkNoise randomSource = null;
|
||||
private double time1;
|
||||
private double value1, value2;
|
||||
|
||||
|
||||
/**
|
||||
* Construct a new wind simulation with a specific seed value.
|
||||
* @param seed the seed value.
|
||||
*/
|
||||
public PinkNoiseWindModel(int seed) {
|
||||
this.seed = seed ^ SEED_RANDOMIZATION;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Return the average wind speed.
|
||||
*
|
||||
* @return the average wind speed.
|
||||
*/
|
||||
public double getAverage() {
|
||||
return average;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the average wind speed. This method will also modify the
|
||||
* standard deviation such that the turbulence intensity remains constant.
|
||||
*
|
||||
* @param average the average wind speed to set
|
||||
*/
|
||||
public void setAverage(double average) {
|
||||
double intensity = getTurbulenceIntensity();
|
||||
this.average = Math.max(average, 0);
|
||||
setTurbulenceIntensity(intensity);
|
||||
}
|
||||
|
||||
public void setDirection(double direction) {
|
||||
this.direction = direction;
|
||||
}
|
||||
|
||||
public double getDirection() {
|
||||
return this.direction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the standard deviation from the average wind speed.
|
||||
*
|
||||
* @return the standard deviation of the wind speed
|
||||
*/
|
||||
public double getStandardDeviation() {
|
||||
return standardDeviation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the standard deviation of the average wind speed.
|
||||
*
|
||||
* @param standardDeviation the standardDeviation to set
|
||||
*/
|
||||
public void setStandardDeviation(double standardDeviation) {
|
||||
this.standardDeviation = Math.max(standardDeviation, 0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the turbulence intensity (standard deviation / average).
|
||||
*
|
||||
* @return the turbulence intensity
|
||||
*/
|
||||
public double getTurbulenceIntensity() {
|
||||
if (MathUtil.equals(average, 0)) {
|
||||
if (MathUtil.equals(standardDeviation, 0))
|
||||
return 0;
|
||||
else
|
||||
return 1000;
|
||||
}
|
||||
return standardDeviation / average;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the standard deviation to match the turbulence intensity.
|
||||
*
|
||||
* @param intensity the turbulence intensity
|
||||
*/
|
||||
public void setTurbulenceIntensity(double intensity) {
|
||||
setStandardDeviation(intensity * average);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Coordinate getWindVelocity(double time, double altitude) {
|
||||
if (time < 0) {
|
||||
throw new IllegalArgumentException("Requesting wind speed at t=" + time);
|
||||
}
|
||||
|
||||
if (randomSource == null) {
|
||||
randomSource = new PinkNoise(ALPHA, POLES, new Random(seed));
|
||||
time1 = 0;
|
||||
value1 = randomSource.nextValue();
|
||||
value2 = randomSource.nextValue();
|
||||
}
|
||||
|
||||
if (time < time1) {
|
||||
reset();
|
||||
return getWindVelocity(time, altitude);
|
||||
}
|
||||
|
||||
while (time1 + DELTA_T < time) {
|
||||
value1 = value2;
|
||||
value2 = randomSource.nextValue();
|
||||
time1 += DELTA_T;
|
||||
}
|
||||
|
||||
double a = (time - time1) / DELTA_T;
|
||||
|
||||
double speed = average + (value1 * (1 - a) + value2 * a) * standardDeviation / STDDEV;
|
||||
return new Coordinate(speed * Math.sin(direction), speed * Math.cos(direction), 0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void reset() {
|
||||
randomSource = null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public int getModID() {
|
||||
return (int) (average * 1000 + standardDeviation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,26 +1,26 @@
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
|
||||
public abstract class RocketUtils {
|
||||
|
||||
public static double getLength(Rocket rocket) {
|
||||
double length = 0;
|
||||
Collection<Coordinate> bounds = rocket.getSelectedConfiguration().getBounds();
|
||||
if (!bounds.isEmpty()) {
|
||||
double minX = Double.POSITIVE_INFINITY, maxX = Double.NEGATIVE_INFINITY;
|
||||
for (Coordinate c : bounds) {
|
||||
if (c.x < minX)
|
||||
minX = c.x;
|
||||
if (c.x > maxX)
|
||||
maxX = c.x;
|
||||
}
|
||||
length = maxX - minX;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
|
||||
public abstract class RocketUtils {
|
||||
|
||||
public static double getLength(Rocket rocket) {
|
||||
double length = 0;
|
||||
Collection<Coordinate> bounds = rocket.getSelectedConfiguration().getBounds();
|
||||
if (!bounds.isEmpty()) {
|
||||
double minX = Double.POSITIVE_INFINITY, maxX = Double.NEGATIVE_INFINITY;
|
||||
for (Coordinate c : bounds) {
|
||||
if (c.x < minX)
|
||||
minX = c.x;
|
||||
if (c.x > maxX)
|
||||
maxX = c.x;
|
||||
}
|
||||
length = maxX - minX;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,77 +1,77 @@
|
||||
package net.sf.openrocket.simulation;
|
||||
|
||||
|
||||
import net.sf.openrocket.startup.Preferences;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
|
||||
public class DefaultSimulationOptionFactory {
|
||||
|
||||
@Inject
|
||||
private final Preferences prefs;
|
||||
|
||||
public static final String SIMCONDITION_WIND_SPEED = "SimConditionWindSpeed";
|
||||
public static final String SIMCONDITION_WIND_STDDEV = "SimConditionWindStdDev";
|
||||
public static final String SIMCONDITION_WIND_TURB = "SimConditionWindTurb";
|
||||
public static final String SIMCONDITION_SITE_LAT = "SimConditionSiteLat";
|
||||
public static final String SIMCONDITION_SITE_LON = "SimConditionSiteLon";
|
||||
public static final String SIMCONDITION_SITE_ALT = "SimConditionSiteAlt";
|
||||
public static final String SIMCONDITION_ATMOS_STD = "SimConditionsAtmosStd";
|
||||
public static final String SIMCONDITION_ATMOS_TEMP = "SimConditionsAtmosTemp";
|
||||
public static final String SIMCONDITION_ATMOS_PRESSURE = "SimConditionsAtmosPres";
|
||||
public static final String SIMCONDITION_ROD_INTO_WIND = "SimConditionsRodIntoWind";
|
||||
public static final String SIMCONDITION_ROD_LENGTH = "SimConditionsRodLength";
|
||||
public static final String SIMCONDITION_ROD_ANGLE = "SimConditionsRodAngle";
|
||||
public static final String SIMCONDITION_ROD_DIRECTION = "SimConditionsRodDirection";
|
||||
|
||||
public DefaultSimulationOptionFactory(Preferences prefs) {
|
||||
this.prefs = prefs;
|
||||
}
|
||||
|
||||
public DefaultSimulationOptionFactory() {
|
||||
prefs = null;
|
||||
}
|
||||
|
||||
public SimulationOptions getDefault() {
|
||||
SimulationOptions defaults = new SimulationOptions();
|
||||
if (prefs != null) {
|
||||
|
||||
defaults.setWindSpeedAverage(prefs.getDouble(SIMCONDITION_WIND_SPEED, defaults.getWindSpeedAverage()));
|
||||
defaults.setWindSpeedDeviation(prefs.getDouble(SIMCONDITION_WIND_STDDEV, defaults.getWindSpeedDeviation()));
|
||||
defaults.setWindTurbulenceIntensity(prefs.getDouble(SIMCONDITION_WIND_TURB, defaults.getWindTurbulenceIntensity()));
|
||||
|
||||
defaults.setLaunchLatitude(prefs.getDouble(SIMCONDITION_SITE_LAT, defaults.getLaunchLatitude()));
|
||||
defaults.setLaunchLongitude(prefs.getDouble(SIMCONDITION_SITE_LON, defaults.getLaunchLongitude()));
|
||||
defaults.setLaunchAltitude(prefs.getDouble(SIMCONDITION_SITE_ALT, defaults.getLaunchAltitude()));
|
||||
|
||||
defaults.setISAAtmosphere(prefs.getBoolean(SIMCONDITION_ATMOS_STD, defaults.isISAAtmosphere()));
|
||||
defaults.setLaunchTemperature(prefs.getDouble(SIMCONDITION_ATMOS_TEMP, defaults.getLaunchTemperature()));
|
||||
defaults.setLaunchPressure(prefs.getDouble(SIMCONDITION_ATMOS_PRESSURE, defaults.getLaunchTemperature()));
|
||||
|
||||
defaults.setLaunchIntoWind(prefs.getBoolean(SIMCONDITION_ROD_INTO_WIND, defaults.getLaunchIntoWind()));
|
||||
defaults.setLaunchRodLength(prefs.getDouble(SIMCONDITION_ROD_LENGTH, defaults.getLaunchRodLength()));
|
||||
defaults.setLaunchRodAngle(prefs.getDouble(SIMCONDITION_ROD_ANGLE, defaults.getLaunchRodAngle()));
|
||||
defaults.setLaunchRodDirection(prefs.getDouble(SIMCONDITION_ROD_DIRECTION, defaults.getLaunchRodDirection()));
|
||||
}
|
||||
return defaults;
|
||||
}
|
||||
|
||||
public void saveDefault(SimulationOptions newDefaults) {
|
||||
|
||||
prefs.putDouble(SIMCONDITION_WIND_SPEED, newDefaults.getWindSpeedAverage());
|
||||
prefs.putDouble(SIMCONDITION_WIND_STDDEV, newDefaults.getWindSpeedDeviation());
|
||||
prefs.putDouble(SIMCONDITION_WIND_TURB, newDefaults.getWindTurbulenceIntensity());
|
||||
|
||||
prefs.putDouble(SIMCONDITION_SITE_LAT, newDefaults.getLaunchLatitude());
|
||||
prefs.putDouble(SIMCONDITION_SITE_LON, newDefaults.getLaunchLongitude());
|
||||
prefs.putDouble(SIMCONDITION_SITE_ALT, newDefaults.getLaunchAltitude());
|
||||
prefs.putBoolean(SIMCONDITION_ATMOS_STD, newDefaults.isISAAtmosphere());
|
||||
prefs.putDouble(SIMCONDITION_ATMOS_TEMP, newDefaults.getLaunchTemperature());
|
||||
prefs.putDouble(SIMCONDITION_ATMOS_PRESSURE, newDefaults.getLaunchPressure());
|
||||
|
||||
prefs.putBoolean(SIMCONDITION_ROD_INTO_WIND, newDefaults.getLaunchIntoWind());
|
||||
prefs.putDouble(SIMCONDITION_ROD_LENGTH, newDefaults.getLaunchRodLength());
|
||||
prefs.putDouble(SIMCONDITION_ROD_ANGLE, newDefaults.getLaunchRodAngle());
|
||||
prefs.putDouble(SIMCONDITION_ROD_DIRECTION, newDefaults.getLaunchRodDirection());
|
||||
}
|
||||
}
|
||||
package net.sf.openrocket.simulation;
|
||||
|
||||
|
||||
import net.sf.openrocket.startup.Preferences;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
|
||||
public class DefaultSimulationOptionFactory {
|
||||
|
||||
@Inject
|
||||
private final Preferences prefs;
|
||||
|
||||
public static final String SIMCONDITION_WIND_SPEED = "SimConditionWindSpeed";
|
||||
public static final String SIMCONDITION_WIND_STDDEV = "SimConditionWindStdDev";
|
||||
public static final String SIMCONDITION_WIND_TURB = "SimConditionWindTurb";
|
||||
public static final String SIMCONDITION_SITE_LAT = "SimConditionSiteLat";
|
||||
public static final String SIMCONDITION_SITE_LON = "SimConditionSiteLon";
|
||||
public static final String SIMCONDITION_SITE_ALT = "SimConditionSiteAlt";
|
||||
public static final String SIMCONDITION_ATMOS_STD = "SimConditionsAtmosStd";
|
||||
public static final String SIMCONDITION_ATMOS_TEMP = "SimConditionsAtmosTemp";
|
||||
public static final String SIMCONDITION_ATMOS_PRESSURE = "SimConditionsAtmosPres";
|
||||
public static final String SIMCONDITION_ROD_INTO_WIND = "SimConditionsRodIntoWind";
|
||||
public static final String SIMCONDITION_ROD_LENGTH = "SimConditionsRodLength";
|
||||
public static final String SIMCONDITION_ROD_ANGLE = "SimConditionsRodAngle";
|
||||
public static final String SIMCONDITION_ROD_DIRECTION = "SimConditionsRodDirection";
|
||||
|
||||
public DefaultSimulationOptionFactory(Preferences prefs) {
|
||||
this.prefs = prefs;
|
||||
}
|
||||
|
||||
public DefaultSimulationOptionFactory() {
|
||||
prefs = null;
|
||||
}
|
||||
|
||||
public SimulationOptions getDefault() {
|
||||
SimulationOptions defaults = new SimulationOptions();
|
||||
if (prefs != null) {
|
||||
|
||||
defaults.setWindSpeedAverage(prefs.getDouble(SIMCONDITION_WIND_SPEED, defaults.getWindSpeedAverage()));
|
||||
defaults.setWindSpeedDeviation(prefs.getDouble(SIMCONDITION_WIND_STDDEV, defaults.getWindSpeedDeviation()));
|
||||
defaults.setWindTurbulenceIntensity(prefs.getDouble(SIMCONDITION_WIND_TURB, defaults.getWindTurbulenceIntensity()));
|
||||
|
||||
defaults.setLaunchLatitude(prefs.getDouble(SIMCONDITION_SITE_LAT, defaults.getLaunchLatitude()));
|
||||
defaults.setLaunchLongitude(prefs.getDouble(SIMCONDITION_SITE_LON, defaults.getLaunchLongitude()));
|
||||
defaults.setLaunchAltitude(prefs.getDouble(SIMCONDITION_SITE_ALT, defaults.getLaunchAltitude()));
|
||||
|
||||
defaults.setISAAtmosphere(prefs.getBoolean(SIMCONDITION_ATMOS_STD, defaults.isISAAtmosphere()));
|
||||
defaults.setLaunchTemperature(prefs.getDouble(SIMCONDITION_ATMOS_TEMP, defaults.getLaunchTemperature()));
|
||||
defaults.setLaunchPressure(prefs.getDouble(SIMCONDITION_ATMOS_PRESSURE, defaults.getLaunchTemperature()));
|
||||
|
||||
defaults.setLaunchIntoWind(prefs.getBoolean(SIMCONDITION_ROD_INTO_WIND, defaults.getLaunchIntoWind()));
|
||||
defaults.setLaunchRodLength(prefs.getDouble(SIMCONDITION_ROD_LENGTH, defaults.getLaunchRodLength()));
|
||||
defaults.setLaunchRodAngle(prefs.getDouble(SIMCONDITION_ROD_ANGLE, defaults.getLaunchRodAngle()));
|
||||
defaults.setLaunchRodDirection(prefs.getDouble(SIMCONDITION_ROD_DIRECTION, defaults.getLaunchRodDirection()));
|
||||
}
|
||||
return defaults;
|
||||
}
|
||||
|
||||
public void saveDefault(SimulationOptions newDefaults) {
|
||||
|
||||
prefs.putDouble(SIMCONDITION_WIND_SPEED, newDefaults.getWindSpeedAverage());
|
||||
prefs.putDouble(SIMCONDITION_WIND_STDDEV, newDefaults.getWindSpeedDeviation());
|
||||
prefs.putDouble(SIMCONDITION_WIND_TURB, newDefaults.getWindTurbulenceIntensity());
|
||||
|
||||
prefs.putDouble(SIMCONDITION_SITE_LAT, newDefaults.getLaunchLatitude());
|
||||
prefs.putDouble(SIMCONDITION_SITE_LON, newDefaults.getLaunchLongitude());
|
||||
prefs.putDouble(SIMCONDITION_SITE_ALT, newDefaults.getLaunchAltitude());
|
||||
prefs.putBoolean(SIMCONDITION_ATMOS_STD, newDefaults.isISAAtmosphere());
|
||||
prefs.putDouble(SIMCONDITION_ATMOS_TEMP, newDefaults.getLaunchTemperature());
|
||||
prefs.putDouble(SIMCONDITION_ATMOS_PRESSURE, newDefaults.getLaunchPressure());
|
||||
|
||||
prefs.putBoolean(SIMCONDITION_ROD_INTO_WIND, newDefaults.getLaunchIntoWind());
|
||||
prefs.putDouble(SIMCONDITION_ROD_LENGTH, newDefaults.getLaunchRodLength());
|
||||
prefs.putDouble(SIMCONDITION_ROD_ANGLE, newDefaults.getLaunchRodAngle());
|
||||
prefs.putDouble(SIMCONDITION_ROD_DIRECTION, newDefaults.getLaunchRodDirection());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
package net.sf.openrocket.startup;
|
||||
|
||||
public interface ExceptionHandler {
|
||||
|
||||
public void handleErrorCondition(String message);
|
||||
public void handleErrorCondition(String message, Throwable exception);
|
||||
public void handleErrorCondition(final Throwable exception);
|
||||
|
||||
|
||||
public void uncaughtException(final Thread thread, final Throwable throwable);
|
||||
|
||||
}
|
||||
package net.sf.openrocket.startup;
|
||||
|
||||
public interface ExceptionHandler {
|
||||
|
||||
public void handleErrorCondition(String message);
|
||||
public void handleErrorCondition(String message, Throwable exception);
|
||||
public void handleErrorCondition(final Throwable exception);
|
||||
|
||||
|
||||
public void uncaughtException(final Thread thread, final Throwable throwable);
|
||||
|
||||
}
|
||||
|
||||
@ -1,122 +1,122 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
|
||||
public abstract class Base64Decoder {
|
||||
|
||||
private static final String BASE64_CHARS =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
private static final char PAD_CHAR = '=';
|
||||
|
||||
private final static short[] _charToBits = new short[128];
|
||||
|
||||
static {
|
||||
|
||||
for (int i = 0; i < _charToBits.length; i++)
|
||||
_charToBits[i] = -1;
|
||||
|
||||
for (int i = 0; i < BASE64_CHARS.length(); i++)
|
||||
_charToBits[BASE64_CHARS.charAt(i)] = (byte) i;
|
||||
_charToBits[PAD_CHAR] = 0;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode the specified Base64 string and write binary data
|
||||
* to the given stream.
|
||||
* @param str Base64 encoded string
|
||||
* @param w output stream
|
||||
*/
|
||||
public static String decodeData(String str) throws IOException
|
||||
{
|
||||
StringReader r;
|
||||
int c1;
|
||||
|
||||
if (str == null || str.length() < 1)
|
||||
return null;
|
||||
|
||||
r = new StringReader(str);
|
||||
|
||||
StringWriter w = new StringWriter();
|
||||
|
||||
// spin through the input string
|
||||
c1 = readToNonSpace(r);
|
||||
while (c1 > 0)
|
||||
{
|
||||
int c2, c3, c4;
|
||||
int p1, p2, p3, p4;
|
||||
int pad, n;
|
||||
|
||||
pad = 0;
|
||||
|
||||
c2 = readToNonSpace(r);
|
||||
c3 = readToNonSpace(r);
|
||||
c4 = readToNonSpace(r);
|
||||
if (c4 < 0)
|
||||
throw new IllegalArgumentException("Encoded string ends prematurely.");
|
||||
|
||||
p1 = charToBits(c1);
|
||||
p2 = charToBits(c2);
|
||||
|
||||
if (c3 == PAD_CHAR)
|
||||
{
|
||||
p3 = 0;
|
||||
pad++;
|
||||
}
|
||||
else
|
||||
p3 = charToBits(c3);
|
||||
|
||||
if (c4 == PAD_CHAR)
|
||||
{
|
||||
p4 = 0;
|
||||
pad++;
|
||||
}
|
||||
else
|
||||
p4 = charToBits(c4);
|
||||
|
||||
if (p1 < 0 || p2 < 0 || p3 < 0 || p4 < 0)
|
||||
throw new IllegalArgumentException("Encoded string contains invalid characters.");
|
||||
|
||||
n = (p1 << 18) | (p2 << 12) | (p3 << 6) | p4;
|
||||
|
||||
w.write((byte) ((n & 0xFF0000) >> 16));
|
||||
if (pad < 2)
|
||||
w.write((byte) ((n & 0x00FF00) >> 8));
|
||||
if (pad < 1)
|
||||
w.write((byte) (n & 0x0000FF));
|
||||
|
||||
c1 = readToNonSpace(r);
|
||||
if (c1 > 0 && pad > 0)
|
||||
throw new IllegalArgumentException("Extra characters found after padding.");
|
||||
}
|
||||
|
||||
return w.toString();
|
||||
}
|
||||
|
||||
|
||||
private static int readToNonSpace(Reader r)
|
||||
throws IOException
|
||||
{
|
||||
int c;
|
||||
|
||||
c = r.read();
|
||||
while (c >= 0 && Character.isWhitespace(c))
|
||||
c = r.read();
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
private static int charToBits(int c)
|
||||
{
|
||||
// use it to look up the value
|
||||
if (c < 0 || c >= _charToBits.length)
|
||||
return -1;
|
||||
else
|
||||
return _charToBits[c];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
|
||||
public abstract class Base64Decoder {
|
||||
|
||||
private static final String BASE64_CHARS =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
private static final char PAD_CHAR = '=';
|
||||
|
||||
private final static short[] _charToBits = new short[128];
|
||||
|
||||
static {
|
||||
|
||||
for (int i = 0; i < _charToBits.length; i++)
|
||||
_charToBits[i] = -1;
|
||||
|
||||
for (int i = 0; i < BASE64_CHARS.length(); i++)
|
||||
_charToBits[BASE64_CHARS.charAt(i)] = (byte) i;
|
||||
_charToBits[PAD_CHAR] = 0;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode the specified Base64 string and write binary data
|
||||
* to the given stream.
|
||||
* @param str Base64 encoded string
|
||||
* @param w output stream
|
||||
*/
|
||||
public static String decodeData(String str) throws IOException
|
||||
{
|
||||
StringReader r;
|
||||
int c1;
|
||||
|
||||
if (str == null || str.length() < 1)
|
||||
return null;
|
||||
|
||||
r = new StringReader(str);
|
||||
|
||||
StringWriter w = new StringWriter();
|
||||
|
||||
// spin through the input string
|
||||
c1 = readToNonSpace(r);
|
||||
while (c1 > 0)
|
||||
{
|
||||
int c2, c3, c4;
|
||||
int p1, p2, p3, p4;
|
||||
int pad, n;
|
||||
|
||||
pad = 0;
|
||||
|
||||
c2 = readToNonSpace(r);
|
||||
c3 = readToNonSpace(r);
|
||||
c4 = readToNonSpace(r);
|
||||
if (c4 < 0)
|
||||
throw new IllegalArgumentException("Encoded string ends prematurely.");
|
||||
|
||||
p1 = charToBits(c1);
|
||||
p2 = charToBits(c2);
|
||||
|
||||
if (c3 == PAD_CHAR)
|
||||
{
|
||||
p3 = 0;
|
||||
pad++;
|
||||
}
|
||||
else
|
||||
p3 = charToBits(c3);
|
||||
|
||||
if (c4 == PAD_CHAR)
|
||||
{
|
||||
p4 = 0;
|
||||
pad++;
|
||||
}
|
||||
else
|
||||
p4 = charToBits(c4);
|
||||
|
||||
if (p1 < 0 || p2 < 0 || p3 < 0 || p4 < 0)
|
||||
throw new IllegalArgumentException("Encoded string contains invalid characters.");
|
||||
|
||||
n = (p1 << 18) | (p2 << 12) | (p3 << 6) | p4;
|
||||
|
||||
w.write((byte) ((n & 0xFF0000) >> 16));
|
||||
if (pad < 2)
|
||||
w.write((byte) ((n & 0x00FF00) >> 8));
|
||||
if (pad < 1)
|
||||
w.write((byte) (n & 0x0000FF));
|
||||
|
||||
c1 = readToNonSpace(r);
|
||||
if (c1 > 0 && pad > 0)
|
||||
throw new IllegalArgumentException("Extra characters found after padding.");
|
||||
}
|
||||
|
||||
return w.toString();
|
||||
}
|
||||
|
||||
|
||||
private static int readToNonSpace(Reader r)
|
||||
throws IOException
|
||||
{
|
||||
int c;
|
||||
|
||||
c = r.read();
|
||||
while (c >= 0 && Character.isWhitespace(c))
|
||||
c = r.read();
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
private static int charToBits(int c)
|
||||
{
|
||||
// use it to look up the value
|
||||
if (c < 0 || c >= _charToBits.length)
|
||||
return -1;
|
||||
else
|
||||
return _charToBits[c];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,43 +1,43 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
class DownloadRequest {
|
||||
|
||||
private final ArrayList<Integer> motorIds = new ArrayList<Integer>();
|
||||
|
||||
private String format = null;
|
||||
|
||||
public void add(Integer motorId) {
|
||||
this.motorIds.add(motorId);
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder w = new StringBuilder();
|
||||
|
||||
w.append("<?xml version=\"1.0\" encoding=\"ascii\"?>\n");
|
||||
w.append("<download-request\n");
|
||||
w.append(" xmlns=\"http://www.thrustcurve.org/2008/DownloadRequest\"\n");
|
||||
w.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
|
||||
w.append(" xsi:schemaLocation=\"http://www.thrustcurve.org/2008/DownloadRequest http://www.thrustcurve.org/2008/download-request.xsd\">\n");
|
||||
|
||||
if (format != null) {
|
||||
w.append(" <format>").append(format).append("</format>\n");
|
||||
}
|
||||
|
||||
w.append(" <motor-ids>\n");
|
||||
for (Integer i : motorIds) {
|
||||
w.append(" <id>").append(i).append("</id>\n");
|
||||
}
|
||||
w.append(" </motor-ids>\n");
|
||||
w.append("</download-request>\n");
|
||||
return w.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
class DownloadRequest {
|
||||
|
||||
private final ArrayList<Integer> motorIds = new ArrayList<Integer>();
|
||||
|
||||
private String format = null;
|
||||
|
||||
public void add(Integer motorId) {
|
||||
this.motorIds.add(motorId);
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder w = new StringBuilder();
|
||||
|
||||
w.append("<?xml version=\"1.0\" encoding=\"ascii\"?>\n");
|
||||
w.append("<download-request\n");
|
||||
w.append(" xmlns=\"http://www.thrustcurve.org/2008/DownloadRequest\"\n");
|
||||
w.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
|
||||
w.append(" xsi:schemaLocation=\"http://www.thrustcurve.org/2008/DownloadRequest http://www.thrustcurve.org/2008/download-request.xsd\">\n");
|
||||
|
||||
if (format != null) {
|
||||
w.append(" <format>").append(format).append("</format>\n");
|
||||
}
|
||||
|
||||
w.append(" <motor-ids>\n");
|
||||
for (Integer i : motorIds) {
|
||||
w.append(" <id>").append(i).append("</id>\n");
|
||||
}
|
||||
w.append(" </motor-ids>\n");
|
||||
w.append("</download-request>\n");
|
||||
return w.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,41 +1,41 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class DownloadResponse {
|
||||
|
||||
private final Map<Integer,List<MotorBurnFile>> data = new HashMap<Integer,List<MotorBurnFile>>();
|
||||
|
||||
private String error = null;
|
||||
|
||||
public void add( MotorBurnFile mbd ) {
|
||||
List<MotorBurnFile> currentData = data.get(mbd.getMotorId());
|
||||
if ( currentData == null ) {
|
||||
currentData = new ArrayList<MotorBurnFile>();
|
||||
data.put(mbd.getMotorId(), currentData);
|
||||
}
|
||||
currentData.add(mbd);
|
||||
}
|
||||
|
||||
public List<MotorBurnFile> getData(Integer motor_id) {
|
||||
return data.get(motor_id);
|
||||
}
|
||||
|
||||
public void setError(String error) {
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DownloadResponse [error=" + error + ", data=" + data + "]";
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class DownloadResponse {
|
||||
|
||||
private final Map<Integer,List<MotorBurnFile>> data = new HashMap<Integer,List<MotorBurnFile>>();
|
||||
|
||||
private String error = null;
|
||||
|
||||
public void add( MotorBurnFile mbd ) {
|
||||
List<MotorBurnFile> currentData = data.get(mbd.getMotorId());
|
||||
if ( currentData == null ) {
|
||||
currentData = new ArrayList<MotorBurnFile>();
|
||||
data.put(mbd.getMotorId(), currentData);
|
||||
}
|
||||
currentData.add(mbd);
|
||||
}
|
||||
|
||||
public List<MotorBurnFile> getData(Integer motor_id) {
|
||||
return data.get(motor_id);
|
||||
}
|
||||
|
||||
public void setError(String error) {
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DownloadResponse [error=" + error + ", data=" + data + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,77 +1,77 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import net.sf.openrocket.aerodynamics.WarningSet;
|
||||
import net.sf.openrocket.file.simplesax.ElementHandler;
|
||||
import net.sf.openrocket.file.simplesax.SimpleSAX;
|
||||
|
||||
public class DownloadResponseParser implements ElementHandler {
|
||||
|
||||
private static final String thrustcurveURI = "http://www.thrustcurve.org/2009/DownloadResponse";
|
||||
|
||||
private static final String root_tag = "download-response";
|
||||
private static final String results_tag = "results";
|
||||
private static final String result_tag = "result";
|
||||
private static final String motor_id_tag = "motor-id";
|
||||
private static final String simfile_id_tag = "simfile-id";
|
||||
private static final String format_tag = "format";
|
||||
private static final String source_tag = "source";
|
||||
private static final String license_tag = "license";
|
||||
private static final String data_tag = "data";
|
||||
private static final String error_tag = "error";
|
||||
|
||||
private final DownloadResponse response = new DownloadResponse();
|
||||
|
||||
private MotorBurnFile motorBurnFile;
|
||||
|
||||
private DownloadResponseParser() {
|
||||
}
|
||||
|
||||
public static DownloadResponse parse(InputStream in) throws IOException, SAXException {
|
||||
|
||||
DownloadResponseParser handler = new DownloadResponseParser();
|
||||
WarningSet warnings = new WarningSet();
|
||||
SimpleSAX.readXML(new InputSource(in), handler, warnings);
|
||||
|
||||
return handler.response;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementHandler openElement(String element, HashMap<String, String> attributes, WarningSet warnings) throws SAXException {
|
||||
if (result_tag.equals(element)) {
|
||||
motorBurnFile = new MotorBurnFile();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeElement(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
if (result_tag.equals(element)) {
|
||||
response.add(motorBurnFile);
|
||||
} else if (motor_id_tag.equals(element)) {
|
||||
motorBurnFile.setMotorId(Integer.parseInt(content));
|
||||
} else if (simfile_id_tag.equals(element)) {
|
||||
motorBurnFile.setSimfileId(Integer.parseInt(content));
|
||||
} else if (format_tag.equals(element)) {
|
||||
motorBurnFile.setFiletype(content);
|
||||
} else if (data_tag.equals(element)) {
|
||||
try {
|
||||
motorBurnFile.decodeFile(content);
|
||||
} catch (IOException e) {
|
||||
throw new SAXException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endHandler(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import net.sf.openrocket.aerodynamics.WarningSet;
|
||||
import net.sf.openrocket.file.simplesax.ElementHandler;
|
||||
import net.sf.openrocket.file.simplesax.SimpleSAX;
|
||||
|
||||
public class DownloadResponseParser implements ElementHandler {
|
||||
|
||||
private static final String thrustcurveURI = "http://www.thrustcurve.org/2009/DownloadResponse";
|
||||
|
||||
private static final String root_tag = "download-response";
|
||||
private static final String results_tag = "results";
|
||||
private static final String result_tag = "result";
|
||||
private static final String motor_id_tag = "motor-id";
|
||||
private static final String simfile_id_tag = "simfile-id";
|
||||
private static final String format_tag = "format";
|
||||
private static final String source_tag = "source";
|
||||
private static final String license_tag = "license";
|
||||
private static final String data_tag = "data";
|
||||
private static final String error_tag = "error";
|
||||
|
||||
private final DownloadResponse response = new DownloadResponse();
|
||||
|
||||
private MotorBurnFile motorBurnFile;
|
||||
|
||||
private DownloadResponseParser() {
|
||||
}
|
||||
|
||||
public static DownloadResponse parse(InputStream in) throws IOException, SAXException {
|
||||
|
||||
DownloadResponseParser handler = new DownloadResponseParser();
|
||||
WarningSet warnings = new WarningSet();
|
||||
SimpleSAX.readXML(new InputSource(in), handler, warnings);
|
||||
|
||||
return handler.response;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementHandler openElement(String element, HashMap<String, String> attributes, WarningSet warnings) throws SAXException {
|
||||
if (result_tag.equals(element)) {
|
||||
motorBurnFile = new MotorBurnFile();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeElement(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
if (result_tag.equals(element)) {
|
||||
response.add(motorBurnFile);
|
||||
} else if (motor_id_tag.equals(element)) {
|
||||
motorBurnFile.setMotorId(Integer.parseInt(content));
|
||||
} else if (simfile_id_tag.equals(element)) {
|
||||
motorBurnFile.setSimfileId(Integer.parseInt(content));
|
||||
} else if (format_tag.equals(element)) {
|
||||
motorBurnFile.setFiletype(content);
|
||||
} else if (data_tag.equals(element)) {
|
||||
try {
|
||||
motorBurnFile.decodeFile(content);
|
||||
} catch (IOException e) {
|
||||
throw new SAXException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endHandler(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,108 +1,108 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.openrocket.file.motor.RASPMotorLoader;
|
||||
import net.sf.openrocket.file.motor.RockSimMotorLoader;
|
||||
import net.sf.openrocket.motor.ThrustCurveMotor;
|
||||
|
||||
public class MotorBurnFile {
|
||||
|
||||
private Integer motorId;
|
||||
private Integer simfileId;
|
||||
private String filetype;
|
||||
private ThrustCurveMotor.Builder thrustCurveMotor;
|
||||
private String data;
|
||||
|
||||
public void init() {
|
||||
this.motorId = null;
|
||||
this.filetype = null;
|
||||
this.thrustCurveMotor = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MotorBurnFile clone() {
|
||||
MotorBurnFile clone = new MotorBurnFile();
|
||||
clone.motorId = this.motorId;
|
||||
clone.filetype = this.filetype;
|
||||
clone.thrustCurveMotor = this.thrustCurveMotor;
|
||||
return clone;
|
||||
}
|
||||
|
||||
public void decodeFile(String _data) throws IOException {
|
||||
_data = Base64Decoder.decodeData(_data);
|
||||
data = _data;
|
||||
try {
|
||||
if (SupportedFileTypes.RASP_FORMAT.equals(filetype)) {
|
||||
RASPMotorLoader loader = new RASPMotorLoader();
|
||||
List<ThrustCurveMotor.Builder> motors = loader.load(new StringReader(data), "download");
|
||||
this.thrustCurveMotor = motors.get(0);
|
||||
} else if (SupportedFileTypes.ROCKSIM_FORMAT.equals(filetype)) {
|
||||
RockSimMotorLoader loader = new RockSimMotorLoader();
|
||||
List<ThrustCurveMotor.Builder> motors = loader.load(new StringReader(data), "download");
|
||||
this.thrustCurveMotor = motors.get(0);
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
this.thrustCurveMotor = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the motor id
|
||||
*/
|
||||
public Integer getMotorId() {
|
||||
return motorId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param motorId the motor id to set
|
||||
*/
|
||||
public void setMotorId(Integer motorId) {
|
||||
this.motorId = motorId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the simfile id
|
||||
*/
|
||||
public Integer getSimfileId() {
|
||||
return simfileId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param simfileId the simfileId to set
|
||||
*/
|
||||
public void setSimfileId(Integer simfileId) {
|
||||
this.simfileId = simfileId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the filetype
|
||||
*/
|
||||
public String getFiletype() {
|
||||
return filetype;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param filetype the filetype to set
|
||||
*/
|
||||
public void setFiletype(String filetype) {
|
||||
this.filetype = filetype;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the thrustCurveMotor
|
||||
*/
|
||||
public ThrustCurveMotor.Builder getThrustCurveMotor() {
|
||||
return thrustCurveMotor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the file contents
|
||||
*/
|
||||
public String getContents() {
|
||||
return data;
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.openrocket.file.motor.RASPMotorLoader;
|
||||
import net.sf.openrocket.file.motor.RockSimMotorLoader;
|
||||
import net.sf.openrocket.motor.ThrustCurveMotor;
|
||||
|
||||
public class MotorBurnFile {
|
||||
|
||||
private Integer motorId;
|
||||
private Integer simfileId;
|
||||
private String filetype;
|
||||
private ThrustCurveMotor.Builder thrustCurveMotor;
|
||||
private String data;
|
||||
|
||||
public void init() {
|
||||
this.motorId = null;
|
||||
this.filetype = null;
|
||||
this.thrustCurveMotor = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MotorBurnFile clone() {
|
||||
MotorBurnFile clone = new MotorBurnFile();
|
||||
clone.motorId = this.motorId;
|
||||
clone.filetype = this.filetype;
|
||||
clone.thrustCurveMotor = this.thrustCurveMotor;
|
||||
return clone;
|
||||
}
|
||||
|
||||
public void decodeFile(String _data) throws IOException {
|
||||
_data = Base64Decoder.decodeData(_data);
|
||||
data = _data;
|
||||
try {
|
||||
if (SupportedFileTypes.RASP_FORMAT.equals(filetype)) {
|
||||
RASPMotorLoader loader = new RASPMotorLoader();
|
||||
List<ThrustCurveMotor.Builder> motors = loader.load(new StringReader(data), "download");
|
||||
this.thrustCurveMotor = motors.get(0);
|
||||
} else if (SupportedFileTypes.ROCKSIM_FORMAT.equals(filetype)) {
|
||||
RockSimMotorLoader loader = new RockSimMotorLoader();
|
||||
List<ThrustCurveMotor.Builder> motors = loader.load(new StringReader(data), "download");
|
||||
this.thrustCurveMotor = motors.get(0);
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
this.thrustCurveMotor = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the motor id
|
||||
*/
|
||||
public Integer getMotorId() {
|
||||
return motorId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param motorId the motor id to set
|
||||
*/
|
||||
public void setMotorId(Integer motorId) {
|
||||
this.motorId = motorId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the simfile id
|
||||
*/
|
||||
public Integer getSimfileId() {
|
||||
return simfileId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param simfileId the simfileId to set
|
||||
*/
|
||||
public void setSimfileId(Integer simfileId) {
|
||||
this.simfileId = simfileId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the filetype
|
||||
*/
|
||||
public String getFiletype() {
|
||||
return filetype;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param filetype the filetype to set
|
||||
*/
|
||||
public void setFiletype(String filetype) {
|
||||
this.filetype = filetype;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the thrustCurveMotor
|
||||
*/
|
||||
public ThrustCurveMotor.Builder getThrustCurveMotor() {
|
||||
return thrustCurveMotor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the file contents
|
||||
*/
|
||||
public String getContents() {
|
||||
return data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,117 +1,117 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
public class SearchRequest {
|
||||
|
||||
private String manufacturer;
|
||||
private String designation;
|
||||
private String brand_name;
|
||||
|
||||
private String common_name;
|
||||
private String impulse_class;
|
||||
private Integer diameter;
|
||||
|
||||
/*
|
||||
public enum Type {
|
||||
"SU";
|
||||
"reload";
|
||||
"hybrid"
|
||||
};
|
||||
*/
|
||||
private String type;
|
||||
|
||||
public void setManufacturer(String manufacturer) {
|
||||
this.manufacturer = null;
|
||||
if (manufacturer != null) {
|
||||
manufacturer = manufacturer.trim();
|
||||
if (!"".equals(manufacturer)) {
|
||||
this.manufacturer = manufacturer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setDesignation(String designation) {
|
||||
this.designation = designation;
|
||||
}
|
||||
|
||||
public void setBrand_name(String brand_name) {
|
||||
this.brand_name = brand_name;
|
||||
}
|
||||
|
||||
public void setCommon_name(String common_name) {
|
||||
if (common_name == null) {
|
||||
this.common_name = null;
|
||||
return;
|
||||
}
|
||||
this.common_name = common_name.trim();
|
||||
if ("".equals(this.common_name)) {
|
||||
this.common_name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setImpulse_class(String impulse_class) {
|
||||
this.impulse_class = null;
|
||||
if (impulse_class != null) {
|
||||
this.impulse_class = impulse_class.trim();
|
||||
if ("".equals(impulse_class)) {
|
||||
this.impulse_class = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setDiameter(Integer diameter) {
|
||||
this.diameter = diameter;
|
||||
}
|
||||
|
||||
public void setDiameter(String diameter) {
|
||||
this.diameter = null;
|
||||
if (diameter == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
this.diameter = Integer.decode(diameter);
|
||||
} catch (NumberFormatException ex) {
|
||||
this.diameter = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder w = new StringBuilder();
|
||||
|
||||
w.append("<?xml version=\"1.0\" encoding=\"ascii\"?>\n");
|
||||
w.append("<search-request\n");
|
||||
w.append(" xmlns=\"http://www.thrustcurve.org/2014/SearchRequest\"\n");
|
||||
w.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
|
||||
w.append(" xsi:schemaLocation=\"http://www.thrustcurve.org/2014/SearchRequest http://www.thrustcurve.org/2014/search-request.xsd\">\n");
|
||||
|
||||
if (manufacturer != null) {
|
||||
w.append(" <manufacturer>").append(manufacturer).append("</manufacturer>\n");
|
||||
}
|
||||
if (designation != null) {
|
||||
w.append(" <designation>").append(designation).append("</designation>\n");
|
||||
}
|
||||
if (brand_name != null) {
|
||||
w.append(" <brand-name>").append(brand_name).append("</brand-name>\n");
|
||||
}
|
||||
if (common_name != null) {
|
||||
w.append(" <common-name>").append(common_name).append("</common-name>\n");
|
||||
}
|
||||
if (impulse_class != null) {
|
||||
w.append(" <impulse-class>").append(impulse_class).append("</impulse-class>\n");
|
||||
}
|
||||
if (diameter != null) {
|
||||
w.append(" <diameter>").append(diameter).append("</diameter>\n");
|
||||
}
|
||||
if (type != null) {
|
||||
w.append(" <type>").append(type).append("</type>\n");
|
||||
}
|
||||
w.append("<data-fields>*</data-fields>");
|
||||
w.append("<max-results>0</max-results>");
|
||||
w.append("</search-request>\n");
|
||||
return w.toString();
|
||||
}
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
public class SearchRequest {
|
||||
|
||||
private String manufacturer;
|
||||
private String designation;
|
||||
private String brand_name;
|
||||
|
||||
private String common_name;
|
||||
private String impulse_class;
|
||||
private Integer diameter;
|
||||
|
||||
/*
|
||||
public enum Type {
|
||||
"SU";
|
||||
"reload";
|
||||
"hybrid"
|
||||
};
|
||||
*/
|
||||
private String type;
|
||||
|
||||
public void setManufacturer(String manufacturer) {
|
||||
this.manufacturer = null;
|
||||
if (manufacturer != null) {
|
||||
manufacturer = manufacturer.trim();
|
||||
if (!"".equals(manufacturer)) {
|
||||
this.manufacturer = manufacturer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setDesignation(String designation) {
|
||||
this.designation = designation;
|
||||
}
|
||||
|
||||
public void setBrand_name(String brand_name) {
|
||||
this.brand_name = brand_name;
|
||||
}
|
||||
|
||||
public void setCommon_name(String common_name) {
|
||||
if (common_name == null) {
|
||||
this.common_name = null;
|
||||
return;
|
||||
}
|
||||
this.common_name = common_name.trim();
|
||||
if ("".equals(this.common_name)) {
|
||||
this.common_name = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setImpulse_class(String impulse_class) {
|
||||
this.impulse_class = null;
|
||||
if (impulse_class != null) {
|
||||
this.impulse_class = impulse_class.trim();
|
||||
if ("".equals(impulse_class)) {
|
||||
this.impulse_class = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setDiameter(Integer diameter) {
|
||||
this.diameter = diameter;
|
||||
}
|
||||
|
||||
public void setDiameter(String diameter) {
|
||||
this.diameter = null;
|
||||
if (diameter == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
this.diameter = Integer.decode(diameter);
|
||||
} catch (NumberFormatException ex) {
|
||||
this.diameter = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder w = new StringBuilder();
|
||||
|
||||
w.append("<?xml version=\"1.0\" encoding=\"ascii\"?>\n");
|
||||
w.append("<search-request\n");
|
||||
w.append(" xmlns=\"http://www.thrustcurve.org/2014/SearchRequest\"\n");
|
||||
w.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
|
||||
w.append(" xsi:schemaLocation=\"http://www.thrustcurve.org/2014/SearchRequest http://www.thrustcurve.org/2014/search-request.xsd\">\n");
|
||||
|
||||
if (manufacturer != null) {
|
||||
w.append(" <manufacturer>").append(manufacturer).append("</manufacturer>\n");
|
||||
}
|
||||
if (designation != null) {
|
||||
w.append(" <designation>").append(designation).append("</designation>\n");
|
||||
}
|
||||
if (brand_name != null) {
|
||||
w.append(" <brand-name>").append(brand_name).append("</brand-name>\n");
|
||||
}
|
||||
if (common_name != null) {
|
||||
w.append(" <common-name>").append(common_name).append("</common-name>\n");
|
||||
}
|
||||
if (impulse_class != null) {
|
||||
w.append(" <impulse-class>").append(impulse_class).append("</impulse-class>\n");
|
||||
}
|
||||
if (diameter != null) {
|
||||
w.append(" <diameter>").append(diameter).append("</diameter>\n");
|
||||
}
|
||||
if (type != null) {
|
||||
w.append(" <type>").append(type).append("</type>\n");
|
||||
}
|
||||
w.append("<data-fields>*</data-fields>");
|
||||
w.append("<max-results>0</max-results>");
|
||||
w.append("</search-request>\n");
|
||||
return w.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,45 +1,45 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class SearchResponse {
|
||||
|
||||
private final List<TCMotor> results = new ArrayList<TCMotor>();
|
||||
|
||||
private int matches;
|
||||
|
||||
private String error;
|
||||
|
||||
public List<TCMotor> getResults() {
|
||||
return results;
|
||||
}
|
||||
|
||||
void addMotor(TCMotor motor) {
|
||||
results.add(motor);
|
||||
}
|
||||
|
||||
public int getMatches() {
|
||||
return matches;
|
||||
}
|
||||
|
||||
public void setMatches(int matches) {
|
||||
this.matches = matches;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
public void setError(String error) {
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SearchResult [results=" + results + ", matches=" + matches
|
||||
+ ", error=" + error + "]";
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class SearchResponse {
|
||||
|
||||
private final List<TCMotor> results = new ArrayList<TCMotor>();
|
||||
|
||||
private int matches;
|
||||
|
||||
private String error;
|
||||
|
||||
public List<TCMotor> getResults() {
|
||||
return results;
|
||||
}
|
||||
|
||||
void addMotor(TCMotor motor) {
|
||||
results.add(motor);
|
||||
}
|
||||
|
||||
public int getMatches() {
|
||||
return matches;
|
||||
}
|
||||
|
||||
public void setMatches(int matches) {
|
||||
this.matches = matches;
|
||||
}
|
||||
|
||||
public String getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
public void setError(String error) {
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SearchResult [results=" + results + ", matches=" + matches
|
||||
+ ", error=" + error + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,191 +1,191 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import net.sf.openrocket.aerodynamics.WarningSet;
|
||||
import net.sf.openrocket.file.simplesax.ElementHandler;
|
||||
import net.sf.openrocket.file.simplesax.SimpleSAX;
|
||||
|
||||
public class SearchResponseParser implements ElementHandler {
|
||||
|
||||
private static final String thrustcurveURI = "http://www.thrustcurve.org/2008/SearchResponse";
|
||||
/*
|
||||
* XML Tags in SearchResult xsd
|
||||
*/
|
||||
private static final String root_tag = "search-response";
|
||||
private static final String criteria = "criteria";
|
||||
private static final String criterion = "criterion";
|
||||
private static final String name = "name";
|
||||
private static final String value = "value";
|
||||
private static final String matches = "matches";
|
||||
private static final String results = "results";
|
||||
private static final String result = "result";
|
||||
|
||||
private static final String motor_id = "motor-id";
|
||||
private static final String manufacturer = "manufacturer";
|
||||
private static final String manufacturer_abbr = "manufacturer-abbrev";
|
||||
private static final String designation = "designation";
|
||||
private static final String brand_name = "brand-name";
|
||||
private static final String common_name = "common-name";
|
||||
private static final String impulse_class = "impulse-class";
|
||||
private static final String diameter = "diameter";
|
||||
private static final String length = "length";
|
||||
private static final String type = "type";
|
||||
private static final String cert_org = "cert-org";
|
||||
private static final String avg_thrust_n = "avg-thrust-n";
|
||||
private static final String max_thrust_n = "max-thrust-n";
|
||||
private static final String tot_impulse_ns = "tot-impulse-ns";
|
||||
private static final String burn_time_s = "burn-time-s";
|
||||
private static final String data_files = "data-files";
|
||||
private static final String info_url = "info-url";
|
||||
private static final String total_weight_g = "total-weight-g";
|
||||
private static final String prop_weight_g = "prop-weight-g";
|
||||
private static final String delays = "delays";
|
||||
private static final String case_info = "case-info";
|
||||
private static final String prop_info = "prop-info";
|
||||
private static final String updated_on = "updated-on";
|
||||
private static final String availability = "availability";
|
||||
|
||||
private final SearchResponse response = new SearchResponse();
|
||||
|
||||
private TCMotor currentMotor;
|
||||
|
||||
private SearchResponseParser() {
|
||||
}
|
||||
|
||||
public static SearchResponse parse(InputStream in) throws IOException, SAXException {
|
||||
|
||||
SearchResponseParser handler = new SearchResponseParser();
|
||||
WarningSet warnings = new WarningSet();
|
||||
SimpleSAX.readXML(new InputSource(in), handler, warnings);
|
||||
|
||||
return handler.response;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementHandler openElement(String element, HashMap<String, String> attributes, WarningSet warnings) throws SAXException {
|
||||
if (result.equals(element)) {
|
||||
currentMotor = new TCMotor();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeElement(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
|
||||
switch (element) {
|
||||
case result:
|
||||
// Convert impulse class. ThrustCurve puts mmx, 1/4a and 1/2a as A.
|
||||
if ("a".equalsIgnoreCase(currentMotor.getImpulse_class())) {
|
||||
if (currentMotor.getCommon_name().startsWith("1/2A")) {
|
||||
currentMotor.setImpulse_class("1/2A");
|
||||
} else if (currentMotor.getCommon_name().startsWith("1/4A")) {
|
||||
currentMotor.setImpulse_class("1/4A");
|
||||
} else if (currentMotor.getCommon_name().startsWith("Micro")) {
|
||||
currentMotor.setImpulse_class("1/8A");
|
||||
}
|
||||
}
|
||||
|
||||
// Convert Case Info.
|
||||
if (currentMotor.getCase_info() == null
|
||||
|| "single use".equalsIgnoreCase(currentMotor.getCase_info())
|
||||
|| "single-use".equalsIgnoreCase(currentMotor.getCase_info())) {
|
||||
currentMotor.setCase_info(currentMotor.getType() + " " + currentMotor.getDiameter() + "x" + currentMotor.getLength());
|
||||
}
|
||||
response.addMotor(currentMotor);
|
||||
break;
|
||||
case matches:
|
||||
this.response.setMatches(Integer.parseInt(content));
|
||||
break;
|
||||
case motor_id:
|
||||
currentMotor.setMotor_id(Integer.parseInt(content));
|
||||
break;
|
||||
case manufacturer:
|
||||
currentMotor.setManufacturer(content);
|
||||
break;
|
||||
case manufacturer_abbr:
|
||||
currentMotor.setManufacturer_abbr(content);
|
||||
break;
|
||||
case designation:
|
||||
currentMotor.setDesignation(content);
|
||||
break;
|
||||
case brand_name:
|
||||
currentMotor.setBrand_name(content);
|
||||
break;
|
||||
case common_name:
|
||||
currentMotor.setCommon_name(content);
|
||||
break;
|
||||
case impulse_class:
|
||||
currentMotor.setImpulse_class(content);
|
||||
break;
|
||||
case diameter:
|
||||
currentMotor.setDiameter(Float.parseFloat(content));
|
||||
break;
|
||||
case length:
|
||||
currentMotor.setLength(Float.parseFloat(content));
|
||||
break;
|
||||
case type:
|
||||
currentMotor.setType(content);
|
||||
break;
|
||||
case cert_org:
|
||||
currentMotor.setCert_org(content);
|
||||
break;
|
||||
case avg_thrust_n:
|
||||
currentMotor.setAvg_thrust_n(Float.parseFloat(content));
|
||||
break;
|
||||
case max_thrust_n:
|
||||
currentMotor.setMax_thrust_n(Float.parseFloat(content));
|
||||
break;
|
||||
case tot_impulse_ns:
|
||||
currentMotor.setTot_impulse_ns(Float.parseFloat(content));
|
||||
break;
|
||||
case burn_time_s:
|
||||
currentMotor.setBurn_time_s(Float.parseFloat(content));
|
||||
break;
|
||||
case data_files:
|
||||
currentMotor.setData_files(Integer.parseInt(content));
|
||||
break;
|
||||
case info_url:
|
||||
currentMotor.setInfo_url(content);
|
||||
break;
|
||||
case total_weight_g:
|
||||
currentMotor.setTot_mass_g(Double.parseDouble(content));
|
||||
break;
|
||||
case prop_weight_g:
|
||||
currentMotor.setProp_mass_g(Double.parseDouble(content));
|
||||
break;
|
||||
case delays:
|
||||
currentMotor.setDelays(content);
|
||||
break;
|
||||
case case_info:
|
||||
currentMotor.setCase_info(content);
|
||||
break;
|
||||
case prop_info:
|
||||
currentMotor.setProp_info(content);
|
||||
break;
|
||||
case availability:
|
||||
currentMotor.setAvailability(content);
|
||||
break;
|
||||
case updated_on:
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
|
||||
try {
|
||||
currentMotor.setUpdated_on(formatter.parse(content));
|
||||
} catch (ParseException ignored) { }
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endHandler(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import net.sf.openrocket.aerodynamics.WarningSet;
|
||||
import net.sf.openrocket.file.simplesax.ElementHandler;
|
||||
import net.sf.openrocket.file.simplesax.SimpleSAX;
|
||||
|
||||
public class SearchResponseParser implements ElementHandler {
|
||||
|
||||
private static final String thrustcurveURI = "http://www.thrustcurve.org/2008/SearchResponse";
|
||||
/*
|
||||
* XML Tags in SearchResult xsd
|
||||
*/
|
||||
private static final String root_tag = "search-response";
|
||||
private static final String criteria = "criteria";
|
||||
private static final String criterion = "criterion";
|
||||
private static final String name = "name";
|
||||
private static final String value = "value";
|
||||
private static final String matches = "matches";
|
||||
private static final String results = "results";
|
||||
private static final String result = "result";
|
||||
|
||||
private static final String motor_id = "motor-id";
|
||||
private static final String manufacturer = "manufacturer";
|
||||
private static final String manufacturer_abbr = "manufacturer-abbrev";
|
||||
private static final String designation = "designation";
|
||||
private static final String brand_name = "brand-name";
|
||||
private static final String common_name = "common-name";
|
||||
private static final String impulse_class = "impulse-class";
|
||||
private static final String diameter = "diameter";
|
||||
private static final String length = "length";
|
||||
private static final String type = "type";
|
||||
private static final String cert_org = "cert-org";
|
||||
private static final String avg_thrust_n = "avg-thrust-n";
|
||||
private static final String max_thrust_n = "max-thrust-n";
|
||||
private static final String tot_impulse_ns = "tot-impulse-ns";
|
||||
private static final String burn_time_s = "burn-time-s";
|
||||
private static final String data_files = "data-files";
|
||||
private static final String info_url = "info-url";
|
||||
private static final String total_weight_g = "total-weight-g";
|
||||
private static final String prop_weight_g = "prop-weight-g";
|
||||
private static final String delays = "delays";
|
||||
private static final String case_info = "case-info";
|
||||
private static final String prop_info = "prop-info";
|
||||
private static final String updated_on = "updated-on";
|
||||
private static final String availability = "availability";
|
||||
|
||||
private final SearchResponse response = new SearchResponse();
|
||||
|
||||
private TCMotor currentMotor;
|
||||
|
||||
private SearchResponseParser() {
|
||||
}
|
||||
|
||||
public static SearchResponse parse(InputStream in) throws IOException, SAXException {
|
||||
|
||||
SearchResponseParser handler = new SearchResponseParser();
|
||||
WarningSet warnings = new WarningSet();
|
||||
SimpleSAX.readXML(new InputSource(in), handler, warnings);
|
||||
|
||||
return handler.response;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementHandler openElement(String element, HashMap<String, String> attributes, WarningSet warnings) throws SAXException {
|
||||
if (result.equals(element)) {
|
||||
currentMotor = new TCMotor();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeElement(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
|
||||
switch (element) {
|
||||
case result:
|
||||
// Convert impulse class. ThrustCurve puts mmx, 1/4a and 1/2a as A.
|
||||
if ("a".equalsIgnoreCase(currentMotor.getImpulse_class())) {
|
||||
if (currentMotor.getCommon_name().startsWith("1/2A")) {
|
||||
currentMotor.setImpulse_class("1/2A");
|
||||
} else if (currentMotor.getCommon_name().startsWith("1/4A")) {
|
||||
currentMotor.setImpulse_class("1/4A");
|
||||
} else if (currentMotor.getCommon_name().startsWith("Micro")) {
|
||||
currentMotor.setImpulse_class("1/8A");
|
||||
}
|
||||
}
|
||||
|
||||
// Convert Case Info.
|
||||
if (currentMotor.getCase_info() == null
|
||||
|| "single use".equalsIgnoreCase(currentMotor.getCase_info())
|
||||
|| "single-use".equalsIgnoreCase(currentMotor.getCase_info())) {
|
||||
currentMotor.setCase_info(currentMotor.getType() + " " + currentMotor.getDiameter() + "x" + currentMotor.getLength());
|
||||
}
|
||||
response.addMotor(currentMotor);
|
||||
break;
|
||||
case matches:
|
||||
this.response.setMatches(Integer.parseInt(content));
|
||||
break;
|
||||
case motor_id:
|
||||
currentMotor.setMotor_id(Integer.parseInt(content));
|
||||
break;
|
||||
case manufacturer:
|
||||
currentMotor.setManufacturer(content);
|
||||
break;
|
||||
case manufacturer_abbr:
|
||||
currentMotor.setManufacturer_abbr(content);
|
||||
break;
|
||||
case designation:
|
||||
currentMotor.setDesignation(content);
|
||||
break;
|
||||
case brand_name:
|
||||
currentMotor.setBrand_name(content);
|
||||
break;
|
||||
case common_name:
|
||||
currentMotor.setCommon_name(content);
|
||||
break;
|
||||
case impulse_class:
|
||||
currentMotor.setImpulse_class(content);
|
||||
break;
|
||||
case diameter:
|
||||
currentMotor.setDiameter(Float.parseFloat(content));
|
||||
break;
|
||||
case length:
|
||||
currentMotor.setLength(Float.parseFloat(content));
|
||||
break;
|
||||
case type:
|
||||
currentMotor.setType(content);
|
||||
break;
|
||||
case cert_org:
|
||||
currentMotor.setCert_org(content);
|
||||
break;
|
||||
case avg_thrust_n:
|
||||
currentMotor.setAvg_thrust_n(Float.parseFloat(content));
|
||||
break;
|
||||
case max_thrust_n:
|
||||
currentMotor.setMax_thrust_n(Float.parseFloat(content));
|
||||
break;
|
||||
case tot_impulse_ns:
|
||||
currentMotor.setTot_impulse_ns(Float.parseFloat(content));
|
||||
break;
|
||||
case burn_time_s:
|
||||
currentMotor.setBurn_time_s(Float.parseFloat(content));
|
||||
break;
|
||||
case data_files:
|
||||
currentMotor.setData_files(Integer.parseInt(content));
|
||||
break;
|
||||
case info_url:
|
||||
currentMotor.setInfo_url(content);
|
||||
break;
|
||||
case total_weight_g:
|
||||
currentMotor.setTot_mass_g(Double.parseDouble(content));
|
||||
break;
|
||||
case prop_weight_g:
|
||||
currentMotor.setProp_mass_g(Double.parseDouble(content));
|
||||
break;
|
||||
case delays:
|
||||
currentMotor.setDelays(content);
|
||||
break;
|
||||
case case_info:
|
||||
currentMotor.setCase_info(content);
|
||||
break;
|
||||
case prop_info:
|
||||
currentMotor.setProp_info(content);
|
||||
break;
|
||||
case availability:
|
||||
currentMotor.setAvailability(content);
|
||||
break;
|
||||
case updated_on:
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
|
||||
try {
|
||||
currentMotor.setUpdated_on(formatter.parse(content));
|
||||
} catch (ParseException ignored) { }
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endHandler(String element, HashMap<String, String> attributes, String content, WarningSet warnings) throws SAXException {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
public abstract class SupportedFileTypes {
|
||||
|
||||
public final static String ROCKSIM_FORMAT = "RockSim";
|
||||
public final static String RASP_FORMAT = "RASP";
|
||||
|
||||
public static boolean isSupportedFileType( String arg0 ) {
|
||||
return (ROCKSIM_FORMAT.equals(arg0) || RASP_FORMAT.equals(arg0));
|
||||
}
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
public abstract class SupportedFileTypes {
|
||||
|
||||
public final static String ROCKSIM_FORMAT = "RockSim";
|
||||
public final static String RASP_FORMAT = "RASP";
|
||||
|
||||
public static boolean isSupportedFileType( String arg0 ) {
|
||||
return (ROCKSIM_FORMAT.equals(arg0) || RASP_FORMAT.equals(arg0));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,298 +1,298 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class TCMotor implements Cloneable {
|
||||
|
||||
private Integer motor_id;
|
||||
private String manufacturer;
|
||||
private String manufacturer_abbr;
|
||||
private String designation;
|
||||
private String brand_name;
|
||||
private String common_name;
|
||||
private String impulse_class;
|
||||
private Float diameter;
|
||||
private Float length;
|
||||
private String type;
|
||||
private String cert_org;
|
||||
private Float avg_thrust_n;
|
||||
private Float max_thrust_n;
|
||||
private Float tot_impulse_ns;
|
||||
private Float burn_time_s;
|
||||
private Integer data_files;
|
||||
private String info_url;
|
||||
private Double tot_mass_g;
|
||||
private Double prop_mass_g;
|
||||
private String delays;
|
||||
private String case_info;
|
||||
private String prop_info;
|
||||
private Date updated_on;
|
||||
private String availability;
|
||||
|
||||
public void init() {
|
||||
motor_id = null;
|
||||
manufacturer = null;
|
||||
manufacturer_abbr = null;
|
||||
designation = null;
|
||||
brand_name = null;
|
||||
common_name = null;
|
||||
impulse_class = null;
|
||||
diameter = null;
|
||||
length = null;
|
||||
type = null;
|
||||
cert_org = null;
|
||||
avg_thrust_n = null;
|
||||
max_thrust_n = null;
|
||||
tot_impulse_ns = null;
|
||||
burn_time_s = null;
|
||||
data_files = null;
|
||||
info_url = null;
|
||||
tot_mass_g = null;
|
||||
prop_mass_g = null;
|
||||
delays = null;
|
||||
case_info = null;
|
||||
prop_info = null;
|
||||
updated_on = null;
|
||||
availability = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TCMotor clone() {
|
||||
TCMotor clone = new TCMotor();
|
||||
clone.motor_id = this.motor_id;
|
||||
clone.manufacturer = this.manufacturer;
|
||||
clone.manufacturer_abbr = this.manufacturer_abbr;
|
||||
clone.designation = this.designation;
|
||||
clone.brand_name = this.brand_name;
|
||||
clone.common_name = this.common_name;
|
||||
clone.impulse_class = this.impulse_class;
|
||||
clone.diameter = this.diameter;
|
||||
clone.length = this.length;
|
||||
clone.type = this.type;
|
||||
clone.cert_org = this.cert_org;
|
||||
clone.avg_thrust_n = this.avg_thrust_n;
|
||||
clone.max_thrust_n = this.max_thrust_n;
|
||||
clone.tot_impulse_ns = this.tot_impulse_ns;
|
||||
clone.burn_time_s = this.burn_time_s;
|
||||
clone.data_files = this.data_files;
|
||||
clone.info_url = this.info_url;
|
||||
clone.tot_mass_g = this.tot_mass_g;
|
||||
clone.prop_mass_g = this.prop_mass_g;
|
||||
clone.delays = this.delays;
|
||||
clone.case_info = this.case_info;
|
||||
clone.prop_info = this.prop_info;
|
||||
clone.updated_on = this.updated_on;
|
||||
clone.availability = this.availability;
|
||||
return clone;
|
||||
}
|
||||
|
||||
public Integer getMotor_id() {
|
||||
return motor_id;
|
||||
}
|
||||
|
||||
public void setMotor_id(Integer motor_id) {
|
||||
this.motor_id = motor_id;
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return manufacturer;
|
||||
}
|
||||
|
||||
public void setManufacturer(String manufacturer) {
|
||||
this.manufacturer = manufacturer;
|
||||
}
|
||||
|
||||
public String getManufacturer_abbr() {
|
||||
return manufacturer_abbr;
|
||||
}
|
||||
|
||||
public void setManufacturer_abbr(String manufacturer_abbr) {
|
||||
this.manufacturer_abbr = manufacturer_abbr;
|
||||
}
|
||||
|
||||
public String getDesignation() {
|
||||
return designation;
|
||||
}
|
||||
|
||||
public void setDesignation(String designation) {
|
||||
this.designation = designation;
|
||||
}
|
||||
|
||||
public String getBrand_name() {
|
||||
return brand_name;
|
||||
}
|
||||
|
||||
public void setBrand_name(String brand_name) {
|
||||
this.brand_name = brand_name;
|
||||
}
|
||||
|
||||
public String getCommon_name() {
|
||||
return common_name;
|
||||
}
|
||||
|
||||
public void setCommon_name(String common_name) {
|
||||
this.common_name = common_name;
|
||||
}
|
||||
|
||||
public String getImpulse_class() {
|
||||
return impulse_class;
|
||||
}
|
||||
|
||||
public void setImpulse_class(String impulse_class) {
|
||||
this.impulse_class = impulse_class;
|
||||
}
|
||||
|
||||
public Float getDiameter() {
|
||||
return diameter;
|
||||
}
|
||||
|
||||
public void setDiameter(Float diameter) {
|
||||
this.diameter = diameter;
|
||||
}
|
||||
|
||||
public Float getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public void setLength(Float length) {
|
||||
this.length = length;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getCert_org() {
|
||||
return cert_org;
|
||||
}
|
||||
|
||||
public void setCert_org(String cert_org) {
|
||||
this.cert_org = cert_org;
|
||||
}
|
||||
|
||||
public Float getAvg_thrust_n() {
|
||||
return avg_thrust_n;
|
||||
}
|
||||
|
||||
public void setAvg_thrust_n(Float avg_thrust_n) {
|
||||
this.avg_thrust_n = avg_thrust_n;
|
||||
}
|
||||
|
||||
public Float getMax_thrust_n() {
|
||||
return max_thrust_n;
|
||||
}
|
||||
|
||||
public void setMax_thrust_n(Float max_thrust_n) {
|
||||
this.max_thrust_n = max_thrust_n;
|
||||
}
|
||||
|
||||
public Float getTot_impulse_ns() {
|
||||
return tot_impulse_ns;
|
||||
}
|
||||
|
||||
public void setTot_impulse_ns(Float tot_impulse_ns) {
|
||||
this.tot_impulse_ns = tot_impulse_ns;
|
||||
}
|
||||
|
||||
public Float getBurn_time_s() {
|
||||
return burn_time_s;
|
||||
}
|
||||
|
||||
public void setBurn_time_s(Float burn_time_s) {
|
||||
this.burn_time_s = burn_time_s;
|
||||
}
|
||||
|
||||
public Integer getData_files() {
|
||||
return data_files;
|
||||
}
|
||||
|
||||
public void setData_files(Integer data_files) {
|
||||
this.data_files = data_files;
|
||||
}
|
||||
|
||||
public String getInfo_url() {
|
||||
return info_url;
|
||||
}
|
||||
|
||||
public void setInfo_url(String info_url) {
|
||||
this.info_url = info_url;
|
||||
}
|
||||
|
||||
public Double getTot_mass_g() {
|
||||
return tot_mass_g;
|
||||
}
|
||||
|
||||
public void setTot_mass_g(Double tot_mass_g) {
|
||||
this.tot_mass_g = tot_mass_g;
|
||||
}
|
||||
|
||||
public Double getProp_mass_g() {
|
||||
return prop_mass_g;
|
||||
}
|
||||
|
||||
public void setProp_mass_g(Double prop_mass_g) {
|
||||
this.prop_mass_g = prop_mass_g;
|
||||
}
|
||||
|
||||
public String getDelays() {
|
||||
return delays;
|
||||
}
|
||||
|
||||
public void setDelays(String delays) {
|
||||
this.delays = delays;
|
||||
}
|
||||
|
||||
public String getCase_info() {
|
||||
return case_info;
|
||||
}
|
||||
|
||||
public void setCase_info(String case_info) {
|
||||
this.case_info = case_info;
|
||||
}
|
||||
|
||||
public String getProp_info() {
|
||||
return prop_info;
|
||||
}
|
||||
|
||||
public void setProp_info(String prop_info) {
|
||||
this.prop_info = prop_info;
|
||||
}
|
||||
|
||||
public Date getUpdated_on() {
|
||||
return updated_on;
|
||||
}
|
||||
|
||||
public void setUpdated_on(Date updated_on) {
|
||||
this.updated_on = updated_on;
|
||||
}
|
||||
|
||||
public String getAvailability() {
|
||||
return availability;
|
||||
}
|
||||
|
||||
public void setAvailability(String avail) {
|
||||
this.availability = avail;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TCMotor [motor_id=" + motor_id + ", manufacturer="
|
||||
+ manufacturer + ", manufacturer_abbr=" + manufacturer_abbr
|
||||
+ ", designation=" + designation + ", brand_name=" + brand_name
|
||||
+ ", common_name=" + common_name + ", impulse_class="
|
||||
+ impulse_class + ", diameter=" + diameter + ", length="
|
||||
+ length + ", type=" + type + ", cert_org=" + cert_org
|
||||
+ ", avg_thrust_n=" + avg_thrust_n + ", max_thrust_n="
|
||||
+ max_thrust_n + ", tot_impulse_ns=" + tot_impulse_ns
|
||||
+ ", burn_time_s=" + burn_time_s + ", data_files=" + data_files
|
||||
+ ", info_url=" + info_url + ", tot_mass_g=" + tot_mass_g
|
||||
+ ", prop_mass_g=" + prop_mass_g + ", delays=" + delays
|
||||
+ ", case_info=" + case_info + ", prop_info=" + prop_info
|
||||
+ ", updated_on=" + updated_on + ", availability=" + availability + "]";
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class TCMotor implements Cloneable {
|
||||
|
||||
private Integer motor_id;
|
||||
private String manufacturer;
|
||||
private String manufacturer_abbr;
|
||||
private String designation;
|
||||
private String brand_name;
|
||||
private String common_name;
|
||||
private String impulse_class;
|
||||
private Float diameter;
|
||||
private Float length;
|
||||
private String type;
|
||||
private String cert_org;
|
||||
private Float avg_thrust_n;
|
||||
private Float max_thrust_n;
|
||||
private Float tot_impulse_ns;
|
||||
private Float burn_time_s;
|
||||
private Integer data_files;
|
||||
private String info_url;
|
||||
private Double tot_mass_g;
|
||||
private Double prop_mass_g;
|
||||
private String delays;
|
||||
private String case_info;
|
||||
private String prop_info;
|
||||
private Date updated_on;
|
||||
private String availability;
|
||||
|
||||
public void init() {
|
||||
motor_id = null;
|
||||
manufacturer = null;
|
||||
manufacturer_abbr = null;
|
||||
designation = null;
|
||||
brand_name = null;
|
||||
common_name = null;
|
||||
impulse_class = null;
|
||||
diameter = null;
|
||||
length = null;
|
||||
type = null;
|
||||
cert_org = null;
|
||||
avg_thrust_n = null;
|
||||
max_thrust_n = null;
|
||||
tot_impulse_ns = null;
|
||||
burn_time_s = null;
|
||||
data_files = null;
|
||||
info_url = null;
|
||||
tot_mass_g = null;
|
||||
prop_mass_g = null;
|
||||
delays = null;
|
||||
case_info = null;
|
||||
prop_info = null;
|
||||
updated_on = null;
|
||||
availability = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TCMotor clone() {
|
||||
TCMotor clone = new TCMotor();
|
||||
clone.motor_id = this.motor_id;
|
||||
clone.manufacturer = this.manufacturer;
|
||||
clone.manufacturer_abbr = this.manufacturer_abbr;
|
||||
clone.designation = this.designation;
|
||||
clone.brand_name = this.brand_name;
|
||||
clone.common_name = this.common_name;
|
||||
clone.impulse_class = this.impulse_class;
|
||||
clone.diameter = this.diameter;
|
||||
clone.length = this.length;
|
||||
clone.type = this.type;
|
||||
clone.cert_org = this.cert_org;
|
||||
clone.avg_thrust_n = this.avg_thrust_n;
|
||||
clone.max_thrust_n = this.max_thrust_n;
|
||||
clone.tot_impulse_ns = this.tot_impulse_ns;
|
||||
clone.burn_time_s = this.burn_time_s;
|
||||
clone.data_files = this.data_files;
|
||||
clone.info_url = this.info_url;
|
||||
clone.tot_mass_g = this.tot_mass_g;
|
||||
clone.prop_mass_g = this.prop_mass_g;
|
||||
clone.delays = this.delays;
|
||||
clone.case_info = this.case_info;
|
||||
clone.prop_info = this.prop_info;
|
||||
clone.updated_on = this.updated_on;
|
||||
clone.availability = this.availability;
|
||||
return clone;
|
||||
}
|
||||
|
||||
public Integer getMotor_id() {
|
||||
return motor_id;
|
||||
}
|
||||
|
||||
public void setMotor_id(Integer motor_id) {
|
||||
this.motor_id = motor_id;
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return manufacturer;
|
||||
}
|
||||
|
||||
public void setManufacturer(String manufacturer) {
|
||||
this.manufacturer = manufacturer;
|
||||
}
|
||||
|
||||
public String getManufacturer_abbr() {
|
||||
return manufacturer_abbr;
|
||||
}
|
||||
|
||||
public void setManufacturer_abbr(String manufacturer_abbr) {
|
||||
this.manufacturer_abbr = manufacturer_abbr;
|
||||
}
|
||||
|
||||
public String getDesignation() {
|
||||
return designation;
|
||||
}
|
||||
|
||||
public void setDesignation(String designation) {
|
||||
this.designation = designation;
|
||||
}
|
||||
|
||||
public String getBrand_name() {
|
||||
return brand_name;
|
||||
}
|
||||
|
||||
public void setBrand_name(String brand_name) {
|
||||
this.brand_name = brand_name;
|
||||
}
|
||||
|
||||
public String getCommon_name() {
|
||||
return common_name;
|
||||
}
|
||||
|
||||
public void setCommon_name(String common_name) {
|
||||
this.common_name = common_name;
|
||||
}
|
||||
|
||||
public String getImpulse_class() {
|
||||
return impulse_class;
|
||||
}
|
||||
|
||||
public void setImpulse_class(String impulse_class) {
|
||||
this.impulse_class = impulse_class;
|
||||
}
|
||||
|
||||
public Float getDiameter() {
|
||||
return diameter;
|
||||
}
|
||||
|
||||
public void setDiameter(Float diameter) {
|
||||
this.diameter = diameter;
|
||||
}
|
||||
|
||||
public Float getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public void setLength(Float length) {
|
||||
this.length = length;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getCert_org() {
|
||||
return cert_org;
|
||||
}
|
||||
|
||||
public void setCert_org(String cert_org) {
|
||||
this.cert_org = cert_org;
|
||||
}
|
||||
|
||||
public Float getAvg_thrust_n() {
|
||||
return avg_thrust_n;
|
||||
}
|
||||
|
||||
public void setAvg_thrust_n(Float avg_thrust_n) {
|
||||
this.avg_thrust_n = avg_thrust_n;
|
||||
}
|
||||
|
||||
public Float getMax_thrust_n() {
|
||||
return max_thrust_n;
|
||||
}
|
||||
|
||||
public void setMax_thrust_n(Float max_thrust_n) {
|
||||
this.max_thrust_n = max_thrust_n;
|
||||
}
|
||||
|
||||
public Float getTot_impulse_ns() {
|
||||
return tot_impulse_ns;
|
||||
}
|
||||
|
||||
public void setTot_impulse_ns(Float tot_impulse_ns) {
|
||||
this.tot_impulse_ns = tot_impulse_ns;
|
||||
}
|
||||
|
||||
public Float getBurn_time_s() {
|
||||
return burn_time_s;
|
||||
}
|
||||
|
||||
public void setBurn_time_s(Float burn_time_s) {
|
||||
this.burn_time_s = burn_time_s;
|
||||
}
|
||||
|
||||
public Integer getData_files() {
|
||||
return data_files;
|
||||
}
|
||||
|
||||
public void setData_files(Integer data_files) {
|
||||
this.data_files = data_files;
|
||||
}
|
||||
|
||||
public String getInfo_url() {
|
||||
return info_url;
|
||||
}
|
||||
|
||||
public void setInfo_url(String info_url) {
|
||||
this.info_url = info_url;
|
||||
}
|
||||
|
||||
public Double getTot_mass_g() {
|
||||
return tot_mass_g;
|
||||
}
|
||||
|
||||
public void setTot_mass_g(Double tot_mass_g) {
|
||||
this.tot_mass_g = tot_mass_g;
|
||||
}
|
||||
|
||||
public Double getProp_mass_g() {
|
||||
return prop_mass_g;
|
||||
}
|
||||
|
||||
public void setProp_mass_g(Double prop_mass_g) {
|
||||
this.prop_mass_g = prop_mass_g;
|
||||
}
|
||||
|
||||
public String getDelays() {
|
||||
return delays;
|
||||
}
|
||||
|
||||
public void setDelays(String delays) {
|
||||
this.delays = delays;
|
||||
}
|
||||
|
||||
public String getCase_info() {
|
||||
return case_info;
|
||||
}
|
||||
|
||||
public void setCase_info(String case_info) {
|
||||
this.case_info = case_info;
|
||||
}
|
||||
|
||||
public String getProp_info() {
|
||||
return prop_info;
|
||||
}
|
||||
|
||||
public void setProp_info(String prop_info) {
|
||||
this.prop_info = prop_info;
|
||||
}
|
||||
|
||||
public Date getUpdated_on() {
|
||||
return updated_on;
|
||||
}
|
||||
|
||||
public void setUpdated_on(Date updated_on) {
|
||||
this.updated_on = updated_on;
|
||||
}
|
||||
|
||||
public String getAvailability() {
|
||||
return availability;
|
||||
}
|
||||
|
||||
public void setAvailability(String avail) {
|
||||
this.availability = avail;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TCMotor [motor_id=" + motor_id + ", manufacturer="
|
||||
+ manufacturer + ", manufacturer_abbr=" + manufacturer_abbr
|
||||
+ ", designation=" + designation + ", brand_name=" + brand_name
|
||||
+ ", common_name=" + common_name + ", impulse_class="
|
||||
+ impulse_class + ", diameter=" + diameter + ", length="
|
||||
+ length + ", type=" + type + ", cert_org=" + cert_org
|
||||
+ ", avg_thrust_n=" + avg_thrust_n + ", max_thrust_n="
|
||||
+ max_thrust_n + ", tot_impulse_ns=" + tot_impulse_ns
|
||||
+ ", burn_time_s=" + burn_time_s + ", data_files=" + data_files
|
||||
+ ", info_url=" + info_url + ", tot_mass_g=" + tot_mass_g
|
||||
+ ", prop_mass_g=" + prop_mass_g + ", delays=" + delays
|
||||
+ ", case_info=" + case_info + ", prop_info=" + prop_info
|
||||
+ ", updated_on=" + updated_on + ", availability=" + availability + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,83 +1,83 @@
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
|
||||
public abstract class ThrustCurveAPI {
|
||||
|
||||
public static SearchResponse doSearch(SearchRequest request) throws IOException, SAXException {
|
||||
|
||||
String requestString = request.toString();
|
||||
|
||||
// Froyo has troubles resolving URLS constructed with protocols. Because of this
|
||||
// we need to do it in parts.
|
||||
URL url = new URL("http", "www.thrustcurve.org", "/servlets/search");
|
||||
|
||||
OutputStream stream;
|
||||
|
||||
URLConnection conn = url.openConnection();
|
||||
conn.setConnectTimeout(2000);
|
||||
conn.setDoInput(true);
|
||||
conn.setDoOutput(true);
|
||||
conn.setUseCaches(false);
|
||||
|
||||
stream = conn.getOutputStream();
|
||||
|
||||
stream.write(requestString.getBytes());
|
||||
|
||||
InputStream is = conn.getInputStream();
|
||||
|
||||
SearchResponse result = SearchResponseParser.parse(is);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<MotorBurnFile> downloadData(Integer motor_id, String format) throws IOException, SAXException {
|
||||
|
||||
if (motor_id == null) {
|
||||
return null;
|
||||
}
|
||||
DownloadRequest dr = new DownloadRequest();
|
||||
dr.add(motor_id);
|
||||
dr.setFormat(format);
|
||||
|
||||
String requestString = dr.toString();
|
||||
|
||||
// Froyo has troubles resolving URLS constructed with protocols. Because of this
|
||||
// we need to do it in parts.
|
||||
URL url = new URL("http", "www.thrustcurve.org", "/servlets/download");
|
||||
|
||||
OutputStream stream;
|
||||
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setDoInput(true);
|
||||
conn.setDoOutput(true);
|
||||
conn.setUseCaches(false);
|
||||
conn.connect();
|
||||
|
||||
stream = conn.getOutputStream();
|
||||
|
||||
stream.write(requestString.getBytes());
|
||||
|
||||
if (conn.getResponseCode() == HttpURLConnection.HTTP_BAD_REQUEST) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
InputStream is = conn.getInputStream();
|
||||
|
||||
DownloadResponse downloadResponse = DownloadResponseParser.parse(is);
|
||||
|
||||
return downloadResponse.getData(motor_id);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.thrustcurve;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
|
||||
public abstract class ThrustCurveAPI {
|
||||
|
||||
public static SearchResponse doSearch(SearchRequest request) throws IOException, SAXException {
|
||||
|
||||
String requestString = request.toString();
|
||||
|
||||
// Froyo has troubles resolving URLS constructed with protocols. Because of this
|
||||
// we need to do it in parts.
|
||||
URL url = new URL("http", "www.thrustcurve.org", "/servlets/search");
|
||||
|
||||
OutputStream stream;
|
||||
|
||||
URLConnection conn = url.openConnection();
|
||||
conn.setConnectTimeout(2000);
|
||||
conn.setDoInput(true);
|
||||
conn.setDoOutput(true);
|
||||
conn.setUseCaches(false);
|
||||
|
||||
stream = conn.getOutputStream();
|
||||
|
||||
stream.write(requestString.getBytes());
|
||||
|
||||
InputStream is = conn.getInputStream();
|
||||
|
||||
SearchResponse result = SearchResponseParser.parse(is);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<MotorBurnFile> downloadData(Integer motor_id, String format) throws IOException, SAXException {
|
||||
|
||||
if (motor_id == null) {
|
||||
return null;
|
||||
}
|
||||
DownloadRequest dr = new DownloadRequest();
|
||||
dr.add(motor_id);
|
||||
dr.setFormat(format);
|
||||
|
||||
String requestString = dr.toString();
|
||||
|
||||
// Froyo has troubles resolving URLS constructed with protocols. Because of this
|
||||
// we need to do it in parts.
|
||||
URL url = new URL("http", "www.thrustcurve.org", "/servlets/download");
|
||||
|
||||
OutputStream stream;
|
||||
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setDoInput(true);
|
||||
conn.setDoOutput(true);
|
||||
conn.setUseCaches(false);
|
||||
conn.connect();
|
||||
|
||||
stream = conn.getOutputStream();
|
||||
|
||||
stream.write(requestString.getBytes());
|
||||
|
||||
if (conn.getResponseCode() == HttpURLConnection.HTTP_BAD_REQUEST) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
InputStream is = conn.getInputStream();
|
||||
|
||||
DownloadResponse downloadResponse = DownloadResponseParser.parse(is);
|
||||
|
||||
return downloadResponse.getData(motor_id);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,139 +1,139 @@
|
||||
/*
|
||||
* The Alphanum Algorithm is an improved sorting algorithm for strings
|
||||
* containing numbers. Instead of sorting numbers in ASCII order like
|
||||
* a standard sort, this algorithm sorts numbers in numeric order.
|
||||
*
|
||||
* The Alphanum Algorithm is discussed at http://www.DaveKoelle.com
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Subsequently this code had been hacked up to make it genericized and support
|
||||
* folding upper/lower case.
|
||||
*/
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
import java.text.Collator;
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* This is an updated version with enhancements made by Daniel Migowski,
|
||||
* Andre Bogus, and David Koelle
|
||||
*
|
||||
* To convert to use Templates (Java 1.5+):
|
||||
* - Change "implements Comparator" to "implements Comparator<String>"
|
||||
* - Change "compare(Object o1, Object o2)" to "compare(String s1, String s2)"
|
||||
* - Remove the type checking and casting in compare().
|
||||
*
|
||||
* To use this class:
|
||||
* Use the static "sort" method from the java.util.Collections class:
|
||||
* Collections.sort(your list, new AlphanumComparator());
|
||||
*/
|
||||
public class AlphanumComparator implements Comparator<String>
|
||||
{
|
||||
|
||||
private static final Collator sorter = Collator.getInstance();
|
||||
static {
|
||||
sorter.setStrength(Collator.TERTIARY);
|
||||
sorter.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
|
||||
}
|
||||
|
||||
private final boolean isDigit(char ch)
|
||||
{
|
||||
return ch >= 48 && ch <= 57;
|
||||
}
|
||||
|
||||
/** Length of string is passed in for improved efficiency (only need to calculate it once) **/
|
||||
private final String getChunk(String s, int slength, int marker)
|
||||
{
|
||||
StringBuilder chunk = new StringBuilder();
|
||||
char c = s.charAt(marker);
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
if (isDigit(c))
|
||||
{
|
||||
while (marker < slength)
|
||||
{
|
||||
c = s.charAt(marker);
|
||||
if (!isDigit(c))
|
||||
break;
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
}
|
||||
} else
|
||||
{
|
||||
while (marker < slength)
|
||||
{
|
||||
c = s.charAt(marker);
|
||||
if (isDigit(c))
|
||||
break;
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
}
|
||||
}
|
||||
return chunk.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(String s1, String s2)
|
||||
{
|
||||
|
||||
int thisMarker = 0;
|
||||
int thatMarker = 0;
|
||||
int s1Length = s1.length();
|
||||
int s2Length = s2.length();
|
||||
|
||||
while (thisMarker < s1Length && thatMarker < s2Length)
|
||||
{
|
||||
String thisChunk = getChunk(s1, s1Length, thisMarker);
|
||||
thisMarker += thisChunk.length();
|
||||
|
||||
String thatChunk = getChunk(s2, s2Length, thatMarker);
|
||||
thatMarker += thatChunk.length();
|
||||
|
||||
// If both chunks contain numeric characters, sort them numerically
|
||||
int result = 0;
|
||||
if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0)))
|
||||
{
|
||||
// Simple chunk comparison by length.
|
||||
int thisChunkLength = thisChunk.length();
|
||||
result = thisChunkLength - thatChunk.length();
|
||||
// If equal, the first different number counts
|
||||
if (result == 0)
|
||||
{
|
||||
for (int i = 0; i < thisChunkLength; i++)
|
||||
{
|
||||
result = thisChunk.charAt(i) - thatChunk.charAt(i);
|
||||
if (result != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
result = sorter.compare(thisChunk, thatChunk);
|
||||
}
|
||||
|
||||
if (result != 0)
|
||||
return result;
|
||||
}
|
||||
|
||||
return s1Length - s2Length;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* The Alphanum Algorithm is an improved sorting algorithm for strings
|
||||
* containing numbers. Instead of sorting numbers in ASCII order like
|
||||
* a standard sort, this algorithm sorts numbers in numeric order.
|
||||
*
|
||||
* The Alphanum Algorithm is discussed at http://www.DaveKoelle.com
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Subsequently this code had been hacked up to make it genericized and support
|
||||
* folding upper/lower case.
|
||||
*/
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
import java.text.Collator;
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* This is an updated version with enhancements made by Daniel Migowski,
|
||||
* Andre Bogus, and David Koelle
|
||||
*
|
||||
* To convert to use Templates (Java 1.5+):
|
||||
* - Change "implements Comparator" to "implements Comparator<String>"
|
||||
* - Change "compare(Object o1, Object o2)" to "compare(String s1, String s2)"
|
||||
* - Remove the type checking and casting in compare().
|
||||
*
|
||||
* To use this class:
|
||||
* Use the static "sort" method from the java.util.Collections class:
|
||||
* Collections.sort(your list, new AlphanumComparator());
|
||||
*/
|
||||
public class AlphanumComparator implements Comparator<String>
|
||||
{
|
||||
|
||||
private static final Collator sorter = Collator.getInstance();
|
||||
static {
|
||||
sorter.setStrength(Collator.TERTIARY);
|
||||
sorter.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
|
||||
}
|
||||
|
||||
private final boolean isDigit(char ch)
|
||||
{
|
||||
return ch >= 48 && ch <= 57;
|
||||
}
|
||||
|
||||
/** Length of string is passed in for improved efficiency (only need to calculate it once) **/
|
||||
private final String getChunk(String s, int slength, int marker)
|
||||
{
|
||||
StringBuilder chunk = new StringBuilder();
|
||||
char c = s.charAt(marker);
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
if (isDigit(c))
|
||||
{
|
||||
while (marker < slength)
|
||||
{
|
||||
c = s.charAt(marker);
|
||||
if (!isDigit(c))
|
||||
break;
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
}
|
||||
} else
|
||||
{
|
||||
while (marker < slength)
|
||||
{
|
||||
c = s.charAt(marker);
|
||||
if (isDigit(c))
|
||||
break;
|
||||
chunk.append(c);
|
||||
marker++;
|
||||
}
|
||||
}
|
||||
return chunk.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(String s1, String s2)
|
||||
{
|
||||
|
||||
int thisMarker = 0;
|
||||
int thatMarker = 0;
|
||||
int s1Length = s1.length();
|
||||
int s2Length = s2.length();
|
||||
|
||||
while (thisMarker < s1Length && thatMarker < s2Length)
|
||||
{
|
||||
String thisChunk = getChunk(s1, s1Length, thisMarker);
|
||||
thisMarker += thisChunk.length();
|
||||
|
||||
String thatChunk = getChunk(s2, s2Length, thatMarker);
|
||||
thatMarker += thatChunk.length();
|
||||
|
||||
// If both chunks contain numeric characters, sort them numerically
|
||||
int result = 0;
|
||||
if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0)))
|
||||
{
|
||||
// Simple chunk comparison by length.
|
||||
int thisChunkLength = thisChunk.length();
|
||||
result = thisChunkLength - thatChunk.length();
|
||||
// If equal, the first different number counts
|
||||
if (result == 0)
|
||||
{
|
||||
for (int i = 0; i < thisChunkLength; i++)
|
||||
{
|
||||
result = thisChunk.charAt(i) - thatChunk.charAt(i);
|
||||
if (result != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
result = sorter.compare(thisChunk, thatChunk);
|
||||
}
|
||||
|
||||
if (result != 0)
|
||||
return result;
|
||||
}
|
||||
|
||||
return s1Length - s2Length;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,93 +1,93 @@
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class BuildProperties {
|
||||
|
||||
private static final Properties PROPERTIES;
|
||||
private static final String BUILD_VERSION;
|
||||
private static final String BUILD_COPYRIGHT;
|
||||
private static final String BUILD_SOURCE;
|
||||
private static final boolean DEFAULT_CHECK_UPDATES;
|
||||
private static final boolean DEFAULT_CHECK_BETA_UPDATES;
|
||||
|
||||
/**
|
||||
* Return the OpenRocket version number.
|
||||
*/
|
||||
public static String getVersion() {
|
||||
return BUILD_VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the OpenRocket build source (e.g. "default" or "Debian")
|
||||
*/
|
||||
public static String getBuildSource() {
|
||||
return BUILD_SOURCE;
|
||||
}
|
||||
|
||||
public static boolean getDefaultCheckUpdates() {
|
||||
return DEFAULT_CHECK_UPDATES;
|
||||
}
|
||||
|
||||
public static boolean getDefaultCheckBetaUpdates() {
|
||||
return DEFAULT_CHECK_BETA_UPDATES;
|
||||
}
|
||||
|
||||
public static String getCopyrightYear() {
|
||||
return BUILD_COPYRIGHT;
|
||||
}
|
||||
|
||||
static {
|
||||
try {
|
||||
InputStream is = BuildProperties.class.getClassLoader().getResourceAsStream("build.properties");
|
||||
if (is == null) {
|
||||
throw new MissingResourceException(
|
||||
"build.properties not found, distribution built wrong" +
|
||||
" classpath:" + System.getProperty("java.class.path"),
|
||||
"build.properties", "build.version");
|
||||
}
|
||||
|
||||
PROPERTIES = new Properties();
|
||||
PROPERTIES.load(is);
|
||||
is.close();
|
||||
|
||||
String version = PROPERTIES.getProperty("build.version");
|
||||
if (version == null) {
|
||||
throw new MissingResourceException(
|
||||
"build.version not found in property file",
|
||||
"build.properties", "build.version");
|
||||
}
|
||||
BUILD_VERSION = version.trim();
|
||||
|
||||
BUILD_SOURCE = PROPERTIES.getProperty("build.source");
|
||||
if (BUILD_SOURCE == null) {
|
||||
throw new MissingResourceException(
|
||||
"build.source not found in property file",
|
||||
"build.properties", "build.source");
|
||||
}
|
||||
|
||||
String value = PROPERTIES.getProperty("build.checkupdates");
|
||||
if (value != null)
|
||||
DEFAULT_CHECK_UPDATES = Boolean.parseBoolean(value);
|
||||
else
|
||||
DEFAULT_CHECK_UPDATES = true;
|
||||
|
||||
value = PROPERTIES.getProperty("build.checkbetaupdates");
|
||||
if (value != null)
|
||||
DEFAULT_CHECK_BETA_UPDATES = Boolean.parseBoolean(value);
|
||||
else
|
||||
DEFAULT_CHECK_BETA_UPDATES = true;
|
||||
|
||||
BUILD_COPYRIGHT = PROPERTIES.getProperty("build.copyright", "2021");
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new MissingResourceException(
|
||||
"Error reading build.properties",
|
||||
"build.properties", "build.version");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.MissingResourceException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class BuildProperties {
|
||||
|
||||
private static final Properties PROPERTIES;
|
||||
private static final String BUILD_VERSION;
|
||||
private static final String BUILD_COPYRIGHT;
|
||||
private static final String BUILD_SOURCE;
|
||||
private static final boolean DEFAULT_CHECK_UPDATES;
|
||||
private static final boolean DEFAULT_CHECK_BETA_UPDATES;
|
||||
|
||||
/**
|
||||
* Return the OpenRocket version number.
|
||||
*/
|
||||
public static String getVersion() {
|
||||
return BUILD_VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the OpenRocket build source (e.g. "default" or "Debian")
|
||||
*/
|
||||
public static String getBuildSource() {
|
||||
return BUILD_SOURCE;
|
||||
}
|
||||
|
||||
public static boolean getDefaultCheckUpdates() {
|
||||
return DEFAULT_CHECK_UPDATES;
|
||||
}
|
||||
|
||||
public static boolean getDefaultCheckBetaUpdates() {
|
||||
return DEFAULT_CHECK_BETA_UPDATES;
|
||||
}
|
||||
|
||||
public static String getCopyrightYear() {
|
||||
return BUILD_COPYRIGHT;
|
||||
}
|
||||
|
||||
static {
|
||||
try {
|
||||
InputStream is = BuildProperties.class.getClassLoader().getResourceAsStream("build.properties");
|
||||
if (is == null) {
|
||||
throw new MissingResourceException(
|
||||
"build.properties not found, distribution built wrong" +
|
||||
" classpath:" + System.getProperty("java.class.path"),
|
||||
"build.properties", "build.version");
|
||||
}
|
||||
|
||||
PROPERTIES = new Properties();
|
||||
PROPERTIES.load(is);
|
||||
is.close();
|
||||
|
||||
String version = PROPERTIES.getProperty("build.version");
|
||||
if (version == null) {
|
||||
throw new MissingResourceException(
|
||||
"build.version not found in property file",
|
||||
"build.properties", "build.version");
|
||||
}
|
||||
BUILD_VERSION = version.trim();
|
||||
|
||||
BUILD_SOURCE = PROPERTIES.getProperty("build.source");
|
||||
if (BUILD_SOURCE == null) {
|
||||
throw new MissingResourceException(
|
||||
"build.source not found in property file",
|
||||
"build.properties", "build.source");
|
||||
}
|
||||
|
||||
String value = PROPERTIES.getProperty("build.checkupdates");
|
||||
if (value != null)
|
||||
DEFAULT_CHECK_UPDATES = Boolean.parseBoolean(value);
|
||||
else
|
||||
DEFAULT_CHECK_UPDATES = true;
|
||||
|
||||
value = PROPERTIES.getProperty("build.checkbetaupdates");
|
||||
if (value != null)
|
||||
DEFAULT_CHECK_BETA_UPDATES = Boolean.parseBoolean(value);
|
||||
else
|
||||
DEFAULT_CHECK_BETA_UPDATES = true;
|
||||
|
||||
BUILD_COPYRIGHT = PROPERTIES.getProperty("build.copyright", "2021");
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new MissingResourceException(
|
||||
"Error reading build.properties",
|
||||
"build.properties", "build.version");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,69 +1,69 @@
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
public class Color {
|
||||
|
||||
public static Color BLACK = new Color(255,255,255);
|
||||
public static Color INVISIBLE = new Color(1, 1, 1, 0);
|
||||
public static Color DARK_RED = new Color(200, 0, 0);
|
||||
|
||||
private int red;
|
||||
private int green;
|
||||
private int blue;
|
||||
private int alpha;
|
||||
|
||||
public Color( int red, int green, int blue ) {
|
||||
this.red = red;
|
||||
this.green = green;
|
||||
this.blue = blue;
|
||||
this.alpha = 255;
|
||||
}
|
||||
|
||||
public Color( int red, int green, int blue, int alpha ) {
|
||||
this.red = red;
|
||||
this.green = green;
|
||||
this.blue = blue;
|
||||
this.alpha = alpha;
|
||||
}
|
||||
|
||||
public int getRed() {
|
||||
return red;
|
||||
}
|
||||
|
||||
public void setRed(int red) {
|
||||
this.red = red;
|
||||
}
|
||||
|
||||
public int getGreen() {
|
||||
return green;
|
||||
}
|
||||
|
||||
public void setGreen(int green) {
|
||||
this.green = green;
|
||||
}
|
||||
|
||||
public int getBlue() {
|
||||
return blue;
|
||||
}
|
||||
|
||||
public void setBlue(int blue) {
|
||||
this.blue = blue;
|
||||
}
|
||||
|
||||
public int getAlpha() {
|
||||
return alpha;
|
||||
}
|
||||
|
||||
public void setAlpha(int alpha) {
|
||||
this.alpha = alpha;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Color [r=" + red + ", g=" + green + ", b=" + blue + ", a=" + alpha + "]";
|
||||
}
|
||||
|
||||
public java.awt.Color toAWTColor() {
|
||||
return new java.awt.Color(red, green, blue, alpha);
|
||||
}
|
||||
|
||||
}
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
public class Color {
|
||||
|
||||
public static Color BLACK = new Color(255,255,255);
|
||||
public static Color INVISIBLE = new Color(1, 1, 1, 0);
|
||||
public static Color DARK_RED = new Color(200, 0, 0);
|
||||
|
||||
private int red;
|
||||
private int green;
|
||||
private int blue;
|
||||
private int alpha;
|
||||
|
||||
public Color( int red, int green, int blue ) {
|
||||
this.red = red;
|
||||
this.green = green;
|
||||
this.blue = blue;
|
||||
this.alpha = 255;
|
||||
}
|
||||
|
||||
public Color( int red, int green, int blue, int alpha ) {
|
||||
this.red = red;
|
||||
this.green = green;
|
||||
this.blue = blue;
|
||||
this.alpha = alpha;
|
||||
}
|
||||
|
||||
public int getRed() {
|
||||
return red;
|
||||
}
|
||||
|
||||
public void setRed(int red) {
|
||||
this.red = red;
|
||||
}
|
||||
|
||||
public int getGreen() {
|
||||
return green;
|
||||
}
|
||||
|
||||
public void setGreen(int green) {
|
||||
this.green = green;
|
||||
}
|
||||
|
||||
public int getBlue() {
|
||||
return blue;
|
||||
}
|
||||
|
||||
public void setBlue(int blue) {
|
||||
this.blue = blue;
|
||||
}
|
||||
|
||||
public int getAlpha() {
|
||||
return alpha;
|
||||
}
|
||||
|
||||
public void setAlpha(int alpha) {
|
||||
this.alpha = alpha;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Color [r=" + red + ", g=" + green + ", b=" + blue + ", a=" + alpha + "]";
|
||||
}
|
||||
|
||||
public java.awt.Color toAWTColor() {
|
||||
return new java.awt.Color(red, green, blue, alpha);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
import java.util.EventListener;
|
||||
import java.util.EventObject;
|
||||
|
||||
public interface StateChangeListener extends EventListener {
|
||||
|
||||
public void stateChanged( EventObject e );
|
||||
|
||||
}
|
||||
package net.sf.openrocket.util;
|
||||
|
||||
import java.util.EventListener;
|
||||
import java.util.EventObject;
|
||||
|
||||
public interface StateChangeListener extends EventListener {
|
||||
|
||||
public void stateChanged( EventObject e );
|
||||
|
||||
}
|
||||
|
||||
@ -1,40 +1,40 @@
|
||||
<engine-database>
|
||||
<engine-list>
|
||||
<engine FDiv="10" FFix="1" FStep="-1." Isp="71.7" Itot="2.32" Type="single-use" auto-calc-cg="1" auto-calc-mass="1" avgThrust="3.178" burn-time="0.73" cgDiv="10" cgFix="1" cgStep="-1." code="A8" delays="3,5" dia="18." exitDia="0." initWt="16.35" len="70." mDiv="10" mFix="1" mStep="-1." massFrac="20.18" mfg="Estes" peakThrust="9.73" propWt="3.3" tDiv="10" tFix="1" tStep="-1." throatDia="0.">
|
||||
<comments>Estes A8 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.
|
||||
</comments>
|
||||
<data>
|
||||
<eng-data cg="35." f="0." m="3.3" t="0."/>
|
||||
<eng-data cg="35." f="0.512" m="3.28507" t="0.041"/>
|
||||
<eng-data cg="35." f="2.115" m="3.20474" t="0.084"/>
|
||||
<eng-data cg="35." f="4.358" m="3.0068" t="0.127"/>
|
||||
<eng-data cg="35." f="6.794" m="2.6975" t="0.166"/>
|
||||
<eng-data cg="35." f="8.588" m="2.41309" t="0.192"/>
|
||||
<eng-data cg="35." f="9.294" m="2.23506" t="0.206"/>
|
||||
<eng-data cg="35." f="9.73" m="1.96448" t="0.226"/>
|
||||
<eng-data cg="35." f="8.845" m="1.83238" t="0.236"/>
|
||||
<eng-data cg="35." f="7.179" m="1.70703" t="0.247"/>
|
||||
<eng-data cg="35." f="5.063" m="1.58515" t="0.261"/>
|
||||
<eng-data cg="35." f="3.717" m="1.48525" t="0.277"/>
|
||||
<eng-data cg="35." f="3.205" m="1.3425" t="0.306"/>
|
||||
<eng-data cg="35." f="2.884" m="1.14764" t="0.351"/>
|
||||
<eng-data cg="35." f="2.499" m="0.94092" t="0.405"/>
|
||||
<eng-data cg="35." f="2.371" m="0.726196" t="0.467"/>
|
||||
<eng-data cg="35." f="2.307" m="0.509957" t="0.532"/>
|
||||
<eng-data cg="35." f="2.371" m="0.320333" t="0.589"/>
|
||||
<eng-data cg="35." f="2.371" m="0.175326" t="0.632"/>
|
||||
<eng-data cg="35." f="2.243" m="0.109701" t="0.652"/>
|
||||
<eng-data cg="35." f="1.794" m="0.0637665" t="0.668"/>
|
||||
<eng-data cg="35." f="1.153" m="0.0302344" t="0.684"/>
|
||||
<eng-data cg="35." f="0.448" m="0.00860204" t="0.703"/>
|
||||
<eng-data cg="35." f="0." m="0." t="0.73"/>
|
||||
</data>
|
||||
</engine>
|
||||
</engine-list>
|
||||
</engine-database>
|
||||
<engine-database>
|
||||
<engine-list>
|
||||
<engine FDiv="10" FFix="1" FStep="-1." Isp="71.7" Itot="2.32" Type="single-use" auto-calc-cg="1" auto-calc-mass="1" avgThrust="3.178" burn-time="0.73" cgDiv="10" cgFix="1" cgStep="-1." code="A8" delays="3,5" dia="18." exitDia="0." initWt="16.35" len="70." mDiv="10" mFix="1" mStep="-1." massFrac="20.18" mfg="Estes" peakThrust="9.73" propWt="3.3" tDiv="10" tFix="1" tStep="-1." throatDia="0.">
|
||||
<comments>Estes A8 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.
|
||||
</comments>
|
||||
<data>
|
||||
<eng-data cg="35." f="0." m="3.3" t="0."/>
|
||||
<eng-data cg="35." f="0.512" m="3.28507" t="0.041"/>
|
||||
<eng-data cg="35." f="2.115" m="3.20474" t="0.084"/>
|
||||
<eng-data cg="35." f="4.358" m="3.0068" t="0.127"/>
|
||||
<eng-data cg="35." f="6.794" m="2.6975" t="0.166"/>
|
||||
<eng-data cg="35." f="8.588" m="2.41309" t="0.192"/>
|
||||
<eng-data cg="35." f="9.294" m="2.23506" t="0.206"/>
|
||||
<eng-data cg="35." f="9.73" m="1.96448" t="0.226"/>
|
||||
<eng-data cg="35." f="8.845" m="1.83238" t="0.236"/>
|
||||
<eng-data cg="35." f="7.179" m="1.70703" t="0.247"/>
|
||||
<eng-data cg="35." f="5.063" m="1.58515" t="0.261"/>
|
||||
<eng-data cg="35." f="3.717" m="1.48525" t="0.277"/>
|
||||
<eng-data cg="35." f="3.205" m="1.3425" t="0.306"/>
|
||||
<eng-data cg="35." f="2.884" m="1.14764" t="0.351"/>
|
||||
<eng-data cg="35." f="2.499" m="0.94092" t="0.405"/>
|
||||
<eng-data cg="35." f="2.371" m="0.726196" t="0.467"/>
|
||||
<eng-data cg="35." f="2.307" m="0.509957" t="0.532"/>
|
||||
<eng-data cg="35." f="2.371" m="0.320333" t="0.589"/>
|
||||
<eng-data cg="35." f="2.371" m="0.175326" t="0.632"/>
|
||||
<eng-data cg="35." f="2.243" m="0.109701" t="0.652"/>
|
||||
<eng-data cg="35." f="1.794" m="0.0637665" t="0.668"/>
|
||||
<eng-data cg="35." f="1.153" m="0.0302344" t="0.684"/>
|
||||
<eng-data cg="35." f="0.448" m="0.00860204" t="0.703"/>
|
||||
<eng-data cg="35." f="0." m="0." t="0.73"/>
|
||||
</data>
|
||||
</engine>
|
||||
</engine-list>
|
||||
</engine-database>
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
D10 18 70 7 0.009800000000000001 0.0259 AT
|
||||
0.0070 23.0
|
||||
0.018 25.0
|
||||
0.027 20.25
|
||||
0.066 20.25
|
||||
0.073 18.5
|
||||
0.094 20.25
|
||||
0.112 20.75
|
||||
0.137 19.75
|
||||
0.163 21.5
|
||||
0.202 20.75
|
||||
0.231 20.75
|
||||
0.254 22.75
|
||||
0.27 20.75
|
||||
0.504 20.0
|
||||
0.536 18.25
|
||||
0.607 17.0
|
||||
0.687 14.75
|
||||
0.751 14.25
|
||||
0.84 11.25
|
||||
0.998 8.25
|
||||
1.024 8.25
|
||||
1.248 2.5
|
||||
1.385 0.0
|
||||
D10 18 70 7 0.009800000000000001 0.0259 AT
|
||||
0.0070 23.0
|
||||
0.018 25.0
|
||||
0.027 20.25
|
||||
0.066 20.25
|
||||
0.073 18.5
|
||||
0.094 20.25
|
||||
0.112 20.75
|
||||
0.137 19.75
|
||||
0.163 21.5
|
||||
0.202 20.75
|
||||
0.231 20.75
|
||||
0.254 22.75
|
||||
0.27 20.75
|
||||
0.504 20.0
|
||||
0.536 18.25
|
||||
0.607 17.0
|
||||
0.687 14.75
|
||||
0.751 14.25
|
||||
0.84 11.25
|
||||
0.998 8.25
|
||||
1.024 8.25
|
||||
1.248 2.5
|
||||
1.385 0.0
|
||||
|
||||
@ -1,52 +1,52 @@
|
||||
<engine-database>
|
||||
<engine-list>
|
||||
<engine mfg="Cesaroni Technology Inc." code="G115-13A" Type="reloadable" dia="38."
|
||||
len="127." initWt="195." propWt="61.8" delays="13" auto-calc-mass="1"
|
||||
auto-calc-cg="1" avgThrust="113.512" peakThrust="131.895" throatDia="0."
|
||||
exitDia="0." Itot="140.755" burn-time="1.24" massFrac="31.69" Isp="232.25"
|
||||
tDiv="10" tStep="-1." tFix="1" FDiv="10" FStep="-1." FFix="1" mDiv="10"
|
||||
mStep="-1." mFix="1" cgDiv="10" cgStep="-1." cgFix="1">
|
||||
<data>
|
||||
<eng-data t="0." f="0." m="61.8" cg="63.5"/>
|
||||
<eng-data t="0.00787402" f="10.3447" m="61.7821" cg="63.5"/>
|
||||
<eng-data t="0.0183727" f="117.671" m="61.4871" cg="63.5"/>
|
||||
<eng-data t="0.0209974" f="128.447" m="61.3453" cg="63.5"/>
|
||||
<eng-data t="0.0446194" f="131.895" m="59.9952" cg="63.5"/>
|
||||
<eng-data t="0.0577428" f="125.861" m="59.2526" cg="63.5"/>
|
||||
<eng-data t="0.0629921" f="119.395" m="58.97" cg="63.5"/>
|
||||
<eng-data t="0.0787402" f="113.792" m="58.1638" cg="63.5"/>
|
||||
<eng-data t="0.107612" f="115.947" m="56.7077" cg="63.5"/>
|
||||
<eng-data t="0.149606" f="118.964" m="54.542" cg="63.5"/>
|
||||
<eng-data t="0.188976" f="119.395" m="52.4819" cg="63.5"/>
|
||||
<eng-data t="0.233596" f="121.981" m="50.1176" cg="63.5"/>
|
||||
<eng-data t="0.278215" f="122.412" m="47.7237" cg="63.5"/>
|
||||
<eng-data t="0.322835" f="122.843" m="45.3213" cg="63.5"/>
|
||||
<eng-data t="0.380577" f="123.274" m="42.2014" cg="63.5"/>
|
||||
<eng-data t="0.440945" f="122.843" m="38.9398" cg="63.5"/>
|
||||
<eng-data t="0.480315" f="123.274" m="36.8126" cg="63.5"/>
|
||||
<eng-data t="0.540682" f="122.843" m="33.5509" cg="63.5"/>
|
||||
<eng-data t="0.590551" f="122.412" m="30.866" cg="63.5"/>
|
||||
<eng-data t="0.622047" f="120.688" m="29.1851" cg="63.5"/>
|
||||
<eng-data t="0.67979" f="120.257" m="26.1308" cg="63.5"/>
|
||||
<eng-data t="0.734908" f="119.395" m="23.231" cg="63.5"/>
|
||||
<eng-data t="0.790026" f="117.671" m="20.3625" cg="63.5"/>
|
||||
<eng-data t="0.845144" f="116.809" m="17.5253" cg="63.5"/>
|
||||
<eng-data t="0.88189" f="116.378" m="15.6442" cg="63.5"/>
|
||||
<eng-data t="0.929134" f="113.361" m="13.2615" cg="63.5"/>
|
||||
<eng-data t="0.979003" f="113.361" m="10.7794" cg="63.5"/>
|
||||
<eng-data t="1.0315" f="111.206" m="8.19152" cg="63.5"/>
|
||||
<eng-data t="1.07087" f="108.188" m="6.29532" cg="63.5"/>
|
||||
<eng-data t="1.11286" f="108.188" m="4.30052" cg="63.5"/>
|
||||
<eng-data t="1.16535" f="106.033" m="1.83186" cg="63.5"/>
|
||||
<eng-data t="1.18373" f="112.499" m="0.95044" cg="63.5"/>
|
||||
<eng-data t="1.18635" f="96.5506" m="0.829987" cg="63.5"/>
|
||||
<eng-data t="1.19685" f="81.0335" m="0.420696" cg="63.5"/>
|
||||
<eng-data t="1.2021" f="51.7235" m="0.267708" cg="63.5"/>
|
||||
<eng-data t="1.2126" f="30.172" m="0.0789575" cg="63.5"/>
|
||||
<eng-data t="1.21522" f="16.8101" m="0.0518866" cg="63.5"/>
|
||||
<eng-data t="1.21785" f="7.75853" m="0.0377303" cg="63.5"/>
|
||||
<eng-data t="1.24" f="0." m="0." cg="63.5"/>
|
||||
</data>
|
||||
</engine>
|
||||
</engine-list>
|
||||
</engine-database>
|
||||
<engine-database>
|
||||
<engine-list>
|
||||
<engine mfg="Cesaroni Technology Inc." code="G115-13A" Type="reloadable" dia="38."
|
||||
len="127." initWt="195." propWt="61.8" delays="13" auto-calc-mass="1"
|
||||
auto-calc-cg="1" avgThrust="113.512" peakThrust="131.895" throatDia="0."
|
||||
exitDia="0." Itot="140.755" burn-time="1.24" massFrac="31.69" Isp="232.25"
|
||||
tDiv="10" tStep="-1." tFix="1" FDiv="10" FStep="-1." FFix="1" mDiv="10"
|
||||
mStep="-1." mFix="1" cgDiv="10" cgStep="-1." cgFix="1">
|
||||
<data>
|
||||
<eng-data t="0." f="0." m="61.8" cg="63.5"/>
|
||||
<eng-data t="0.00787402" f="10.3447" m="61.7821" cg="63.5"/>
|
||||
<eng-data t="0.0183727" f="117.671" m="61.4871" cg="63.5"/>
|
||||
<eng-data t="0.0209974" f="128.447" m="61.3453" cg="63.5"/>
|
||||
<eng-data t="0.0446194" f="131.895" m="59.9952" cg="63.5"/>
|
||||
<eng-data t="0.0577428" f="125.861" m="59.2526" cg="63.5"/>
|
||||
<eng-data t="0.0629921" f="119.395" m="58.97" cg="63.5"/>
|
||||
<eng-data t="0.0787402" f="113.792" m="58.1638" cg="63.5"/>
|
||||
<eng-data t="0.107612" f="115.947" m="56.7077" cg="63.5"/>
|
||||
<eng-data t="0.149606" f="118.964" m="54.542" cg="63.5"/>
|
||||
<eng-data t="0.188976" f="119.395" m="52.4819" cg="63.5"/>
|
||||
<eng-data t="0.233596" f="121.981" m="50.1176" cg="63.5"/>
|
||||
<eng-data t="0.278215" f="122.412" m="47.7237" cg="63.5"/>
|
||||
<eng-data t="0.322835" f="122.843" m="45.3213" cg="63.5"/>
|
||||
<eng-data t="0.380577" f="123.274" m="42.2014" cg="63.5"/>
|
||||
<eng-data t="0.440945" f="122.843" m="38.9398" cg="63.5"/>
|
||||
<eng-data t="0.480315" f="123.274" m="36.8126" cg="63.5"/>
|
||||
<eng-data t="0.540682" f="122.843" m="33.5509" cg="63.5"/>
|
||||
<eng-data t="0.590551" f="122.412" m="30.866" cg="63.5"/>
|
||||
<eng-data t="0.622047" f="120.688" m="29.1851" cg="63.5"/>
|
||||
<eng-data t="0.67979" f="120.257" m="26.1308" cg="63.5"/>
|
||||
<eng-data t="0.734908" f="119.395" m="23.231" cg="63.5"/>
|
||||
<eng-data t="0.790026" f="117.671" m="20.3625" cg="63.5"/>
|
||||
<eng-data t="0.845144" f="116.809" m="17.5253" cg="63.5"/>
|
||||
<eng-data t="0.88189" f="116.378" m="15.6442" cg="63.5"/>
|
||||
<eng-data t="0.929134" f="113.361" m="13.2615" cg="63.5"/>
|
||||
<eng-data t="0.979003" f="113.361" m="10.7794" cg="63.5"/>
|
||||
<eng-data t="1.0315" f="111.206" m="8.19152" cg="63.5"/>
|
||||
<eng-data t="1.07087" f="108.188" m="6.29532" cg="63.5"/>
|
||||
<eng-data t="1.11286" f="108.188" m="4.30052" cg="63.5"/>
|
||||
<eng-data t="1.16535" f="106.033" m="1.83186" cg="63.5"/>
|
||||
<eng-data t="1.18373" f="112.499" m="0.95044" cg="63.5"/>
|
||||
<eng-data t="1.18635" f="96.5506" m="0.829987" cg="63.5"/>
|
||||
<eng-data t="1.19685" f="81.0335" m="0.420696" cg="63.5"/>
|
||||
<eng-data t="1.2021" f="51.7235" m="0.267708" cg="63.5"/>
|
||||
<eng-data t="1.2126" f="30.172" m="0.0789575" cg="63.5"/>
|
||||
<eng-data t="1.21522" f="16.8101" m="0.0518866" cg="63.5"/>
|
||||
<eng-data t="1.21785" f="7.75853" m="0.0377303" cg="63.5"/>
|
||||
<eng-data t="1.24" f="0." m="0." cg="63.5"/>
|
||||
</data>
|
||||
</engine>
|
||||
</engine-list>
|
||||
</engine-database>
|
||||
|
||||
@ -1,34 +1,34 @@
|
||||
package net.sf.openrocket.util.BaseTestCase;
|
||||
|
||||
import net.sf.openrocket.ServicesForTesting;
|
||||
import net.sf.openrocket.l10n.DebugTranslator;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.plugin.PluginModule;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.util.Modules;
|
||||
|
||||
public class BaseTestCase {
|
||||
|
||||
@BeforeClass
|
||||
public static void setUp() throws Exception {
|
||||
Module applicationModule = new ServicesForTesting();
|
||||
Module debugTranslator = new AbstractModule() {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(Translator.class).toInstance(new DebugTranslator(null));
|
||||
}
|
||||
|
||||
};
|
||||
Module pluginModule = new PluginModule();
|
||||
Injector injector = Guice.createInjector(Modules.override(applicationModule).with(debugTranslator), pluginModule);
|
||||
Application.setInjector(injector);
|
||||
}
|
||||
}
|
||||
package net.sf.openrocket.util.BaseTestCase;
|
||||
|
||||
import net.sf.openrocket.ServicesForTesting;
|
||||
import net.sf.openrocket.l10n.DebugTranslator;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.plugin.PluginModule;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.util.Modules;
|
||||
|
||||
public class BaseTestCase {
|
||||
|
||||
@BeforeClass
|
||||
public static void setUp() throws Exception {
|
||||
Module applicationModule = new ServicesForTesting();
|
||||
Module debugTranslator = new AbstractModule() {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(Translator.class).toInstance(new DebugTranslator(null));
|
||||
}
|
||||
|
||||
};
|
||||
Module pluginModule = new PluginModule();
|
||||
Injector injector = Guice.createInjector(Modules.override(applicationModule).with(debugTranslator), pluginModule);
|
||||
Application.setInjector(injector);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,143 +1,143 @@
|
||||
--Do not remove this if you are using--
|
||||
Original Author: Remiz Rahnas
|
||||
Original Author URL: http://www.htmlremix.com
|
||||
Published date: 2008/09/24
|
||||
|
||||
Changes by Nick Fetchak:
|
||||
- IE8 standards mode compatibility
|
||||
- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage
|
||||
Published date : 2009/11/18
|
||||
|
||||
|
||||
<public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />
|
||||
<script type="text/javascript">
|
||||
|
||||
// findPos() borrowed from http://www.quirksmode.org/js/findpos.html
|
||||
function findPos(obj) {
|
||||
var curleft = curtop = 0;
|
||||
|
||||
if (obj.offsetParent) {
|
||||
do {
|
||||
curleft += obj.offsetLeft;
|
||||
curtop += obj.offsetTop;
|
||||
} while (obj = obj.offsetParent);
|
||||
}
|
||||
|
||||
return({
|
||||
'x': curleft,
|
||||
'y': curtop
|
||||
});
|
||||
}
|
||||
|
||||
function oncontentready(classID) {
|
||||
if (this.className.match(classID)) { return(false); }
|
||||
|
||||
if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }
|
||||
|
||||
this.className = this.className.concat(' ', classID);
|
||||
var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||
|
||||
this.currentStyle['-webkit-border-radius'] ||
|
||||
this.currentStyle['border-radius'] ||
|
||||
this.currentStyle['-khtml-border-radius']) /
|
||||
Math.min(this.offsetWidth, this.offsetHeight), 1);
|
||||
var fillColor = this.currentStyle.backgroundColor;
|
||||
var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');
|
||||
var strokeColor = this.currentStyle.borderColor;
|
||||
var strokeWeight = parseInt(this.currentStyle.borderWidth);
|
||||
var stroked = 'true';
|
||||
if (isNaN(strokeWeight)) {
|
||||
strokeWeight = 0;
|
||||
strokeColor = fillColor;
|
||||
stroked = 'false';
|
||||
}
|
||||
|
||||
this.style.background = 'transparent';
|
||||
this.style.borderColor = 'transparent';
|
||||
|
||||
// Find which element provides position:relative for the target element (default to BODY)
|
||||
var el = this;
|
||||
var limit = 100, i = 0;
|
||||
while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {
|
||||
el = el.parentElement;
|
||||
i++;
|
||||
if (i >= limit) { return(false); }
|
||||
}
|
||||
var el_zindex = parseInt(el.currentStyle.zIndex);
|
||||
if (isNaN(el_zindex)) { el_zindex = 0; }
|
||||
//alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);
|
||||
|
||||
var rect_size = {
|
||||
'width': this.offsetWidth - strokeWeight,
|
||||
'height': this.offsetHeight - strokeWeight
|
||||
};
|
||||
var el_pos = findPos(el);
|
||||
var this_pos = findPos(this);
|
||||
this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;
|
||||
this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;
|
||||
|
||||
var rect = document.createElement('v:roundrect');
|
||||
rect.arcsize = arcSize +'px';
|
||||
rect.strokecolor = strokeColor;
|
||||
rect.strokeWeight = strokeWeight +'px';
|
||||
rect.stroked = stroked;
|
||||
rect.style.display = 'block';
|
||||
rect.style.position = 'absolute';
|
||||
rect.style.top = this_pos.y +'px';
|
||||
rect.style.left = this_pos.x +'px';
|
||||
rect.style.width = rect_size.width +'px';
|
||||
rect.style.height = rect_size.height +'px';
|
||||
rect.style.antialias = true;
|
||||
rect.style.zIndex = el_zindex - 1;
|
||||
|
||||
var fill = document.createElement('v:fill');
|
||||
fill.color = fillColor;
|
||||
fill.src = fillSrc;
|
||||
fill.type = 'tile';
|
||||
|
||||
rect.appendChild(fill);
|
||||
el.appendChild(rect);
|
||||
|
||||
var css = el.document.createStyleSheet();
|
||||
css.addRule("v\\:roundrect", "behavior: url(#default#VML)");
|
||||
css.addRule("v\\:fill", "behavior: url(#default#VML)");
|
||||
|
||||
isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
|
||||
// IE6 doesn't support transparent borders, use padding to offset original element
|
||||
if (isIE6 && (strokeWeight > 0)) {
|
||||
this.style.borderStyle = 'none';
|
||||
this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;
|
||||
this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;
|
||||
}
|
||||
|
||||
if (typeof(window.rounded_elements) == 'undefined') {
|
||||
window.rounded_elements = new Array();
|
||||
|
||||
if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }
|
||||
window.onresize = window_resize;
|
||||
}
|
||||
this.element.vml = rect;
|
||||
window.rounded_elements.push(this.element);
|
||||
}
|
||||
|
||||
function window_resize() {
|
||||
if (typeof(window.rounded_elements) == 'undefined') { return(false); }
|
||||
|
||||
for (var i in window.rounded_elements) {
|
||||
var el = window.rounded_elements[i];
|
||||
|
||||
var strokeWeight = parseInt(el.currentStyle.borderWidth);
|
||||
if (isNaN(strokeWeight)) { strokeWeight = 0; }
|
||||
|
||||
var parent_pos = findPos(el.vml.parentNode);
|
||||
var pos = findPos(el);
|
||||
pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;
|
||||
pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;
|
||||
|
||||
el.vml.style.top = pos.y +'px';
|
||||
el.vml.style.left = pos.x +'px';
|
||||
}
|
||||
|
||||
if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }
|
||||
}
|
||||
</script>
|
||||
|
||||
--Do not remove this if you are using--
|
||||
Original Author: Remiz Rahnas
|
||||
Original Author URL: http://www.htmlremix.com
|
||||
Published date: 2008/09/24
|
||||
|
||||
Changes by Nick Fetchak:
|
||||
- IE8 standards mode compatibility
|
||||
- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage
|
||||
Published date : 2009/11/18
|
||||
|
||||
|
||||
<public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />
|
||||
<script type="text/javascript">
|
||||
|
||||
// findPos() borrowed from http://www.quirksmode.org/js/findpos.html
|
||||
function findPos(obj) {
|
||||
var curleft = curtop = 0;
|
||||
|
||||
if (obj.offsetParent) {
|
||||
do {
|
||||
curleft += obj.offsetLeft;
|
||||
curtop += obj.offsetTop;
|
||||
} while (obj = obj.offsetParent);
|
||||
}
|
||||
|
||||
return({
|
||||
'x': curleft,
|
||||
'y': curtop
|
||||
});
|
||||
}
|
||||
|
||||
function oncontentready(classID) {
|
||||
if (this.className.match(classID)) { return(false); }
|
||||
|
||||
if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }
|
||||
|
||||
this.className = this.className.concat(' ', classID);
|
||||
var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||
|
||||
this.currentStyle['-webkit-border-radius'] ||
|
||||
this.currentStyle['border-radius'] ||
|
||||
this.currentStyle['-khtml-border-radius']) /
|
||||
Math.min(this.offsetWidth, this.offsetHeight), 1);
|
||||
var fillColor = this.currentStyle.backgroundColor;
|
||||
var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');
|
||||
var strokeColor = this.currentStyle.borderColor;
|
||||
var strokeWeight = parseInt(this.currentStyle.borderWidth);
|
||||
var stroked = 'true';
|
||||
if (isNaN(strokeWeight)) {
|
||||
strokeWeight = 0;
|
||||
strokeColor = fillColor;
|
||||
stroked = 'false';
|
||||
}
|
||||
|
||||
this.style.background = 'transparent';
|
||||
this.style.borderColor = 'transparent';
|
||||
|
||||
// Find which element provides position:relative for the target element (default to BODY)
|
||||
var el = this;
|
||||
var limit = 100, i = 0;
|
||||
while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {
|
||||
el = el.parentElement;
|
||||
i++;
|
||||
if (i >= limit) { return(false); }
|
||||
}
|
||||
var el_zindex = parseInt(el.currentStyle.zIndex);
|
||||
if (isNaN(el_zindex)) { el_zindex = 0; }
|
||||
//alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);
|
||||
|
||||
var rect_size = {
|
||||
'width': this.offsetWidth - strokeWeight,
|
||||
'height': this.offsetHeight - strokeWeight
|
||||
};
|
||||
var el_pos = findPos(el);
|
||||
var this_pos = findPos(this);
|
||||
this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;
|
||||
this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;
|
||||
|
||||
var rect = document.createElement('v:roundrect');
|
||||
rect.arcsize = arcSize +'px';
|
||||
rect.strokecolor = strokeColor;
|
||||
rect.strokeWeight = strokeWeight +'px';
|
||||
rect.stroked = stroked;
|
||||
rect.style.display = 'block';
|
||||
rect.style.position = 'absolute';
|
||||
rect.style.top = this_pos.y +'px';
|
||||
rect.style.left = this_pos.x +'px';
|
||||
rect.style.width = rect_size.width +'px';
|
||||
rect.style.height = rect_size.height +'px';
|
||||
rect.style.antialias = true;
|
||||
rect.style.zIndex = el_zindex - 1;
|
||||
|
||||
var fill = document.createElement('v:fill');
|
||||
fill.color = fillColor;
|
||||
fill.src = fillSrc;
|
||||
fill.type = 'tile';
|
||||
|
||||
rect.appendChild(fill);
|
||||
el.appendChild(rect);
|
||||
|
||||
var css = el.document.createStyleSheet();
|
||||
css.addRule("v\\:roundrect", "behavior: url(#default#VML)");
|
||||
css.addRule("v\\:fill", "behavior: url(#default#VML)");
|
||||
|
||||
isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
|
||||
// IE6 doesn't support transparent borders, use padding to offset original element
|
||||
if (isIE6 && (strokeWeight > 0)) {
|
||||
this.style.borderStyle = 'none';
|
||||
this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;
|
||||
this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;
|
||||
}
|
||||
|
||||
if (typeof(window.rounded_elements) == 'undefined') {
|
||||
window.rounded_elements = new Array();
|
||||
|
||||
if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }
|
||||
window.onresize = window_resize;
|
||||
}
|
||||
this.element.vml = rect;
|
||||
window.rounded_elements.push(this.element);
|
||||
}
|
||||
|
||||
function window_resize() {
|
||||
if (typeof(window.rounded_elements) == 'undefined') { return(false); }
|
||||
|
||||
for (var i in window.rounded_elements) {
|
||||
var el = window.rounded_elements[i];
|
||||
|
||||
var strokeWeight = parseInt(el.currentStyle.borderWidth);
|
||||
if (isNaN(strokeWeight)) { strokeWeight = 0; }
|
||||
|
||||
var parent_pos = findPos(el.vml.parentNode);
|
||||
var pos = findPos(el);
|
||||
pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;
|
||||
pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;
|
||||
|
||||
el.vml.style.top = pos.y +'px';
|
||||
el.vml.style.left = pos.x +'px';
|
||||
}
|
||||
|
||||
if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@ -1,116 +1,116 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Support and contact information</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_contact">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Support and contact information for OpenRocket</h1>
|
||||
<div class="content">
|
||||
<h2>Mailing lists</h2>
|
||||
<p>OpenRocket currently has two mailing lists for
|
||||
intrested users:</p>
|
||||
<dl>
|
||||
<dt>
|
||||
<a href="https://lists.sourceforge.net/lists/listinfo/openrocket-announce"><tt>OpenRocket-announce</tt></a>
|
||||
|
||||
<span class="note">(<a href="https://sourceforge.net/mailarchive/forum.php?forum_name=openrocket-announce">archives</a>)</span>
|
||||
</dt>
|
||||
<dd>Announcements of new OpenRocket versions and
|
||||
developments. This list is moderated.</dd>
|
||||
<dt>
|
||||
<a href="https://lists.sourceforge.net/lists/listinfo/openrocket-devel"><tt>OpenRocket-devel</tt></a>
|
||||
|
||||
<span class="note">(<a href="https://sourceforge.net/mailarchive/forum.php?forum_name=openrocket-devel">archives</a>)</span>
|
||||
</dt>
|
||||
<dd>Discussion related to OpenRocket development, documentation
|
||||
and upcoming features.</dd>
|
||||
</dl>
|
||||
<p>You are welcome to join the development mailing list if you are
|
||||
interested in contributing something to OpenRocket or simply want
|
||||
hear about and discuss future development. Note that support
|
||||
requests should be sent to the
|
||||
<a href="http://www.rocketryforum.com/forumdisplay.php?f=36">support
|
||||
forums</a> instead!</p>
|
||||
<p><strong>Unsubscribing</strong> from the lists can be performed
|
||||
in the above links as well. <em>Please do not send unsubscription
|
||||
requests to the list.</em></p>
|
||||
<h2>Support forums</h2>
|
||||
<p>The official support forum for OpenRocket is the
|
||||
<a href="http://www.rocketryforum.com/forumdisplay.php?f=36">Rocketry
|
||||
Electronics and Software forum</a> at
|
||||
<a href="http://www.rocketryforum.com/">The Rocketry Forum</a>.</p>
|
||||
<p>Please ask any questions on using OpenRocket on that forum,
|
||||
where others can answer as well and gain knowledge from the
|
||||
answers.</p>
|
||||
<h2 id="contact">Contact information</h2>
|
||||
<p>The main developer of OpenRocket is Sampo Niskanen. His contact
|
||||
information can be found below.</p>
|
||||
<p><strong><em>Support requests</em></strong> should be sent to
|
||||
the <a href="http://www.rocketryforum.com/forumdisplay.php?f=36">support
|
||||
forums</a>.<br/>
|
||||
<!-- <strong><em>Bug reports and feature requests</em></strong> should
|
||||
be <a href="report.html">reported separately</a>.</p> -->
|
||||
<p><strong>Email:</strong>
|
||||
<em>sam<span>po</span>.<span>niskanen</span><span>@i</span>ki.fi</em></p>
|
||||
<p><strong>WWW:</strong>
|
||||
<a href="http://www.iki.fi/sampo.niskanen/"
|
||||
title="Home page of Sampo Niskanen"><em>http://www.iki.fi/sampo.niskanen/</em></a></p>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Support and contact information</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_contact">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Support and contact information for OpenRocket</h1>
|
||||
<div class="content">
|
||||
<h2>Mailing lists</h2>
|
||||
<p>OpenRocket currently has two mailing lists for
|
||||
intrested users:</p>
|
||||
<dl>
|
||||
<dt>
|
||||
<a href="https://lists.sourceforge.net/lists/listinfo/openrocket-announce"><tt>OpenRocket-announce</tt></a>
|
||||
|
||||
<span class="note">(<a href="https://sourceforge.net/mailarchive/forum.php?forum_name=openrocket-announce">archives</a>)</span>
|
||||
</dt>
|
||||
<dd>Announcements of new OpenRocket versions and
|
||||
developments. This list is moderated.</dd>
|
||||
<dt>
|
||||
<a href="https://lists.sourceforge.net/lists/listinfo/openrocket-devel"><tt>OpenRocket-devel</tt></a>
|
||||
|
||||
<span class="note">(<a href="https://sourceforge.net/mailarchive/forum.php?forum_name=openrocket-devel">archives</a>)</span>
|
||||
</dt>
|
||||
<dd>Discussion related to OpenRocket development, documentation
|
||||
and upcoming features.</dd>
|
||||
</dl>
|
||||
<p>You are welcome to join the development mailing list if you are
|
||||
interested in contributing something to OpenRocket or simply want
|
||||
hear about and discuss future development. Note that support
|
||||
requests should be sent to the
|
||||
<a href="http://www.rocketryforum.com/forumdisplay.php?f=36">support
|
||||
forums</a> instead!</p>
|
||||
<p><strong>Unsubscribing</strong> from the lists can be performed
|
||||
in the above links as well. <em>Please do not send unsubscription
|
||||
requests to the list.</em></p>
|
||||
<h2>Support forums</h2>
|
||||
<p>The official support forum for OpenRocket is the
|
||||
<a href="http://www.rocketryforum.com/forumdisplay.php?f=36">Rocketry
|
||||
Electronics and Software forum</a> at
|
||||
<a href="http://www.rocketryforum.com/">The Rocketry Forum</a>.</p>
|
||||
<p>Please ask any questions on using OpenRocket on that forum,
|
||||
where others can answer as well and gain knowledge from the
|
||||
answers.</p>
|
||||
<h2 id="contact">Contact information</h2>
|
||||
<p>The main developer of OpenRocket is Sampo Niskanen. His contact
|
||||
information can be found below.</p>
|
||||
<p><strong><em>Support requests</em></strong> should be sent to
|
||||
the <a href="http://www.rocketryforum.com/forumdisplay.php?f=36">support
|
||||
forums</a>.<br/>
|
||||
<!-- <strong><em>Bug reports and feature requests</em></strong> should
|
||||
be <a href="report.html">reported separately</a>.</p> -->
|
||||
<p><strong>Email:</strong>
|
||||
<em>sam<span>po</span>.<span>niskanen</span><span>@i</span>ki.fi</em></p>
|
||||
<p><strong>WWW:</strong>
|
||||
<a href="http://www.iki.fi/sampo.niskanen/"
|
||||
title="Home page of Sampo Niskanen"><em>http://www.iki.fi/sampo.niskanen/</em></a></p>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,122 +1,122 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Documentation</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_documentation">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Documentation for OpenRocket</h1>
|
||||
<div class="content">
|
||||
<h2>User documentation</h2>
|
||||
<p>Unfortunately no user's guide currently exists for OpenRocket.
|
||||
Some documentation is available in the
|
||||
<a href="http://wiki.openrocket.info/">OpenRocket
|
||||
wiki pages</a>, including a stub
|
||||
<a href="http://wiki.openrocket.info/User%27s_Guide">User's
|
||||
guide</a> and a section of
|
||||
<a href="http://wiki.openrocket.info/FAQ">frequently
|
||||
asked questions</a>.</p>
|
||||
<p>If you would like to help, please extend the documentation!</p>
|
||||
<h2>Technical documentation</h2>
|
||||
<p>OpenRocket was originally written as the Master's thesis of
|
||||
Sampo Niskanen at Helsinki University of Technology. This thesis
|
||||
is being extended and updated as the OpenRocket technical
|
||||
documentation. Below is the latest technical documentation and
|
||||
the original Master's thesis.</p>
|
||||
<div class="separated">
|
||||
<p>
|
||||
<span class="licenseimage"><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="CC BY-SA" src="cc-by-sa-80x15.png" /></a></span>
|
||||
<a href="techdoc.pdf">OpenRocket technical documentation</a> (2013-05-10)
|
||||
<span class="note">(PDF 1.4MB)</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="licenseimage"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img alt="CC BY-NC-ND" src="cc-by-nc-nd-80x15.png" /></a></span>
|
||||
<a href="thesis.pdf">Development of an Open Source model rocket simulation software</a> (Master's thesis)
|
||||
<span class="note">(PDF 1.3MB)</span>
|
||||
</p>
|
||||
</div>
|
||||
<p>The technical documentation is licensed under a
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike License</a>
|
||||
while the Master's thesis is licensed under a
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-nd-nc/1.0/fi/deed.en">Attribution-NonCommercial-NoDerivs
|
||||
License</a>.
|
||||
</p>
|
||||
<p class="quote"><strong>Table of contents:</strong></p>
|
||||
<ol class="toc">
|
||||
<li>1. Introduction</li>
|
||||
<li>2. Basics of model rocket flight</li>
|
||||
<li>3. Aerodynamic properties of model rockets</li>
|
||||
<li>4. Flight simulation</li>
|
||||
<li>5. The OpenRocket simulation software</li>
|
||||
<li>6. Comparison with experimental data</li>
|
||||
<li>7. Conclusion</li>
|
||||
</ol>
|
||||
<ol class="toc">
|
||||
<li>A. Nose cone and transition geometries</li>
|
||||
<li>B. Transonic wave drag of nose cones</li>
|
||||
<li>C. Streamer drag coefficient estimation</li>
|
||||
</ol>
|
||||
<h2>Resources</h2>
|
||||
<p>A list of useful technical rocketry resources is available in
|
||||
the <a href="http://wiki.openrocket.info/Resources">"Resources"
|
||||
wiki page</a>, including links to Barrowman's original report and
|
||||
thesis, extensions for the Barrowman method, experimental rocket
|
||||
data etc.</p>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Documentation</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_documentation">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Documentation for OpenRocket</h1>
|
||||
<div class="content">
|
||||
<h2>User documentation</h2>
|
||||
<p>Unfortunately no user's guide currently exists for OpenRocket.
|
||||
Some documentation is available in the
|
||||
<a href="http://wiki.openrocket.info/">OpenRocket
|
||||
wiki pages</a>, including a stub
|
||||
<a href="http://wiki.openrocket.info/User%27s_Guide">User's
|
||||
guide</a> and a section of
|
||||
<a href="http://wiki.openrocket.info/FAQ">frequently
|
||||
asked questions</a>.</p>
|
||||
<p>If you would like to help, please extend the documentation!</p>
|
||||
<h2>Technical documentation</h2>
|
||||
<p>OpenRocket was originally written as the Master's thesis of
|
||||
Sampo Niskanen at Helsinki University of Technology. This thesis
|
||||
is being extended and updated as the OpenRocket technical
|
||||
documentation. Below is the latest technical documentation and
|
||||
the original Master's thesis.</p>
|
||||
<div class="separated">
|
||||
<p>
|
||||
<span class="licenseimage"><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="CC BY-SA" src="cc-by-sa-80x15.png" /></a></span>
|
||||
<a href="techdoc.pdf">OpenRocket technical documentation</a> (2013-05-10)
|
||||
<span class="note">(PDF 1.4MB)</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="licenseimage"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img alt="CC BY-NC-ND" src="cc-by-nc-nd-80x15.png" /></a></span>
|
||||
<a href="thesis.pdf">Development of an Open Source model rocket simulation software</a> (Master's thesis)
|
||||
<span class="note">(PDF 1.3MB)</span>
|
||||
</p>
|
||||
</div>
|
||||
<p>The technical documentation is licensed under a
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike License</a>
|
||||
while the Master's thesis is licensed under a
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-nd-nc/1.0/fi/deed.en">Attribution-NonCommercial-NoDerivs
|
||||
License</a>.
|
||||
</p>
|
||||
<p class="quote"><strong>Table of contents:</strong></p>
|
||||
<ol class="toc">
|
||||
<li>1. Introduction</li>
|
||||
<li>2. Basics of model rocket flight</li>
|
||||
<li>3. Aerodynamic properties of model rockets</li>
|
||||
<li>4. Flight simulation</li>
|
||||
<li>5. The OpenRocket simulation software</li>
|
||||
<li>6. Comparison with experimental data</li>
|
||||
<li>7. Conclusion</li>
|
||||
</ol>
|
||||
<ol class="toc">
|
||||
<li>A. Nose cone and transition geometries</li>
|
||||
<li>B. Transonic wave drag of nose cones</li>
|
||||
<li>C. Streamer drag coefficient estimation</li>
|
||||
</ol>
|
||||
<h2>Resources</h2>
|
||||
<p>A list of useful technical rocketry resources is available in
|
||||
the <a href="http://wiki.openrocket.info/Resources">"Resources"
|
||||
wiki page</a>, including links to Barrowman's original report and
|
||||
thesis, extensions for the Barrowman method, experimental rocket
|
||||
data etc.</p>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,156 +1,156 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Download</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_download">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Download OpenRocket</h1>
|
||||
<div class="content">
|
||||
<div class="news">
|
||||
<h2>Recent news:</h2>
|
||||
<p><span class="date">28.03.2015:</span> Version 15.03 is
|
||||
<a href="download.html">released</a>! This release contains scriptable simulation extensions and experimental support for tube fins along with many additional improvements.
|
||||
</p>
|
||||
<p><span class="date">02.11.2014:</span> Version 14.11 is
|
||||
<a href="download.html">released</a>! This release contains very few changes. Thrustcurves have been updated and now include AeroTech DMS motors. A few bugs have been fixed.
|
||||
</p>
|
||||
<p><span class="date">25.06.2014:</span> Version 14.06 is
|
||||
<a href="download.html">released</a>! This release contains very minimal changes. It fixes an annoying bug in tables that many people experience. A texture is added for Klima motors.
|
||||
</p>
|
||||
<p><span class="date">21.05.2014:</span> Version 14.05 is
|
||||
<a href="download.html">released</a>! This release contains some minor features,
|
||||
bug fixes and updated thrust curves. New motor vendors Klima and Southern
|
||||
Cross Rocketry are included. The simulation will now compute optimum delay based
|
||||
on actual coast time. Components with CG and mass overrides are decorated with
|
||||
an icon in the component tree.
|
||||
</p>
|
||||
<p><span class="date">21.03.2014:</span> Version 14.03 is
|
||||
<a href="download.html">released</a>! This release contains the
|
||||
new photo realistic renderer (in the Tools menu) which allows one to visualize
|
||||
the rocket in the air. There are various bug fixes in the configuration
|
||||
and motor selection windows as well.
|
||||
</p>
|
||||
</div>
|
||||
<div class="contentholder">
|
||||
<h2>Ready packages</h2>
|
||||
<p>These are packages ready for use and are the recommended
|
||||
download for normal users. They are pre-packaged with motor
|
||||
thrust curves from
|
||||
<a href="http://www.thrustcurve.org/">thrustcurve.org</a>.</p>
|
||||
<p>OpenRocket requires <strong>Java version 6</strong> or
|
||||
later. The Sun Java Runtime is recommended.</p>
|
||||
<h3>Desktop version</h3>
|
||||
<p>This is the latest version of the desktop version of
|
||||
OpenRocket. It contains the latest and greatest features, and
|
||||
runs on any system supporting Java.</p>
|
||||
<div class="left">
|
||||
<img src="java_logo.png" alt="" />
|
||||
</div>
|
||||
<div class="right support">
|
||||
<a href="http://sourceforge.net/donate/index.php?group_id=260357"><img src="project-support.jpg" width="88" height="32" alt="Support This Project" /></a>
|
||||
</div>
|
||||
<div class="downloadbox">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/OpenRocket-15.03.jar/download">
|
||||
<strong>Download now!</strong>
|
||||
<span>OpenRocket-15.03.jar</span>
|
||||
</a>
|
||||
<span class="alternative">
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/OpenRocket-15.03-src.zip/download">Source code</a>
|
||||
</span>
|
||||
</div>
|
||||
<p>OpenRocket can be started in most graphical environments (including
|
||||
Windows) by double-clicking the package icon. No installation is
|
||||
required.</p>
|
||||
<p>From the command line OpenRocket can be started by
|
||||
<span class="command">java -jar OpenRocket-15.03.jar</span></p>
|
||||
<h3>Android version</h3>
|
||||
<p>The Android version allows opening OpenRocket files, viewing
|
||||
simulations and motors. Later versions will allow running
|
||||
simulations as well.</p>
|
||||
<p>The Android version is thanks to the fantastic work by Kevin
|
||||
Ruland.</p>
|
||||
<div class="left">
|
||||
<img src="android_logo.png" alt="" />
|
||||
</div>
|
||||
<div class="instructions">
|
||||
<p>Installation:</p>
|
||||
<ol>
|
||||
<li>Go to <em>Settings</em> → <em>Applications</em> and
|
||||
check <em>Unknown sources</em>.</li>
|
||||
<li>Download <a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11/OpenRocket-Android-13.11.apk/download">OpenRocket-Android-13.11.apk</a>
|
||||
on your device and accept installation.</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<h2>Source code and older versions</h2>
|
||||
<p><strong>Source packages</strong> and older versions of
|
||||
OpenRocket are available in the
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/">SourceForge repository</a>.</p>
|
||||
<p>Alternatively, the most recent development version can be
|
||||
obtained from
|
||||
<a href="https://github.com/openrocket/openrocket/">GitHub</a>.
|
||||
The code can be retrieved using the command</p>
|
||||
<pre class="quote">$ git clone git://github.com/openrocket/openrocket.git</pre>
|
||||
<p>The above URL may be used to connect to the repository with
|
||||
other Git clients as well.</p>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Download</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_download">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Download OpenRocket</h1>
|
||||
<div class="content">
|
||||
<div class="news">
|
||||
<h2>Recent news:</h2>
|
||||
<p><span class="date">28.03.2015:</span> Version 15.03 is
|
||||
<a href="download.html">released</a>! This release contains scriptable simulation extensions and experimental support for tube fins along with many additional improvements.
|
||||
</p>
|
||||
<p><span class="date">02.11.2014:</span> Version 14.11 is
|
||||
<a href="download.html">released</a>! This release contains very few changes. Thrustcurves have been updated and now include AeroTech DMS motors. A few bugs have been fixed.
|
||||
</p>
|
||||
<p><span class="date">25.06.2014:</span> Version 14.06 is
|
||||
<a href="download.html">released</a>! This release contains very minimal changes. It fixes an annoying bug in tables that many people experience. A texture is added for Klima motors.
|
||||
</p>
|
||||
<p><span class="date">21.05.2014:</span> Version 14.05 is
|
||||
<a href="download.html">released</a>! This release contains some minor features,
|
||||
bug fixes and updated thrust curves. New motor vendors Klima and Southern
|
||||
Cross Rocketry are included. The simulation will now compute optimum delay based
|
||||
on actual coast time. Components with CG and mass overrides are decorated with
|
||||
an icon in the component tree.
|
||||
</p>
|
||||
<p><span class="date">21.03.2014:</span> Version 14.03 is
|
||||
<a href="download.html">released</a>! This release contains the
|
||||
new photo realistic renderer (in the Tools menu) which allows one to visualize
|
||||
the rocket in the air. There are various bug fixes in the configuration
|
||||
and motor selection windows as well.
|
||||
</p>
|
||||
</div>
|
||||
<div class="contentholder">
|
||||
<h2>Ready packages</h2>
|
||||
<p>These are packages ready for use and are the recommended
|
||||
download for normal users. They are pre-packaged with motor
|
||||
thrust curves from
|
||||
<a href="http://www.thrustcurve.org/">thrustcurve.org</a>.</p>
|
||||
<p>OpenRocket requires <strong>Java version 6</strong> or
|
||||
later. The Sun Java Runtime is recommended.</p>
|
||||
<h3>Desktop version</h3>
|
||||
<p>This is the latest version of the desktop version of
|
||||
OpenRocket. It contains the latest and greatest features, and
|
||||
runs on any system supporting Java.</p>
|
||||
<div class="left">
|
||||
<img src="java_logo.png" alt="" />
|
||||
</div>
|
||||
<div class="right support">
|
||||
<a href="http://sourceforge.net/donate/index.php?group_id=260357"><img src="project-support.jpg" width="88" height="32" alt="Support This Project" /></a>
|
||||
</div>
|
||||
<div class="downloadbox">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/OpenRocket-15.03.jar/download">
|
||||
<strong>Download now!</strong>
|
||||
<span>OpenRocket-15.03.jar</span>
|
||||
</a>
|
||||
<span class="alternative">
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/OpenRocket-15.03-src.zip/download">Source code</a>
|
||||
</span>
|
||||
</div>
|
||||
<p>OpenRocket can be started in most graphical environments (including
|
||||
Windows) by double-clicking the package icon. No installation is
|
||||
required.</p>
|
||||
<p>From the command line OpenRocket can be started by
|
||||
<span class="command">java -jar OpenRocket-15.03.jar</span></p>
|
||||
<h3>Android version</h3>
|
||||
<p>The Android version allows opening OpenRocket files, viewing
|
||||
simulations and motors. Later versions will allow running
|
||||
simulations as well.</p>
|
||||
<p>The Android version is thanks to the fantastic work by Kevin
|
||||
Ruland.</p>
|
||||
<div class="left">
|
||||
<img src="android_logo.png" alt="" />
|
||||
</div>
|
||||
<div class="instructions">
|
||||
<p>Installation:</p>
|
||||
<ol>
|
||||
<li>Go to <em>Settings</em> → <em>Applications</em> and
|
||||
check <em>Unknown sources</em>.</li>
|
||||
<li>Download <a href="https://sourceforge.net/projects/openrocket/files/openrocket/13.11/OpenRocket-Android-13.11.apk/download">OpenRocket-Android-13.11.apk</a>
|
||||
on your device and accept installation.</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<h2>Source code and older versions</h2>
|
||||
<p><strong>Source packages</strong> and older versions of
|
||||
OpenRocket are available in the
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/">SourceForge repository</a>.</p>
|
||||
<p>Alternatively, the most recent development version can be
|
||||
obtained from
|
||||
<a href="https://github.com/openrocket/openrocket/">GitHub</a>.
|
||||
The code can be retrieved using the command</p>
|
||||
<pre class="quote">$ git clone git://github.com/openrocket/openrocket.git</pre>
|
||||
<p>The above URL may be used to connect to the repository with
|
||||
other Git clients as well.</p>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,181 +1,181 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Features and screenshots</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_features">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Features of OpenRocket</h1>
|
||||
<div class="content">
|
||||
<h2>Current features</h2>
|
||||
<div class="screenshots">
|
||||
<div class="smallshotconst"><a href="shots/main.png">
|
||||
<img src="shots-small/main.jpg" alt="Main window" /><br/>
|
||||
The main rocket design window is used to design the rocket
|
||||
and it also provides information about a flight simulation
|
||||
in real-time.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dart.png">
|
||||
<img src="shots-small/dart.jpg" alt="Realistic 3D Rendering" /><br/>
|
||||
Paint and decals can be added and rendered in 3D.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-edit.png">
|
||||
<img src="shots-small/dialog-edit.jpg" alt="Component edit
|
||||
dialog" /><br/>
|
||||
The component shape and properties are defined in their own
|
||||
dialog.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-analysis.png">
|
||||
<img src="shots-small/dialog-analysis.jpg" alt="Analysis
|
||||
dialog" /><br/>
|
||||
You can analyze the effect of individual components on the
|
||||
stability, drag and roll characteristics of the rocket.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-plot-options.png">
|
||||
<img src="shots-small/dialog-plot-options.jpg"
|
||||
alt="Simulation plot options" /><br/>
|
||||
The simulation results can be plotted in a multitude
|
||||
of ways. You can either use the predefined plot
|
||||
configurations or define your own.<br/>
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-plot.png">
|
||||
<img src="shots-small/dialog-plot.jpg" alt="Simulation plot" /><br/>
|
||||
The simulations are plotted using the
|
||||
<em>JFreeChart</em> plotting library.
|
||||
</a></div>
|
||||
</div>
|
||||
<h3>General</h3>
|
||||
<ul>
|
||||
<li><strong>Fully cross-platform</strong>, written in Java</li>
|
||||
<li><strong>Fully documented</strong> <a href="documentation.html">simulation
|
||||
methods</a></li>
|
||||
<li><strong>Open Source</strong>, source code available under the
|
||||
<a href="license.html">GNU GPL</a></li>
|
||||
</ul>
|
||||
<h3>User interface</h3>
|
||||
<ul>
|
||||
<li><strong>Easy-to-use user interface</strong> for
|
||||
rocket design</li>
|
||||
<li><strong>Real-time view of CG and CP</strong> position</li>
|
||||
<li><strong>Real-time flight altitude, velocity and
|
||||
acceleration</strong> information from a continuous simulation
|
||||
performed in the background</li>
|
||||
<li>Zoomable schematic view of rocket from the side or rear,
|
||||
with rotation around the center axis</li>
|
||||
</ul>
|
||||
<h3>Design</h3>
|
||||
<ul>
|
||||
<li>A multitude of available components to
|
||||
choose from</li>
|
||||
<li><strong>Trapezoidal</strong>, <strong>elliptical</strong>
|
||||
and <strong>free-form fins</strong> supported</li>
|
||||
<li>Support for <strong>canted fins</strong> (roll
|
||||
stabilization)</li>
|
||||
<li><strong>Staging</strong> and <strong>clustering</strong> support</li>
|
||||
<li>Automatic calculation of component mass and CG based on
|
||||
shape and density</li>
|
||||
<li>Ability to <strong>override mass and CG</strong> of
|
||||
components or stages separately</li>
|
||||
</ul>
|
||||
<h3>Simulation and analysis</h3>
|
||||
<ul>
|
||||
<li>Full <strong>six degree of freedom</strong> simulation</li>
|
||||
<li>Rocket stability computed using <strong>extended Barrowman
|
||||
method</strong></li>
|
||||
<li><strong>Automatic design optimization</strong> — you
|
||||
can optimize any number of rocket parameters for flight
|
||||
altitude, maximum velocity or a number of other values</li>
|
||||
<li>Realistic wind modeling</li>
|
||||
<li>Analysis of the <strong>effect of separate
|
||||
components</strong> on the stability, drag and roll
|
||||
characteristics of the rocket</li>
|
||||
<li><strong>Fully configurable plotting</strong>, with
|
||||
various preset configurations</li>
|
||||
<li>Simulation data can be <strong>exported to
|
||||
<acronym title="Comma Separated Values">CSV</acronym>
|
||||
files</strong> for further analysis</li>
|
||||
<li><strong>Simulation listeners</strong> allowing custom-made
|
||||
code to interact with the rocket during flight simulation</li>
|
||||
</ul>
|
||||
<h2 id="future">Planned future features</h2>
|
||||
<p>OpenRocket is under constant work in the free time of the
|
||||
developers. You can have a sneak preview on what has been
|
||||
planned by checking the
|
||||
<a href="https://raw.github.com/openrocket/openrocket/master/core/TODO">TODO-file</a>
|
||||
on github.</p>
|
||||
<p>Below are a few major features that are under consideration:</p>
|
||||
<ul>
|
||||
<li>Aerodynamic computation using
|
||||
<acronym title="Computational Fluid Dynamics">CFD</acronym>
|
||||
<a href="getinvolved.html" class="help">(help needed!)</a></li>
|
||||
<li>Better support for supersonic simulation
|
||||
<a href="getinvolved.html" class="help">(help needed!)</a></li>
|
||||
<li>Customized support for hybrid rocket motors and water
|
||||
rockets</li>
|
||||
<li>Importing and plotting actual flight data from altimeters</li>
|
||||
<li>Rocket flight animation</li>
|
||||
<li>A "wizard" for creating new rocket designs</li>
|
||||
<li class="spacer">More ideas are listed in the
|
||||
<a href="https://raw.github.com/openrocket/openrocket/master/core/TODO">TODO-file</a>!</li>
|
||||
</ul>
|
||||
<p>If you want to help make OpenRocket the best rocket simulator,
|
||||
don't hesitate to <a href="getinvolved.html">Get involved!</a></p>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Features and screenshots</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_features">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Features of OpenRocket</h1>
|
||||
<div class="content">
|
||||
<h2>Current features</h2>
|
||||
<div class="screenshots">
|
||||
<div class="smallshotconst"><a href="shots/main.png">
|
||||
<img src="shots-small/main.jpg" alt="Main window" /><br/>
|
||||
The main rocket design window is used to design the rocket
|
||||
and it also provides information about a flight simulation
|
||||
in real-time.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dart.png">
|
||||
<img src="shots-small/dart.jpg" alt="Realistic 3D Rendering" /><br/>
|
||||
Paint and decals can be added and rendered in 3D.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-edit.png">
|
||||
<img src="shots-small/dialog-edit.jpg" alt="Component edit
|
||||
dialog" /><br/>
|
||||
The component shape and properties are defined in their own
|
||||
dialog.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-analysis.png">
|
||||
<img src="shots-small/dialog-analysis.jpg" alt="Analysis
|
||||
dialog" /><br/>
|
||||
You can analyze the effect of individual components on the
|
||||
stability, drag and roll characteristics of the rocket.
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-plot-options.png">
|
||||
<img src="shots-small/dialog-plot-options.jpg"
|
||||
alt="Simulation plot options" /><br/>
|
||||
The simulation results can be plotted in a multitude
|
||||
of ways. You can either use the predefined plot
|
||||
configurations or define your own.<br/>
|
||||
</a></div>
|
||||
<div class="smallshotconst"><a href="shots/dialog-plot.png">
|
||||
<img src="shots-small/dialog-plot.jpg" alt="Simulation plot" /><br/>
|
||||
The simulations are plotted using the
|
||||
<em>JFreeChart</em> plotting library.
|
||||
</a></div>
|
||||
</div>
|
||||
<h3>General</h3>
|
||||
<ul>
|
||||
<li><strong>Fully cross-platform</strong>, written in Java</li>
|
||||
<li><strong>Fully documented</strong> <a href="documentation.html">simulation
|
||||
methods</a></li>
|
||||
<li><strong>Open Source</strong>, source code available under the
|
||||
<a href="license.html">GNU GPL</a></li>
|
||||
</ul>
|
||||
<h3>User interface</h3>
|
||||
<ul>
|
||||
<li><strong>Easy-to-use user interface</strong> for
|
||||
rocket design</li>
|
||||
<li><strong>Real-time view of CG and CP</strong> position</li>
|
||||
<li><strong>Real-time flight altitude, velocity and
|
||||
acceleration</strong> information from a continuous simulation
|
||||
performed in the background</li>
|
||||
<li>Zoomable schematic view of rocket from the side or rear,
|
||||
with rotation around the center axis</li>
|
||||
</ul>
|
||||
<h3>Design</h3>
|
||||
<ul>
|
||||
<li>A multitude of available components to
|
||||
choose from</li>
|
||||
<li><strong>Trapezoidal</strong>, <strong>elliptical</strong>
|
||||
and <strong>free-form fins</strong> supported</li>
|
||||
<li>Support for <strong>canted fins</strong> (roll
|
||||
stabilization)</li>
|
||||
<li><strong>Staging</strong> and <strong>clustering</strong> support</li>
|
||||
<li>Automatic calculation of component mass and CG based on
|
||||
shape and density</li>
|
||||
<li>Ability to <strong>override mass and CG</strong> of
|
||||
components or stages separately</li>
|
||||
</ul>
|
||||
<h3>Simulation and analysis</h3>
|
||||
<ul>
|
||||
<li>Full <strong>six degree of freedom</strong> simulation</li>
|
||||
<li>Rocket stability computed using <strong>extended Barrowman
|
||||
method</strong></li>
|
||||
<li><strong>Automatic design optimization</strong> — you
|
||||
can optimize any number of rocket parameters for flight
|
||||
altitude, maximum velocity or a number of other values</li>
|
||||
<li>Realistic wind modeling</li>
|
||||
<li>Analysis of the <strong>effect of separate
|
||||
components</strong> on the stability, drag and roll
|
||||
characteristics of the rocket</li>
|
||||
<li><strong>Fully configurable plotting</strong>, with
|
||||
various preset configurations</li>
|
||||
<li>Simulation data can be <strong>exported to
|
||||
<acronym title="Comma Separated Values">CSV</acronym>
|
||||
files</strong> for further analysis</li>
|
||||
<li><strong>Simulation listeners</strong> allowing custom-made
|
||||
code to interact with the rocket during flight simulation</li>
|
||||
</ul>
|
||||
<h2 id="future">Planned future features</h2>
|
||||
<p>OpenRocket is under constant work in the free time of the
|
||||
developers. You can have a sneak preview on what has been
|
||||
planned by checking the
|
||||
<a href="https://raw.github.com/openrocket/openrocket/master/core/TODO">TODO-file</a>
|
||||
on github.</p>
|
||||
<p>Below are a few major features that are under consideration:</p>
|
||||
<ul>
|
||||
<li>Aerodynamic computation using
|
||||
<acronym title="Computational Fluid Dynamics">CFD</acronym>
|
||||
<a href="getinvolved.html" class="help">(help needed!)</a></li>
|
||||
<li>Better support for supersonic simulation
|
||||
<a href="getinvolved.html" class="help">(help needed!)</a></li>
|
||||
<li>Customized support for hybrid rocket motors and water
|
||||
rockets</li>
|
||||
<li>Importing and plotting actual flight data from altimeters</li>
|
||||
<li>Rocket flight animation</li>
|
||||
<li>A "wizard" for creating new rocket designs</li>
|
||||
<li class="spacer">More ideas are listed in the
|
||||
<a href="https://raw.github.com/openrocket/openrocket/master/core/TODO">TODO-file</a>!</li>
|
||||
</ul>
|
||||
<p>If you want to help make OpenRocket the best rocket simulator,
|
||||
don't hesitate to <a href="getinvolved.html">Get involved!</a></p>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,134 +1,134 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Get involved!</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_getinvolved">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Get involved in OpenRocket development</h1>
|
||||
<div class="content">
|
||||
<h2>How can I help OpenRocket?</h2>
|
||||
<p>OpenRocket is an Open Source project, meaning that the source
|
||||
code is freely available and anybody can help make the software
|
||||
better. The program is mainly developed by Sampo Niskanen in
|
||||
his free time. Help is very much appreciated. You don't even
|
||||
need coding skills, as there are other things to do as well.</p>
|
||||
<p>Below are a few suggestions of areas that would need help. If
|
||||
you'd like to participate, please
|
||||
<a href="https://lists.sourceforge.net/lists/listinfo/openrocket-devel">join
|
||||
the development mailing list</a> and introduce your ideas there.</p>
|
||||
<ul class="spacing">
|
||||
<li><a href="#development">Java development</a></li>
|
||||
<li><a href="#aerodynamics">Aerodynamic computation methods</a></li>
|
||||
<li><a href="#documentation">Documentation</a></li>
|
||||
<li><a href="#other">Other</a></li>
|
||||
</ul>
|
||||
<h3 id="development">Java development</h3>
|
||||
<p>Below are a few ideas about what kind of input developers can
|
||||
provide or features that could be implemented. For more
|
||||
information see the feature roadmap in the distribution
|
||||
<a href="http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/TODO">TODO-file</a>.</p>
|
||||
<ul>
|
||||
<li>3D visualization of the rocket during design and flight
|
||||
<span class="note"><em>(Help needed!)</em></span>
|
||||
</li>
|
||||
<li>Printing of designs, simulation results, fin planforms
|
||||
etc</li>
|
||||
<li>Memory profiling and leakage reduction</li>
|
||||
<li>Writing RockSim design files</li>
|
||||
<li>UI enhancements, for example zooming plots etc.</li>
|
||||
</ul>
|
||||
<h3 id="aerodynamics">Aerodynamic computation methods</h3>
|
||||
<p>There is still work to be done in the aerodynamic computation
|
||||
methods of OpenRocket. At least the following items need
|
||||
help. I will gladly provide help in creating and even
|
||||
implementing the computational methods.</p>
|
||||
<ul>
|
||||
<li>Simulating rockets at supersonic velocities (drag
|
||||
coefficient and CG position).</li>
|
||||
<li>Support for external pods and tube fins</li>
|
||||
<li><acronym title="Computational Fluid Dynamics">CFD</acronym>
|
||||
methods for simulation</li>
|
||||
</ul>
|
||||
<h3 id="documentation">Documentation tasks</h3>
|
||||
<p>Contributions to the
|
||||
<a href="http://wiki.openrocket.info/User%27s_Guide">OpenRocket
|
||||
User's guide</a> are dearly needed. Below are examples of
|
||||
topics.</p>
|
||||
<ul>
|
||||
<li>Getting started guide</li>
|
||||
<li>How to make staged and clustered designs</li>
|
||||
<li>Using mass/CG overrides for simulation accuracy</li>
|
||||
<li>Using simulations</li>
|
||||
<li>Effect of the simulation parameters</li>
|
||||
<li>Simulation method limitations</li>
|
||||
<li>Using simulation listeners (including examples)</li>
|
||||
</ul>
|
||||
<h3 id="other">Other</h3>
|
||||
<ul>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translating OpenRocket</a> to your language</li>
|
||||
<li>Creating good and interesting example designs that
|
||||
demonstrate some OpenRocket features.</li>
|
||||
<li>Hosting a place to share rocket designs with other
|
||||
enthusiasts.</li>
|
||||
<li>Giving input and suggestions on how to make OpenRocket
|
||||
better.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket — Get involved!</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_getinvolved">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Get involved in OpenRocket development</h1>
|
||||
<div class="content">
|
||||
<h2>How can I help OpenRocket?</h2>
|
||||
<p>OpenRocket is an Open Source project, meaning that the source
|
||||
code is freely available and anybody can help make the software
|
||||
better. The program is mainly developed by Sampo Niskanen in
|
||||
his free time. Help is very much appreciated. You don't even
|
||||
need coding skills, as there are other things to do as well.</p>
|
||||
<p>Below are a few suggestions of areas that would need help. If
|
||||
you'd like to participate, please
|
||||
<a href="https://lists.sourceforge.net/lists/listinfo/openrocket-devel">join
|
||||
the development mailing list</a> and introduce your ideas there.</p>
|
||||
<ul class="spacing">
|
||||
<li><a href="#development">Java development</a></li>
|
||||
<li><a href="#aerodynamics">Aerodynamic computation methods</a></li>
|
||||
<li><a href="#documentation">Documentation</a></li>
|
||||
<li><a href="#other">Other</a></li>
|
||||
</ul>
|
||||
<h3 id="development">Java development</h3>
|
||||
<p>Below are a few ideas about what kind of input developers can
|
||||
provide or features that could be implemented. For more
|
||||
information see the feature roadmap in the distribution
|
||||
<a href="http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/TODO">TODO-file</a>.</p>
|
||||
<ul>
|
||||
<li>3D visualization of the rocket during design and flight
|
||||
<span class="note"><em>(Help needed!)</em></span>
|
||||
</li>
|
||||
<li>Printing of designs, simulation results, fin planforms
|
||||
etc</li>
|
||||
<li>Memory profiling and leakage reduction</li>
|
||||
<li>Writing RockSim design files</li>
|
||||
<li>UI enhancements, for example zooming plots etc.</li>
|
||||
</ul>
|
||||
<h3 id="aerodynamics">Aerodynamic computation methods</h3>
|
||||
<p>There is still work to be done in the aerodynamic computation
|
||||
methods of OpenRocket. At least the following items need
|
||||
help. I will gladly provide help in creating and even
|
||||
implementing the computational methods.</p>
|
||||
<ul>
|
||||
<li>Simulating rockets at supersonic velocities (drag
|
||||
coefficient and CG position).</li>
|
||||
<li>Support for external pods and tube fins</li>
|
||||
<li><acronym title="Computational Fluid Dynamics">CFD</acronym>
|
||||
methods for simulation</li>
|
||||
</ul>
|
||||
<h3 id="documentation">Documentation tasks</h3>
|
||||
<p>Contributions to the
|
||||
<a href="http://wiki.openrocket.info/User%27s_Guide">OpenRocket
|
||||
User's guide</a> are dearly needed. Below are examples of
|
||||
topics.</p>
|
||||
<ul>
|
||||
<li>Getting started guide</li>
|
||||
<li>How to make staged and clustered designs</li>
|
||||
<li>Using mass/CG overrides for simulation accuracy</li>
|
||||
<li>Using simulations</li>
|
||||
<li>Effect of the simulation parameters</li>
|
||||
<li>Simulation method limitations</li>
|
||||
<li>Using simulation listeners (including examples)</li>
|
||||
</ul>
|
||||
<h3 id="other">Other</h3>
|
||||
<ul>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translating OpenRocket</a> to your language</li>
|
||||
<li>Creating good and interesting example designs that
|
||||
demonstrate some OpenRocket features.</li>
|
||||
<li>Hosting a place to share rocket designs with other
|
||||
enthusiasts.</li>
|
||||
<li>Giving input and suggestions on how to make OpenRocket
|
||||
better.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,342 +1,342 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_index">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>OpenRocket — an Open Source model rocket simulator</h1>
|
||||
<div class="content">
|
||||
<h2>Introduction</h2>
|
||||
<div class="rightpane">
|
||||
<div class="downloadbox">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/OpenRocket-15.03.jar/download">
|
||||
<strong>Download now!</strong>
|
||||
<span>OpenRocket-15.03.jar</span>
|
||||
</a>
|
||||
<span class="alternative">
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="download.html">Other versions</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="screenshot">
|
||||
<a href="shots/main.png"><img src="shots-small/main.jpg" alt="Main window" /></a>
|
||||
<a href="features.html">
|
||||
More screenshots...
|
||||
</a>
|
||||
</div>
|
||||
<div class="support">
|
||||
<a href="http://sourceforge.net/donate/index.php?group_id=260357"><img src="project-support.jpg" width="88" height="32" alt="Support This Project" /> </a>
|
||||
</div>
|
||||
<div class="support">
|
||||
<a href="http://www.yourkit.com/java/profiler/index.jsp"><img src="yourkit.png" width="88" height="32" alt="YourKit Supports This Project" /> </a>
|
||||
</div>
|
||||
</div>
|
||||
<p><strong>OpenRocket</strong> is a free, fully featured model
|
||||
rocket simulator that allows you to design and simulate your
|
||||
rockets before actually building and flying them.</p>
|
||||
<p>The main features include:</p>
|
||||
<ul>
|
||||
<li>Six-degree-of-freedom flight simulation</li>
|
||||
<li>Automatic design optimization</li>
|
||||
<li>Realtime simulated altitude, velocity and acceleration display</li>
|
||||
<li>Staging and clustering support</li>
|
||||
<li>Cross-platform (Java-based)</li>
|
||||
</ul>
|
||||
<p>Read more about its <a
|
||||
href="features.html">features and see screenshots</a>.
|
||||
</p>
|
||||
<p>OpenRocket is an Open Source project licensed under the
|
||||
<a href="license.html">GNU GPL</a>. This means that the
|
||||
software is free to use for whatever purposes, and the source
|
||||
code is also available for studying and extending.
|
||||
</p>
|
||||
<p>OpenRocket needs help to become even better. Implementing
|
||||
features, writing documentation and creating example designs are
|
||||
just a few ways of helping. If you are interested in helping
|
||||
make OpenRocket the best rocket simulator out there, please
|
||||
<a href="getinvolved.html"><em>Get involved!</em></a>
|
||||
</p>
|
||||
<p>YourKit is supporting OpenRocket open source project with its
|
||||
full-featured Java Profiler.
|
||||
YourKit, LLC is the creator of innovative and intelligent tools for profiling
|
||||
Java and .NET applications. Take a look at YourKit's leading software products:
|
||||
<a href="http://www.yourkit.com/java/profiler/index.jsp">YourKit Java
|
||||
Profiler</a> and
|
||||
<a href="http://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET
|
||||
Profiler</a>.
|
||||
</p>
|
||||
<div class="clear"></div>
|
||||
<div class="news">
|
||||
<h2>News</h2>
|
||||
<p><span class="date">28.03.2015:</span> Version 15.03 is
|
||||
<a href="download.html">released</a>! This release contains scriptable simulation extensions and experimental support for tube fins along with many additional improvements.
|
||||
</p>
|
||||
<p><span class="date">02.11.2014:</span> Version 14.11 is
|
||||
<a href="download.html">released</a>! This release contains very few changes. Thrustcurves have been updated and now include AeroTech DMS motors. A few bugs have been fixed.
|
||||
</p>
|
||||
<p><span class="date">25.06.2014:</span> Version 14.06 is
|
||||
<a href="download.html">released</a>! This release contains very minimal changes. It fixes an annoying bug in tables that many people experience. A texture is added for Klima motors.
|
||||
</p>
|
||||
<p><span class="date">21.05.2014:</span> Version 14.05 is
|
||||
<a href="download.html">released</a>! This release contains some minor features,
|
||||
bug fixes and updated thrust curves. New motor vendors Klima and Southern
|
||||
Cross Rocketry are included. The simulation will now compute optimum delay based
|
||||
on actual coast time. Components with CG and mass overrides are decorated with
|
||||
an icon in the component tree.
|
||||
</p>
|
||||
<p><span class="date">21.03.2014:</span> Version 14.03 is
|
||||
<a href="download.html">released</a>! This release contains the
|
||||
new photo realistic renderer (in the Tools menu) which allows one to visualize
|
||||
the rocket in the air. There are various bug fixes in the configuration
|
||||
and motor selection windows as well.
|
||||
</p>
|
||||
<p><span class="date">01.01.2014:</span> Version 13.11.2 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes,
|
||||
usability improvements, and layout fixes.
|
||||
</p>
|
||||
<p><span class="date">15.11.2013:</span> Version 13.11.1 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes
|
||||
including fixing Tube Coupler configuration, various exceptions in
|
||||
the flight configuration tab, updated 3d libraris (which didn't really make
|
||||
it into previous versions).</p>
|
||||
<p><span class="date">8.11.2013:</span> Version 13.11 is
|
||||
<a href="download.html">released</a>! This release simplifies
|
||||
flight configurations by replacing the dialog with the configuration
|
||||
tab. Motor filtering in the motor chooser dialog has been enhanced.
|
||||
Chineese translations have been added and Russian translations updated.
|
||||
Updated the 3D libraries, and squashed some bugs introduced by Java 1.7.0_45-b18.</p>
|
||||
<p><span class="date">6.10.2013:</span> Version 13.09.1 is
|
||||
<a href="download.html">released</a>! This is a bug-fix release,
|
||||
and includes updated 3D libraries and new thrust curves for
|
||||
Aerotech C3 and D2.</p>
|
||||
<p><span class="date">8.9.2013:</span> Version 13.09 is
|
||||
<a href="download.html">released</a>! This release contains
|
||||
numerous bug fixes, updated 3D JOGL libraries, and separated
|
||||
simulation edit and plot dialogs.</p>
|
||||
<p><span class="date">4.5.2013:</span> Version 13.05 is
|
||||
<a href="download.html">released</a>! This release contains a huge
|
||||
number of improvements, the main ones including realistic 3D
|
||||
rendering with decals, flight configurations, lower stage descent
|
||||
simulation, boosted dart support and new translations for
|
||||
Portuguese and Japanese. These are thanks to many
|
||||
contributors.</p>
|
||||
<p>Version 13.05 also changes the file format to be ZIP-based.
|
||||
Versions earlier than 12.03 will not be able to read files saved
|
||||
by this version.</p>
|
||||
<p><span class="date">28.9.2012:</span> Version 12.09.1 is
|
||||
<a href="download.html">released</a>! This is a bug-fix release,
|
||||
fixing numerous bugs introduced in 12.09. The only new feature is
|
||||
the option to automatically open the latest design file on startup
|
||||
(in <em>Edit</em> → <em>Preferences</em> → <em>Options</em>).
|
||||
<p><span class="date">23.9.2012:</span> Version 12.09 for Android is
|
||||
<a href="download.html">released</a>! The major improvement is the
|
||||
possibility to edit simulation parameters, thanks to work by Kevin
|
||||
Ruland.</p>
|
||||
<p><span class="date">16.9.2012:</span> Version 12.09 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version contains a huge number of new features by many contributors:</p>
|
||||
<ul>
|
||||
<li>3D rocket design view</li>
|
||||
<li>Component Presets</li>
|
||||
<li>Custom expressions in simulations</li>
|
||||
<li>Printing for centering ring and clustered centering ring components</li>
|
||||
<li>Support simple arthmatic in dimension entry</li>
|
||||
<li>Support deploying recovery device at stage separation</li>
|
||||
<li>Support for fractional inches (1/64) for unit length</li>
|
||||
<li>Added preference for windspeed units separately</li>
|
||||
<li>Added "most recently used files" in File Menu</li>
|
||||
<li>Improved printed accurracy in fin marking guide</li>
|
||||
<li>Calibration rulers added to printed templates</li>
|
||||
<li>Translations in Czech and Polish, numerous updates</li>
|
||||
</ul>
|
||||
<p><span class="date">10.3.2012:</span> Version 12.03 for desktop
|
||||
and Android is <a href="download.html">released</a>!</p>
|
||||
<p>In this release the version numbering scheme has been changed.
|
||||
From now on the version number is <em>YY.MM</em> indicating the
|
||||
year and month of the release. Bug fix releases are indicated by
|
||||
an added "<em>.1</em>".</p>
|
||||
<p>This also marks the first release for Android devices. In this
|
||||
first release you can open files and examine existing simulations,
|
||||
stability data and motor files. The Android port is thanks to
|
||||
work by Kevin Ruland.</p>
|
||||
<p>Enhancements in the desktop version include saving designs in RKT
|
||||
format thanks to Doug Pedrick, freeform fin set import form images
|
||||
by Jason Blood, configurable stage separation
|
||||
events, guided help tours and displaying the computed motor
|
||||
designation class. The application has also been translated to
|
||||
Italian by Mauro Biasutti and Russian by the Sky Dart Team.</p>
|
||||
<p><span class="date">24.11.2011:</span> Version 1.1.9 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>For this version Richard Graham has implemented geodetic
|
||||
computation methods, which take into account the curvature of the
|
||||
Earth and the coriolis effect. The computation method is selected
|
||||
by the <em>Geodetic calculations</em> option in the simulation
|
||||
options. It's not <em>(yet)</em> a full spherical computation model, but
|
||||
should be accurate enough for almost all sub-orbital needs.</p>
|
||||
<p>Doug Pedrick has also enhanced the printing system with the
|
||||
ability to print fin positioning guides, transition templates and
|
||||
nose cone profiles. Other smaller enhancements and bug fixes are
|
||||
also included.</p>
|
||||
<p><span class="date">25.8.2011:</span> Version 1.1.8 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release contains bug fixes to the optimization methods.
|
||||
It also contains a workaround to a JRE bug that prevents running
|
||||
OpenRocket on some builds of Java 7.</p>
|
||||
<p>The web pages have also been somewhat updated and Boris du Reau has
|
||||
created <a href="http://openrocket.trans.free.fr/">a separate site</a>
|
||||
for coordinating the localization efforts for OpenRocket.</p>
|
||||
<p><span class="date">12.8.2011:</span> Version 1.1.7 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes automatic rocket design optimization
|
||||
support (<em>Analyze</em> → <em>Rocket optimization</em>).
|
||||
You can optimize any amount of rocket parameters for apogee
|
||||
altitude, maximum velocity or a number of different values.</p>
|
||||
<p>While the automatic optimization is a powerful tool, it is very
|
||||
easy to optimize against particulars of the simulation methods,
|
||||
instead of true physical phenomena. Always keep common sense at
|
||||
hand and take the results with a grain of salt.</p>
|
||||
<p><span class="date">22.7.2011:</span> Version 1.1.6 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes initial localization support and
|
||||
translations to French, German and Spanish. This is thanks to the
|
||||
great work of Boris du Reau, and the teams from Tripoli France,
|
||||
Tripoli Spain and ERIG e.V. If you prefer to use some other
|
||||
language than the system default, you can select the language on
|
||||
the "Options" tab of the preferences dialog.</p>
|
||||
<p>The release also includes design scaling support and numerous bug
|
||||
fixes.</p>
|
||||
<p><span class="date">10.6.2011:</span> Version 1.1.5 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes updates to the printing system which fixes
|
||||
printing on Windows.</p>
|
||||
<p><span class="date">5.3.2011:</span> Version 1.1.4 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes initial printing support, thanks to Doug
|
||||
Pedrick. Printing still has a few issues on some platforms.
|
||||
Various bugs have also been fixed.</p>
|
||||
<p><span class="date">6.10.2010:</span> Version 1.1.3 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes support for moving and copying components
|
||||
in the component tree using drag-and-drop. Use normal DnD for
|
||||
moving, and control-drag for copy. This release also fixes a
|
||||
severe bug in the undo system.</p>
|
||||
<p><span class="date">7.9.2010:</span> A bug-fix version 1.1.2 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release fixes a severe bug in 1.1.1 that prevented adding stages
|
||||
to rocket designs. Users are recommended to upgrade.</p>
|
||||
<p><span class="date">3.9.2010:</span> Version 1.1.1 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>For this release a major part of the simulator code has been
|
||||
rewritten for better flexibility in future development. It also
|
||||
includes a vastly improved thrust curve selection dialog, the
|
||||
possibility to loading user-defined thrust curves and better
|
||||
startup times than previous releases.</p>
|
||||
<p>Simulation listeners written for older versions of OpenRocket
|
||||
are not compatible with this release.</p>
|
||||
<p><span class="date">21.3.2010:</span> Version 1.1.0 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes the first support for loading RockSim
|
||||
rocket design files (.RKT), thanks to contributions by Doug
|
||||
Pedrick. It's also the kick-off of the 1.1 development branch of
|
||||
OpenRocket.</p>
|
||||
<p><span class="date">10.3.2010:</span> Version 1.0.0 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes several hundred new thrustcurves from
|
||||
<a href="http://www.thrustcurve.org/">thrustcurve.org</a> and some
|
||||
bug fixes. It is also a stable milestone, after which development
|
||||
on larger features will be started in a 1.1 branch. Look out
|
||||
for it! :-)</p>
|
||||
<p><span class="date">17.2.2010:</span> Version 0.9.6 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release updates the aerodynamic calculation methods to be
|
||||
more in line with the Barrowman method and enhances the simulation
|
||||
time step selection, in addition to fixing numerous bugs.</p>
|
||||
<p><span class="date">28.11.2009:</span> Version 0.9.5 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release <strong>fixes a serious bug in 0.9.4</strong> that
|
||||
prevented adding a tube coupler and centering ring to the same
|
||||
body tube, in addition to a few smaller additions. Users of
|
||||
0.9.4 should upgrade immediately!</p>
|
||||
<p><span class="date">24.11.2009:</span> Version 0.9.4 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version adds support for through-the-wall fin tabs,
|
||||
attaching components to coupler tubes, material editing, automatic
|
||||
update checking, in addition to fixing numerous bugs.</p>
|
||||
<p><span class="date">1.9.2009:</span> Version 0.9.3 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version includes lots of bug fixes and new features including
|
||||
data exporting, showing flight events in plots, example rocket designs,
|
||||
splitting clustered inner tubes and automated bug reporting.</p>
|
||||
<p><span class="date">13.7.2009:</span> Version 0.9.2 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version includes <strong>bug fixes for imperial unit
|
||||
conversions</strong> and UI improvements for motor selection.
|
||||
<em>All users of imperial units should upgrade!</em></p>
|
||||
<p><span class="date">9.6.2009:</span> The
|
||||
<a href="documentation.html">Master's thesis</a> for which OpenRocket
|
||||
was written for is now available!</p>
|
||||
<p>At the same time version 0.9.1 was
|
||||
<a href="download.html">released</a>. This release fixes various
|
||||
file handling bugs and adds small UI enhancements.</p>
|
||||
<p><span class="date">24.5.2009:</span> First version 0.9.0
|
||||
<a href="download.html">released</a>!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>OpenRocket</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
<meta name="keywords" content="OpenRocket, model rocket, simulator, simulation, rocketry" />
|
||||
<link rel="stylesheet" type="text/css" href="layout.css" />
|
||||
<meta name="Generator" content="htp 1.18" />
|
||||
</head>
|
||||
<body class="page_index">
|
||||
<!--[if lte IE 6]>
|
||||
<div id="iewarn">
|
||||
You are using a browser that is <strong>8 years old!</strong>
|
||||
|
||||
In Internet-years that is <em>prehistoric!</em><br/>
|
||||
For the sanity of all webmasterkind,
|
||||
<em>please <a href="http://www.mozilla.com/">upgrade</a></em>. It's easy!
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div class="menucontainer">
|
||||
<div class="menu">
|
||||
<div class="icon"><a href="index.html"></a></div>
|
||||
<ul>
|
||||
<li><a href="index.html">OpenRocket</a></li>
|
||||
<li><a href="features.html">Features and screenshots</a></li>
|
||||
<li><a href="download.html">Download</a></li>
|
||||
<li><a href="documentation.html">Documentation</a></li>
|
||||
<li><a href="http://wiki.openrocket.info/">Wiki pages</a></li>
|
||||
<li><a href="http://openrocket.trans.free.fr/">Translations</a></li>
|
||||
<li><a href="getinvolved.html">Get involved!</a></li>
|
||||
<li><a href="contact.html">
|
||||
Mailing lists<br/>
|
||||
Support forums<br/>
|
||||
Contact info</a></li>
|
||||
<!--
|
||||
<li><a href="report.html">
|
||||
Report a bug<br/>
|
||||
Request a feature</a></li>
|
||||
-->
|
||||
<li><a href="license.html">License</a></li>
|
||||
</ul>
|
||||
<div class="logo">
|
||||
<a href="http://sourceforge.net/projects/openrocket"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=260357&type=12" width="120" height="30" alt="Get OpenRocket at SourceForge.net. Fast, secure and Free Open Source software downloads" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>OpenRocket — an Open Source model rocket simulator</h1>
|
||||
<div class="content">
|
||||
<h2>Introduction</h2>
|
||||
<div class="rightpane">
|
||||
<div class="downloadbox">
|
||||
<a class="main" href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/OpenRocket-15.03.jar/download">
|
||||
<strong>Download now!</strong>
|
||||
<span>OpenRocket-15.03.jar</span>
|
||||
</a>
|
||||
<span class="alternative">
|
||||
<a href="https://sourceforge.net/projects/openrocket/files/openrocket/15.03/ReleaseNotes/view">Release notes</a> |
|
||||
<a href="download.html">Other versions</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="screenshot">
|
||||
<a href="shots/main.png"><img src="shots-small/main.jpg" alt="Main window" /></a>
|
||||
<a href="features.html">
|
||||
More screenshots...
|
||||
</a>
|
||||
</div>
|
||||
<div class="support">
|
||||
<a href="http://sourceforge.net/donate/index.php?group_id=260357"><img src="project-support.jpg" width="88" height="32" alt="Support This Project" /> </a>
|
||||
</div>
|
||||
<div class="support">
|
||||
<a href="http://www.yourkit.com/java/profiler/index.jsp"><img src="yourkit.png" width="88" height="32" alt="YourKit Supports This Project" /> </a>
|
||||
</div>
|
||||
</div>
|
||||
<p><strong>OpenRocket</strong> is a free, fully featured model
|
||||
rocket simulator that allows you to design and simulate your
|
||||
rockets before actually building and flying them.</p>
|
||||
<p>The main features include:</p>
|
||||
<ul>
|
||||
<li>Six-degree-of-freedom flight simulation</li>
|
||||
<li>Automatic design optimization</li>
|
||||
<li>Realtime simulated altitude, velocity and acceleration display</li>
|
||||
<li>Staging and clustering support</li>
|
||||
<li>Cross-platform (Java-based)</li>
|
||||
</ul>
|
||||
<p>Read more about its <a
|
||||
href="features.html">features and see screenshots</a>.
|
||||
</p>
|
||||
<p>OpenRocket is an Open Source project licensed under the
|
||||
<a href="license.html">GNU GPL</a>. This means that the
|
||||
software is free to use for whatever purposes, and the source
|
||||
code is also available for studying and extending.
|
||||
</p>
|
||||
<p>OpenRocket needs help to become even better. Implementing
|
||||
features, writing documentation and creating example designs are
|
||||
just a few ways of helping. If you are interested in helping
|
||||
make OpenRocket the best rocket simulator out there, please
|
||||
<a href="getinvolved.html"><em>Get involved!</em></a>
|
||||
</p>
|
||||
<p>YourKit is supporting OpenRocket open source project with its
|
||||
full-featured Java Profiler.
|
||||
YourKit, LLC is the creator of innovative and intelligent tools for profiling
|
||||
Java and .NET applications. Take a look at YourKit's leading software products:
|
||||
<a href="http://www.yourkit.com/java/profiler/index.jsp">YourKit Java
|
||||
Profiler</a> and
|
||||
<a href="http://www.yourkit.com/.net/profiler/index.jsp">YourKit .NET
|
||||
Profiler</a>.
|
||||
</p>
|
||||
<div class="clear"></div>
|
||||
<div class="news">
|
||||
<h2>News</h2>
|
||||
<p><span class="date">28.03.2015:</span> Version 15.03 is
|
||||
<a href="download.html">released</a>! This release contains scriptable simulation extensions and experimental support for tube fins along with many additional improvements.
|
||||
</p>
|
||||
<p><span class="date">02.11.2014:</span> Version 14.11 is
|
||||
<a href="download.html">released</a>! This release contains very few changes. Thrustcurves have been updated and now include AeroTech DMS motors. A few bugs have been fixed.
|
||||
</p>
|
||||
<p><span class="date">25.06.2014:</span> Version 14.06 is
|
||||
<a href="download.html">released</a>! This release contains very minimal changes. It fixes an annoying bug in tables that many people experience. A texture is added for Klima motors.
|
||||
</p>
|
||||
<p><span class="date">21.05.2014:</span> Version 14.05 is
|
||||
<a href="download.html">released</a>! This release contains some minor features,
|
||||
bug fixes and updated thrust curves. New motor vendors Klima and Southern
|
||||
Cross Rocketry are included. The simulation will now compute optimum delay based
|
||||
on actual coast time. Components with CG and mass overrides are decorated with
|
||||
an icon in the component tree.
|
||||
</p>
|
||||
<p><span class="date">21.03.2014:</span> Version 14.03 is
|
||||
<a href="download.html">released</a>! This release contains the
|
||||
new photo realistic renderer (in the Tools menu) which allows one to visualize
|
||||
the rocket in the air. There are various bug fixes in the configuration
|
||||
and motor selection windows as well.
|
||||
</p>
|
||||
<p><span class="date">01.01.2014:</span> Version 13.11.2 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes,
|
||||
usability improvements, and layout fixes.
|
||||
</p>
|
||||
<p><span class="date">15.11.2013:</span> Version 13.11.1 is
|
||||
<a href="download.html">released</a>! This release contains bug fixes
|
||||
including fixing Tube Coupler configuration, various exceptions in
|
||||
the flight configuration tab, updated 3d libraris (which didn't really make
|
||||
it into previous versions).</p>
|
||||
<p><span class="date">8.11.2013:</span> Version 13.11 is
|
||||
<a href="download.html">released</a>! This release simplifies
|
||||
flight configurations by replacing the dialog with the configuration
|
||||
tab. Motor filtering in the motor chooser dialog has been enhanced.
|
||||
Chineese translations have been added and Russian translations updated.
|
||||
Updated the 3D libraries, and squashed some bugs introduced by Java 1.7.0_45-b18.</p>
|
||||
<p><span class="date">6.10.2013:</span> Version 13.09.1 is
|
||||
<a href="download.html">released</a>! This is a bug-fix release,
|
||||
and includes updated 3D libraries and new thrust curves for
|
||||
Aerotech C3 and D2.</p>
|
||||
<p><span class="date">8.9.2013:</span> Version 13.09 is
|
||||
<a href="download.html">released</a>! This release contains
|
||||
numerous bug fixes, updated 3D JOGL libraries, and separated
|
||||
simulation edit and plot dialogs.</p>
|
||||
<p><span class="date">4.5.2013:</span> Version 13.05 is
|
||||
<a href="download.html">released</a>! This release contains a huge
|
||||
number of improvements, the main ones including realistic 3D
|
||||
rendering with decals, flight configurations, lower stage descent
|
||||
simulation, boosted dart support and new translations for
|
||||
Portuguese and Japanese. These are thanks to many
|
||||
contributors.</p>
|
||||
<p>Version 13.05 also changes the file format to be ZIP-based.
|
||||
Versions earlier than 12.03 will not be able to read files saved
|
||||
by this version.</p>
|
||||
<p><span class="date">28.9.2012:</span> Version 12.09.1 is
|
||||
<a href="download.html">released</a>! This is a bug-fix release,
|
||||
fixing numerous bugs introduced in 12.09. The only new feature is
|
||||
the option to automatically open the latest design file on startup
|
||||
(in <em>Edit</em> → <em>Preferences</em> → <em>Options</em>).
|
||||
<p><span class="date">23.9.2012:</span> Version 12.09 for Android is
|
||||
<a href="download.html">released</a>! The major improvement is the
|
||||
possibility to edit simulation parameters, thanks to work by Kevin
|
||||
Ruland.</p>
|
||||
<p><span class="date">16.9.2012:</span> Version 12.09 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version contains a huge number of new features by many contributors:</p>
|
||||
<ul>
|
||||
<li>3D rocket design view</li>
|
||||
<li>Component Presets</li>
|
||||
<li>Custom expressions in simulations</li>
|
||||
<li>Printing for centering ring and clustered centering ring components</li>
|
||||
<li>Support simple arthmatic in dimension entry</li>
|
||||
<li>Support deploying recovery device at stage separation</li>
|
||||
<li>Support for fractional inches (1/64) for unit length</li>
|
||||
<li>Added preference for windspeed units separately</li>
|
||||
<li>Added "most recently used files" in File Menu</li>
|
||||
<li>Improved printed accurracy in fin marking guide</li>
|
||||
<li>Calibration rulers added to printed templates</li>
|
||||
<li>Translations in Czech and Polish, numerous updates</li>
|
||||
</ul>
|
||||
<p><span class="date">10.3.2012:</span> Version 12.03 for desktop
|
||||
and Android is <a href="download.html">released</a>!</p>
|
||||
<p>In this release the version numbering scheme has been changed.
|
||||
From now on the version number is <em>YY.MM</em> indicating the
|
||||
year and month of the release. Bug fix releases are indicated by
|
||||
an added "<em>.1</em>".</p>
|
||||
<p>This also marks the first release for Android devices. In this
|
||||
first release you can open files and examine existing simulations,
|
||||
stability data and motor files. The Android port is thanks to
|
||||
work by Kevin Ruland.</p>
|
||||
<p>Enhancements in the desktop version include saving designs in RKT
|
||||
format thanks to Doug Pedrick, freeform fin set import form images
|
||||
by Jason Blood, configurable stage separation
|
||||
events, guided help tours and displaying the computed motor
|
||||
designation class. The application has also been translated to
|
||||
Italian by Mauro Biasutti and Russian by the Sky Dart Team.</p>
|
||||
<p><span class="date">24.11.2011:</span> Version 1.1.9 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>For this version Richard Graham has implemented geodetic
|
||||
computation methods, which take into account the curvature of the
|
||||
Earth and the coriolis effect. The computation method is selected
|
||||
by the <em>Geodetic calculations</em> option in the simulation
|
||||
options. It's not <em>(yet)</em> a full spherical computation model, but
|
||||
should be accurate enough for almost all sub-orbital needs.</p>
|
||||
<p>Doug Pedrick has also enhanced the printing system with the
|
||||
ability to print fin positioning guides, transition templates and
|
||||
nose cone profiles. Other smaller enhancements and bug fixes are
|
||||
also included.</p>
|
||||
<p><span class="date">25.8.2011:</span> Version 1.1.8 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release contains bug fixes to the optimization methods.
|
||||
It also contains a workaround to a JRE bug that prevents running
|
||||
OpenRocket on some builds of Java 7.</p>
|
||||
<p>The web pages have also been somewhat updated and Boris du Reau has
|
||||
created <a href="http://openrocket.trans.free.fr/">a separate site</a>
|
||||
for coordinating the localization efforts for OpenRocket.</p>
|
||||
<p><span class="date">12.8.2011:</span> Version 1.1.7 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes automatic rocket design optimization
|
||||
support (<em>Analyze</em> → <em>Rocket optimization</em>).
|
||||
You can optimize any amount of rocket parameters for apogee
|
||||
altitude, maximum velocity or a number of different values.</p>
|
||||
<p>While the automatic optimization is a powerful tool, it is very
|
||||
easy to optimize against particulars of the simulation methods,
|
||||
instead of true physical phenomena. Always keep common sense at
|
||||
hand and take the results with a grain of salt.</p>
|
||||
<p><span class="date">22.7.2011:</span> Version 1.1.6 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes initial localization support and
|
||||
translations to French, German and Spanish. This is thanks to the
|
||||
great work of Boris du Reau, and the teams from Tripoli France,
|
||||
Tripoli Spain and ERIG e.V. If you prefer to use some other
|
||||
language than the system default, you can select the language on
|
||||
the "Options" tab of the preferences dialog.</p>
|
||||
<p>The release also includes design scaling support and numerous bug
|
||||
fixes.</p>
|
||||
<p><span class="date">10.6.2011:</span> Version 1.1.5 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes updates to the printing system which fixes
|
||||
printing on Windows.</p>
|
||||
<p><span class="date">5.3.2011:</span> Version 1.1.4 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes initial printing support, thanks to Doug
|
||||
Pedrick. Printing still has a few issues on some platforms.
|
||||
Various bugs have also been fixed.</p>
|
||||
<p><span class="date">6.10.2010:</span> Version 1.1.3 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes support for moving and copying components
|
||||
in the component tree using drag-and-drop. Use normal DnD for
|
||||
moving, and control-drag for copy. This release also fixes a
|
||||
severe bug in the undo system.</p>
|
||||
<p><span class="date">7.9.2010:</span> A bug-fix version 1.1.2 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release fixes a severe bug in 1.1.1 that prevented adding stages
|
||||
to rocket designs. Users are recommended to upgrade.</p>
|
||||
<p><span class="date">3.9.2010:</span> Version 1.1.1 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>For this release a major part of the simulator code has been
|
||||
rewritten for better flexibility in future development. It also
|
||||
includes a vastly improved thrust curve selection dialog, the
|
||||
possibility to loading user-defined thrust curves and better
|
||||
startup times than previous releases.</p>
|
||||
<p>Simulation listeners written for older versions of OpenRocket
|
||||
are not compatible with this release.</p>
|
||||
<p><span class="date">21.3.2010:</span> Version 1.1.0 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes the first support for loading RockSim
|
||||
rocket design files (.RKT), thanks to contributions by Doug
|
||||
Pedrick. It's also the kick-off of the 1.1 development branch of
|
||||
OpenRocket.</p>
|
||||
<p><span class="date">10.3.2010:</span> Version 1.0.0 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release includes several hundred new thrustcurves from
|
||||
<a href="http://www.thrustcurve.org/">thrustcurve.org</a> and some
|
||||
bug fixes. It is also a stable milestone, after which development
|
||||
on larger features will be started in a 1.1 branch. Look out
|
||||
for it! :-)</p>
|
||||
<p><span class="date">17.2.2010:</span> Version 0.9.6 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release updates the aerodynamic calculation methods to be
|
||||
more in line with the Barrowman method and enhances the simulation
|
||||
time step selection, in addition to fixing numerous bugs.</p>
|
||||
<p><span class="date">28.11.2009:</span> Version 0.9.5 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This release <strong>fixes a serious bug in 0.9.4</strong> that
|
||||
prevented adding a tube coupler and centering ring to the same
|
||||
body tube, in addition to a few smaller additions. Users of
|
||||
0.9.4 should upgrade immediately!</p>
|
||||
<p><span class="date">24.11.2009:</span> Version 0.9.4 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version adds support for through-the-wall fin tabs,
|
||||
attaching components to coupler tubes, material editing, automatic
|
||||
update checking, in addition to fixing numerous bugs.</p>
|
||||
<p><span class="date">1.9.2009:</span> Version 0.9.3 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version includes lots of bug fixes and new features including
|
||||
data exporting, showing flight events in plots, example rocket designs,
|
||||
splitting clustered inner tubes and automated bug reporting.</p>
|
||||
<p><span class="date">13.7.2009:</span> Version 0.9.2 is
|
||||
<a href="download.html">released</a>!</p>
|
||||
<p>This version includes <strong>bug fixes for imperial unit
|
||||
conversions</strong> and UI improvements for motor selection.
|
||||
<em>All users of imperial units should upgrade!</em></p>
|
||||
<p><span class="date">9.6.2009:</span> The
|
||||
<a href="documentation.html">Master's thesis</a> for which OpenRocket
|
||||
was written for is now available!</p>
|
||||
<p>At the same time version 0.9.1 was
|
||||
<a href="download.html">released</a>. This release fixes various
|
||||
file handling bugs and adds small UI enhancements.</p>
|
||||
<p><span class="date">24.5.2009:</span> First version 0.9.0
|
||||
<a href="download.html">released</a>!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="valid">
|
||||
<p><a href="http://validator.w3.org/check/referer"><img src="valid-xhtml10.png" alt="Valid XHTML 1.0!" /></a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/openrocket/" : "http://apps.sourceforge.net/piwik/openrocket/");
|
||||
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script><script type="text/javascript">
|
||||
piwik_action_name = '';
|
||||
piwik_idsite = 1;
|
||||
piwik_url = pkBaseURL + "piwik.php";
|
||||
piwik_log(piwik_action_name, piwik_idsite, piwik_url);
|
||||
</script>
|
||||
<noscript><p><img src="http://apps.sourceforge.net/piwik/openrocket/piwik.php?idsite=1" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tag -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
@ -0,0 +1,485 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<install4j version="8.0.4" transformSequenceNumber="8">
|
||||
<directoryPresets config="/Users/jhanney/Code/openrocket-installer-files/20.x" />
|
||||
<application name="OpenRocket 20.x" applicationId="8434-9327-1469-6373" mediaDir="media" shortName="OpenRocket" publisher="OpenRocket" publisherWeb="http://openrocket.info" version="20.x" macVolumeId="5f58a2be20d8e22f" javaMinVersion="11.0" javaMaxVersion="11.0" jdkMode="jdk" jdkName="JDK 11.0">
|
||||
<jreBundles jdkProviderId="AdoptOpenJDK" release="openjdk11/jdk-11.0.6+10">
|
||||
<modules>
|
||||
<defaultModules set="jre" />
|
||||
<module name="java.scripting" />
|
||||
</modules>
|
||||
</jreBundles>
|
||||
</application>
|
||||
<files>
|
||||
<mountPoints>
|
||||
<mountPoint id="58" />
|
||||
</mountPoints>
|
||||
<entries>
|
||||
<fileEntry mountPoint="58" file="/Users/jhanney/Code/openrocket/swing/build/jar/OpenRocket.jar" />
|
||||
</entries>
|
||||
</files>
|
||||
<launchers>
|
||||
<launcher name="OpenRocket 20.x" id="59" icnsFile="/Users/jhanney/Code/openrocket-installer-files/20.x/OpenRocket.icns">
|
||||
<executable name="OpenRocket" iconSet="true" executableDir="." executableMode="gui" />
|
||||
<java mainClass="net.sf.openrocket.startup.OpenRocket">
|
||||
<classPath>
|
||||
<archive location="OpenRocket.jar" failOnError="false" />
|
||||
</classPath>
|
||||
</java>
|
||||
<iconImageFiles>
|
||||
<file path="/Users/jhanney/Code/openrocket/core/resources-src/pix/icon/icon-048.png" />
|
||||
</iconImageFiles>
|
||||
</launcher>
|
||||
</launchers>
|
||||
<installerGui>
|
||||
<applications>
|
||||
<application id="installer" beanClass="com.install4j.runtime.beans.applications.InstallerApplication">
|
||||
<startup>
|
||||
<screen id="1" beanClass="com.install4j.runtime.beans.screens.StartupScreen" rollbackBarrierExitCode="0">
|
||||
<actions>
|
||||
<action id="22" beanClass="com.install4j.runtime.beans.actions.misc.RequestPrivilegesAction" actionElevationType="none" rollbackBarrierExitCode="0" />
|
||||
</actions>
|
||||
</screen>
|
||||
</startup>
|
||||
<screens>
|
||||
<screen id="2" beanClass="com.install4j.runtime.beans.screens.WelcomeScreen" styleId="41" rollbackBarrierExitCode="0">
|
||||
<actions>
|
||||
<action id="7" beanClass="com.install4j.runtime.beans.actions.misc.LoadResponseFileAction" rollbackBarrierExitCode="0" multiExec="true">
|
||||
<serializedBean>
|
||||
<property name="excludedVariables" type="array" elementType="string" length="1">
|
||||
<element index="0">sys.installationDir</element>
|
||||
</property>
|
||||
</serializedBean>
|
||||
<condition>context.getBooleanVariable("sys.confirmedUpdateInstallation")</condition>
|
||||
</action>
|
||||
</actions>
|
||||
<formComponents>
|
||||
<formComponent id="3" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${form:welcomeMessage}</property>
|
||||
</serializedBean>
|
||||
<visibilityScript>!context.isConsole()</visibilityScript>
|
||||
</formComponent>
|
||||
<formComponent id="4" beanClass="com.install4j.runtime.beans.formcomponents.ConsoleHandlerFormComponent">
|
||||
<serializedBean>
|
||||
<property name="consoleScript">
|
||||
<object class="com.install4j.api.beans.ScriptProperty">
|
||||
<property name="value" type="string">String message = context.getMessage("ConsoleWelcomeLabel", context.getApplicationName());
|
||||
return console.askOkCancel(message, true);
|
||||
</property>
|
||||
</object>
|
||||
</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<formComponent id="5" beanClass="com.install4j.runtime.beans.formcomponents.UpdateAlertComponent" useExternalParametrization="true" externalParametrizationName="Update Alert" externalParametrizationMode="include">
|
||||
<externalParametrizationPropertyNames>
|
||||
<propertyName>updateCheck</propertyName>
|
||||
</externalParametrizationPropertyNames>
|
||||
</formComponent>
|
||||
<formComponent id="6" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetTop="20">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${i18n:ClickNext}</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
<screen id="8" beanClass="com.install4j.runtime.beans.screens.InstallationDirectoryScreen" rollbackBarrierExitCode="0">
|
||||
<condition>!context.getBooleanVariable("sys.confirmedUpdateInstallation")</condition>
|
||||
<actions>
|
||||
<action id="11" beanClass="com.install4j.runtime.beans.actions.misc.LoadResponseFileAction" rollbackBarrierExitCode="0" multiExec="true">
|
||||
<serializedBean>
|
||||
<property name="excludedVariables" type="array" elementType="string" length="1">
|
||||
<element index="0">sys.installationDir</element>
|
||||
</property>
|
||||
</serializedBean>
|
||||
<condition>context.getVariable("sys.responseFile") == null</condition>
|
||||
</action>
|
||||
</actions>
|
||||
<formComponents>
|
||||
<formComponent id="9" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="25">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${i18n:SelectDirLabel(${compiler:sys.fullName})}</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<formComponent id="10" beanClass="com.install4j.runtime.beans.formcomponents.InstallationDirectoryChooserComponent" useExternalParametrization="true" externalParametrizationName="Installation Directory Chooser" externalParametrizationMode="include">
|
||||
<serializedBean>
|
||||
<property name="requestFocus" type="boolean" value="true" />
|
||||
</serializedBean>
|
||||
<externalParametrizationPropertyNames>
|
||||
<propertyName>suggestAppDir</propertyName>
|
||||
<propertyName>validateApplicationId</propertyName>
|
||||
<propertyName>existingDirWarning</propertyName>
|
||||
<propertyName>checkWritable</propertyName>
|
||||
<propertyName>manualEntryAllowed</propertyName>
|
||||
<propertyName>checkFreeSpace</propertyName>
|
||||
<propertyName>showRequiredDiskSpace</propertyName>
|
||||
<propertyName>showFreeDiskSpace</propertyName>
|
||||
<propertyName>allowSpacesOnUnix</propertyName>
|
||||
<propertyName>validationScript</propertyName>
|
||||
<propertyName>standardValidation</propertyName>
|
||||
</externalParametrizationPropertyNames>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
<screen id="12" beanClass="com.install4j.runtime.beans.screens.ComponentsScreen" rollbackBarrierExitCode="0">
|
||||
<formComponents>
|
||||
<formComponent id="13" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${i18n:SelectComponentsLabel2}</property>
|
||||
</serializedBean>
|
||||
<visibilityScript>!context.isConsole()</visibilityScript>
|
||||
</formComponent>
|
||||
<formComponent id="14" beanClass="com.install4j.runtime.beans.formcomponents.ComponentSelectorComponent" useExternalParametrization="true" externalParametrizationName="Installation Components" externalParametrizationMode="include">
|
||||
<serializedBean>
|
||||
<property name="fillVertical" type="boolean" value="true" />
|
||||
</serializedBean>
|
||||
<externalParametrizationPropertyNames>
|
||||
<propertyName>selectionChangedScript</propertyName>
|
||||
</externalParametrizationPropertyNames>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
<screen id="164" beanClass="com.install4j.runtime.beans.screens.FileAssociationsScreen" rollbackBarrierExitCode="0">
|
||||
<actions>
|
||||
<action id="167" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
|
||||
<serializedBean>
|
||||
<property name="description" type="string">OpenRocket Rocket Files</property>
|
||||
<property name="extension" type="string">ork</property>
|
||||
<property name="launcherId" type="string">59</property>
|
||||
</serializedBean>
|
||||
</action>
|
||||
</actions>
|
||||
<formComponents>
|
||||
<formComponent id="165" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${i18n:SelectAssociationsLabel}</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<formComponent id="166" beanClass="com.install4j.runtime.beans.formcomponents.FileAssociationsComponent" useExternalParametrization="true" externalParametrizationName="File Associations" externalParametrizationMode="include">
|
||||
<serializedBean>
|
||||
<property name="fillVertical" type="boolean" value="true" />
|
||||
</serializedBean>
|
||||
<externalParametrizationPropertyNames>
|
||||
<propertyName>showSelectionButtons</propertyName>
|
||||
<propertyName>selectionButtonPosition</propertyName>
|
||||
</externalParametrizationPropertyNames>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
<screen id="15" beanClass="com.install4j.runtime.beans.screens.InstallationScreen" rollbackBarrier="true" rollbackBarrierExitCode="0">
|
||||
<actions>
|
||||
<action id="17" beanClass="com.install4j.runtime.beans.actions.InstallFilesAction" actionElevationType="elevated" rollbackBarrierExitCode="0" failureStrategy="quit" errorMessage="${i18n:FileCorrupted}" />
|
||||
<action id="18" beanClass="com.install4j.runtime.beans.actions.desktop.CreateProgramGroupAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
|
||||
<serializedBean>
|
||||
<property name="uninstallerMenuName" type="string">${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}</property>
|
||||
</serializedBean>
|
||||
<condition>!context.getBooleanVariable("sys.programGroupDisabled")</condition>
|
||||
</action>
|
||||
<action id="19" beanClass="com.install4j.runtime.beans.actions.desktop.RegisterAddRemoveAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
|
||||
<serializedBean>
|
||||
<property name="itemName" type="string">${compiler:sys.fullName} ${compiler:sys.version}</property>
|
||||
</serializedBean>
|
||||
</action>
|
||||
</actions>
|
||||
<formComponents>
|
||||
<formComponent id="16" beanClass="com.install4j.runtime.beans.formcomponents.ProgressComponent">
|
||||
<serializedBean>
|
||||
<property name="initialStatusMessage" type="string">${i18n:WizardPreparing}</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
<screen id="20" beanClass="com.install4j.runtime.beans.screens.FinishedScreen" styleId="41" rollbackBarrierExitCode="0" finishScreen="true">
|
||||
<formComponents>
|
||||
<formComponent id="21" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${form:finishedMessage}</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
</screens>
|
||||
</application>
|
||||
<application id="uninstaller" beanClass="com.install4j.runtime.beans.applications.UninstallerApplication">
|
||||
<serializedBean>
|
||||
<property name="customMacosExecutableName" type="string">${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}</property>
|
||||
<property name="useCustomMacosExecutableName" type="boolean" value="true" />
|
||||
</serializedBean>
|
||||
<startup>
|
||||
<screen id="23" beanClass="com.install4j.runtime.beans.screens.StartupScreen" rollbackBarrierExitCode="0">
|
||||
<actions>
|
||||
<action id="33" beanClass="com.install4j.runtime.beans.actions.misc.LoadResponseFileAction" rollbackBarrierExitCode="0" />
|
||||
<action id="34" beanClass="com.install4j.runtime.beans.actions.misc.RequireInstallerPrivilegesAction" actionElevationType="none" rollbackBarrierExitCode="0" />
|
||||
</actions>
|
||||
</screen>
|
||||
</startup>
|
||||
<screens>
|
||||
<screen id="24" beanClass="com.install4j.runtime.beans.screens.UninstallWelcomeScreen" styleId="41" rollbackBarrierExitCode="0">
|
||||
<formComponents>
|
||||
<formComponent id="25" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${form:welcomeMessage}</property>
|
||||
</serializedBean>
|
||||
<visibilityScript>!context.isConsole()</visibilityScript>
|
||||
</formComponent>
|
||||
<formComponent id="26" beanClass="com.install4j.runtime.beans.formcomponents.ConsoleHandlerFormComponent">
|
||||
<serializedBean>
|
||||
<property name="consoleScript">
|
||||
<object class="com.install4j.api.beans.ScriptProperty">
|
||||
<property name="value" type="string">String message = context.getMessage("ConfirmUninstall", context.getApplicationName());
|
||||
return console.askYesNo(message, true);
|
||||
</property>
|
||||
</object>
|
||||
</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
<screen id="27" beanClass="com.install4j.runtime.beans.screens.UninstallationScreen" rollbackBarrierExitCode="0">
|
||||
<actions>
|
||||
<action id="29" beanClass="com.install4j.runtime.beans.actions.UninstallFilesAction" actionElevationType="elevated" rollbackBarrierExitCode="0" />
|
||||
</actions>
|
||||
<formComponents>
|
||||
<formComponent id="28" beanClass="com.install4j.runtime.beans.formcomponents.ProgressComponent">
|
||||
<serializedBean>
|
||||
<property name="initialStatusMessage" type="string">${i18n:UninstallerPreparing}</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
<screen id="32" beanClass="com.install4j.runtime.beans.screens.UninstallFailureScreen" rollbackBarrierExitCode="0" finishScreen="true" />
|
||||
<screen id="30" beanClass="com.install4j.runtime.beans.screens.UninstallSuccessScreen" styleId="41" rollbackBarrierExitCode="0" finishScreen="true">
|
||||
<formComponents>
|
||||
<formComponent id="31" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
|
||||
<serializedBean>
|
||||
<property name="labelText" type="string">${form:successMessage}</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</screen>
|
||||
</screens>
|
||||
</application>
|
||||
</applications>
|
||||
<styles defaultStyleId="35">
|
||||
<style name="Standard" id="35" beanClass="com.install4j.runtime.beans.styles.FormStyle">
|
||||
<formComponents>
|
||||
<formComponent name="Header" id="36" beanClass="com.install4j.runtime.beans.styles.NestedStyleComponent" insetTop="0" insetBottom="0">
|
||||
<serializedBean>
|
||||
<property name="styleId" type="string">48</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<group name="Main" id="37" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup">
|
||||
<beans>
|
||||
<formComponent id="38" beanClass="com.install4j.runtime.beans.styles.ContentComponent" insetTop="10" insetLeft="20" insetBottom="10" insetRight="20" />
|
||||
<formComponent name="Watermark" id="39" beanClass="com.install4j.runtime.beans.formcomponents.SeparatorComponent" insetTop="0" insetLeft="5" insetBottom="0" useExternalParametrization="true" externalParametrizationName="Custom watermark" externalParametrizationMode="include">
|
||||
<serializedBean>
|
||||
<property name="enabledTitleText" type="boolean" value="false" />
|
||||
<property name="labelText" type="string">install4j</property>
|
||||
</serializedBean>
|
||||
<externalParametrizationPropertyNames>
|
||||
<propertyName>labelText</propertyName>
|
||||
</externalParametrizationPropertyNames>
|
||||
</formComponent>
|
||||
<formComponent name="Footer" id="40" beanClass="com.install4j.runtime.beans.styles.NestedStyleComponent" insetTop="0" insetBottom="0">
|
||||
<serializedBean>
|
||||
<property name="styleId" type="string">52</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</beans>
|
||||
</group>
|
||||
</formComponents>
|
||||
</style>
|
||||
<style name="Banner" id="41" beanClass="com.install4j.runtime.beans.styles.FormStyle">
|
||||
<formComponents>
|
||||
<group id="42" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" useExternalParametrization="true" externalParametrizationName="Customize banner image" externalParametrizationMode="include">
|
||||
<serializedBean>
|
||||
<property name="backgroundColor">
|
||||
<object class="java.awt.Color">
|
||||
<int>255</int>
|
||||
<int>255</int>
|
||||
<int>255</int>
|
||||
<int>255</int>
|
||||
</object>
|
||||
</property>
|
||||
<property name="borderSides">
|
||||
<object class="com.install4j.runtime.beans.formcomponents.BorderSides">
|
||||
<property name="bottom" type="boolean" value="true" />
|
||||
</object>
|
||||
</property>
|
||||
<property name="imageEdgeBackgroundColor">
|
||||
<object class="java.awt.Color">
|
||||
<int>25</int>
|
||||
<int>143</int>
|
||||
<int>220</int>
|
||||
<int>255</int>
|
||||
</object>
|
||||
</property>
|
||||
<property name="imageEdgeBorder" type="boolean" value="true" />
|
||||
<property name="imageFile">
|
||||
<object class="com.install4j.api.beans.ExternalFile">
|
||||
<string>${compiler:sys.install4jHome}/resource/styles/wizard.png</string>
|
||||
</object>
|
||||
</property>
|
||||
<property name="insets">
|
||||
<object class="java.awt.Insets">
|
||||
<int>5</int>
|
||||
<int>10</int>
|
||||
<int>10</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</property>
|
||||
</serializedBean>
|
||||
<beans>
|
||||
<formComponent id="43" beanClass="com.install4j.runtime.beans.styles.ScreenTitleComponent" insetTop="0">
|
||||
<serializedBean>
|
||||
<property name="labelFontSizePercent" type="int" value="130" />
|
||||
<property name="labelFontStyle" type="enum" class="com.install4j.runtime.beans.formcomponents.FontStyle" value="BOLD" />
|
||||
<property name="labelFontType" type="enum" class="com.install4j.runtime.beans.formcomponents.FontType" value="DERIVED" />
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<formComponent id="44" beanClass="com.install4j.runtime.beans.formcomponents.SeparatorComponent" />
|
||||
<formComponent id="45" beanClass="com.install4j.runtime.beans.styles.ContentComponent" insetTop="10" insetBottom="0" />
|
||||
</beans>
|
||||
<externalParametrizationPropertyNames>
|
||||
<propertyName>imageAnchor</propertyName>
|
||||
<propertyName>imageEdgeBackgroundColor</propertyName>
|
||||
<propertyName>imageFile</propertyName>
|
||||
</externalParametrizationPropertyNames>
|
||||
</group>
|
||||
<formComponent id="46" beanClass="com.install4j.runtime.beans.styles.NestedStyleComponent" insetBottom="0">
|
||||
<serializedBean>
|
||||
<property name="styleId" type="string">52</property>
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</formComponents>
|
||||
</style>
|
||||
<group name="Style components" id="47" beanClass="com.install4j.runtime.beans.groups.StyleGroup">
|
||||
<beans>
|
||||
<style name="Standard header" id="48" beanClass="com.install4j.runtime.beans.styles.FormStyle">
|
||||
<serializedBean>
|
||||
<property name="fillVertical" type="boolean" value="false" />
|
||||
<property name="standalone" type="boolean" value="false" />
|
||||
<property name="verticalAnchor" type="enum" class="com.install4j.api.beans.Anchor" value="NORTH" />
|
||||
</serializedBean>
|
||||
<formComponents>
|
||||
<group id="49" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" useExternalParametrization="true" externalParametrizationName="Customize title bar" externalParametrizationMode="include">
|
||||
<serializedBean>
|
||||
<property name="backgroundColor">
|
||||
<object class="java.awt.Color">
|
||||
<int>255</int>
|
||||
<int>255</int>
|
||||
<int>255</int>
|
||||
<int>255</int>
|
||||
</object>
|
||||
</property>
|
||||
<property name="borderSides">
|
||||
<object class="com.install4j.runtime.beans.formcomponents.BorderSides">
|
||||
<property name="bottom" type="boolean" value="true" />
|
||||
</object>
|
||||
</property>
|
||||
<property name="imageAnchor" type="enum" class="com.install4j.api.beans.Anchor" value="NORTHEAST" />
|
||||
<property name="imageEdgeBorderWidth" type="int" value="2" />
|
||||
<property name="imageFile">
|
||||
<object class="com.install4j.api.beans.ExternalFile">
|
||||
<string>icon:${installer:sys.installerApplicationMode}_header.png</string>
|
||||
</object>
|
||||
</property>
|
||||
<property name="imageInsets">
|
||||
<object class="java.awt.Insets">
|
||||
<int>0</int>
|
||||
<int>5</int>
|
||||
<int>1</int>
|
||||
<int>1</int>
|
||||
</object>
|
||||
</property>
|
||||
<property name="insets">
|
||||
<object class="java.awt.Insets">
|
||||
<int>0</int>
|
||||
<int>20</int>
|
||||
<int>0</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
</property>
|
||||
</serializedBean>
|
||||
<beans>
|
||||
<formComponent name="Title" id="50" beanClass="com.install4j.runtime.beans.styles.ScreenTitleComponent">
|
||||
<serializedBean>
|
||||
<property name="labelFontStyle" type="enum" class="com.install4j.runtime.beans.formcomponents.FontStyle" value="BOLD" />
|
||||
<property name="labelFontType" type="enum" class="com.install4j.runtime.beans.formcomponents.FontType" value="DERIVED" />
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<formComponent name="Subtitle" id="51" beanClass="com.install4j.runtime.beans.styles.ScreenTitleComponent" insetLeft="8">
|
||||
<serializedBean>
|
||||
<property name="titleType" type="enum" class="com.install4j.runtime.beans.styles.TitleType" value="SUB_TITLE" />
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</beans>
|
||||
<externalParametrizationPropertyNames>
|
||||
<propertyName>backgroundColor</propertyName>
|
||||
<propertyName>foregroundColor</propertyName>
|
||||
<propertyName>imageAnchor</propertyName>
|
||||
<propertyName>imageFile</propertyName>
|
||||
<propertyName>imageOverlap</propertyName>
|
||||
</externalParametrizationPropertyNames>
|
||||
</group>
|
||||
</formComponents>
|
||||
</style>
|
||||
<style name="Standard footer" id="52" beanClass="com.install4j.runtime.beans.styles.FormStyle">
|
||||
<serializedBean>
|
||||
<property name="fillVertical" type="boolean" value="false" />
|
||||
<property name="standalone" type="boolean" value="false" />
|
||||
<property name="verticalAnchor" type="enum" class="com.install4j.api.beans.Anchor" value="SOUTH" />
|
||||
</serializedBean>
|
||||
<formComponents>
|
||||
<group id="53" beanClass="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup">
|
||||
<serializedBean>
|
||||
<property name="alignFirstLabel" type="boolean" value="false" />
|
||||
<property name="insets">
|
||||
<object class="java.awt.Insets">
|
||||
<int>3</int>
|
||||
<int>5</int>
|
||||
<int>8</int>
|
||||
<int>5</int>
|
||||
</object>
|
||||
</property>
|
||||
</serializedBean>
|
||||
<beans>
|
||||
<formComponent id="54" beanClass="com.install4j.runtime.beans.formcomponents.SpringComponent" />
|
||||
<formComponent name="Back button" id="55" beanClass="com.install4j.runtime.beans.styles.StandardControlButtonComponent">
|
||||
<serializedBean>
|
||||
<property name="buttonText" type="string">< ${i18n:ButtonBack}</property>
|
||||
<property name="controlButtonType" type="enum" class="com.install4j.api.context.ControlButtonType" value="PREVIOUS" />
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<formComponent name="Next button" id="56" beanClass="com.install4j.runtime.beans.styles.StandardControlButtonComponent">
|
||||
<serializedBean>
|
||||
<property name="buttonText" type="string">${i18n:ButtonNext} ></property>
|
||||
<property name="controlButtonType" type="enum" class="com.install4j.api.context.ControlButtonType" value="NEXT" />
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
<formComponent name="Cancel button" id="57" beanClass="com.install4j.runtime.beans.styles.StandardControlButtonComponent" insetLeft="5">
|
||||
<serializedBean>
|
||||
<property name="buttonText" type="string">${i18n:ButtonCancel}</property>
|
||||
<property name="controlButtonType" type="enum" class="com.install4j.api.context.ControlButtonType" value="CANCEL" />
|
||||
</serializedBean>
|
||||
</formComponent>
|
||||
</beans>
|
||||
</group>
|
||||
</formComponents>
|
||||
</style>
|
||||
</beans>
|
||||
</group>
|
||||
</styles>
|
||||
</installerGui>
|
||||
<mediaSets>
|
||||
<windows name="Windows" id="60">
|
||||
<jreBundle jreBundleSource="generated">
|
||||
<modules>
|
||||
<module name="java.scripting" />
|
||||
</modules>
|
||||
</jreBundle>
|
||||
</windows>
|
||||
<macos name="macOS Single Bundle" id="159" launcherId="59">
|
||||
<jreBundle jreBundleSource="preCreated" includedJre="macos-amd64-11.0.6" />
|
||||
</macos>
|
||||
</mediaSets>
|
||||
</install4j>
|
||||
@ -1,17 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>OpenRocket Test Libraries</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>OpenRocket Test Libraries</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
||||
@ -0,0 +1 @@
|
||||
open_collective: openrocket
|
||||