<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.openrocket.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SiboVG</id>
	<title>OpenRocket wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.openrocket.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SiboVG"/>
	<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/Special:Contributions/SiboVG"/>
	<updated>2026-04-09T02:08:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Feature_comparison&amp;diff=35959</id>
		<title>Feature comparison</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Feature_comparison&amp;diff=35959"/>
		<updated>2023-12-17T09:22:02Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: Add missing OR features&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;[[Resources|&amp;amp;larr; Resources (Appendix F)]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:150px;float: right;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Main Page|&amp;amp;uarr; Back to Contents]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UserGuideHelp}}&lt;br /&gt;
&lt;br /&gt;
This page provides a side-by-side feature comparison of &#039;&#039;&#039;OpenRocket&#039;&#039;&#039;, version 23.09, and &#039;&#039;&#039;RockSim&#039;&#039;&#039;, version 10.5.&lt;br /&gt;
&lt;br /&gt;
While hosted on the OpenRocket wiki site, we have attempted to make this an objective comparison between the functionality of the two software products.  If you think something is wrong or omitted, please [[User:Plaa|contact us]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;comparison&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | OpenRocket&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | RockSim&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Open Source (GPLv3)&lt;br /&gt;
| class=&amp;quot;poor&amp;quot; | Proprietary&lt;br /&gt;
|-&lt;br /&gt;
! Price&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Free&lt;br /&gt;
| class=&amp;quot;poor&amp;quot; | $124&lt;br /&gt;
|-&lt;br /&gt;
! Supported platforms&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Windows, Mac, Linux&lt;br /&gt;
| class=&amp;quot;okay&amp;quot; | Windows, Mac&lt;br /&gt;
|-&lt;br /&gt;
! Supported file formats&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | ORK, RKT, CDX1&lt;br /&gt;
| class=&amp;quot;poor&amp;quot; | RKT&lt;br /&gt;
|-&lt;br /&gt;
! Anti-piracy copy protection&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | None&lt;br /&gt;
| class=&amp;quot;okay&amp;quot; | [http://www.paceap.com/ PACE]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UI features ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;comparison&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | OpenRocket&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | RockSim&lt;br /&gt;
|-&lt;br /&gt;
! Side/back view&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! 3D view&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Photorealistic 3D rendering&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! Export 3D design&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes (OBJ)&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes (3DS)&lt;br /&gt;
|-&lt;br /&gt;
! Design view rotation&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Any angle&lt;br /&gt;
| class=&amp;quot;poor&amp;quot; | Side and top only&lt;br /&gt;
|-&lt;br /&gt;
! Live CG/CP view&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Realtime simulation&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Design features ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;comparison&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | OpenRocket&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | RockSim&lt;br /&gt;
|-&lt;br /&gt;
! Basic components&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Freeform fins&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Asymmetric fin configurations&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Tube fins&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Experimental&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Ring-tail fins&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Fins attached to fins&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! External pods&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Canted fins / roll stabilization&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! Standard component libraries&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Decals&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Clustering support&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes, modifiable&lt;br /&gt;
| class=&amp;quot;poor&amp;quot; | Yes, one-time wizard&lt;br /&gt;
|-&lt;br /&gt;
! Staging support&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes, unlimited&lt;br /&gt;
| class=&amp;quot;okay&amp;quot; | Yes, 3 stages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Simulation features ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;comparison&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | OpenRocket&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | RockSim&lt;br /&gt;
|-&lt;br /&gt;
! Degrees of freedom&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | 6DOF&lt;br /&gt;
| class=&amp;quot;okay&amp;quot; | 3DOF&lt;br /&gt;
|-&lt;br /&gt;
! Geodetic calculation (Earth coordinates, coriolis effect)&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! Simulations extensible by own code&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! Simulation animation&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Plotting any simulated variables&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Exporting simulated data&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Computing custom variables&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Optimization and analysis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;comparison&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | OpenRocket&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | RockSim&lt;br /&gt;
|-&lt;br /&gt;
! General design optimization&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! Mass optimization&lt;br /&gt;
| class=&amp;quot;okay&amp;quot; | Yes (using general optimizer)&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Stability analysis&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes, per component&lt;br /&gt;
| class=&amp;quot;okay&amp;quot; | Yes, per stage&lt;br /&gt;
|-&lt;br /&gt;
! Drag analysis&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes, per component&lt;br /&gt;
| class=&amp;quot;poor&amp;quot; | Yes, per stage&lt;br /&gt;
|-&lt;br /&gt;
! Roll analysis&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Printing ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;comparison&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | OpenRocket&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | RockSim&lt;br /&gt;
|-&lt;br /&gt;
! Schematic view&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Stability information&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Simulation results&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Parts list&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
! Component templates&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Nose cone, fin sets, centering rings&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Nose cone, fin sets, centering rings&lt;br /&gt;
|-&lt;br /&gt;
! Fin placement guide&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! Export to PDF&lt;br /&gt;
| class=&amp;quot;good&amp;quot; | Yes&lt;br /&gt;
| class=&amp;quot;bad&amp;quot; | No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
One attribute of interest when comparing pieces of software is how much each software is used and how much of a community exists around the software.  While it&#039;s impossible to get an objective measure of the usage and community activity, [http://www.google.com/trends/ Google Trends] does a rather good job at providing an indication of the relative interest levels over time.&lt;br /&gt;
&lt;br /&gt;
Since around 2014, OpenRocket and RockSim have received approximately the same amount of search hits.  The first version of OpenRocket was released in May 2009, RockSim in 1997.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;trends q=&amp;quot;RockSim,OpenRocket&amp;quot; date=&amp;quot;1/2009 108m&amp;quot; cmpt=&amp;quot;q&amp;quot; content=&amp;quot;1&amp;quot; cid=&amp;quot;TIMESERIES_GRAPH_0&amp;quot; export=&amp;quot;5&amp;quot; w=&amp;quot;700&amp;quot; h=&amp;quot;330&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;[[Resources|&amp;amp;larr; Resources (Appendix F)]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:150px;float: right;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Main Page|&amp;amp;uarr; Back to Contents]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Component_Details&amp;diff=34957</id>
		<title>Component Details</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Component_Details&amp;diff=34957"/>
		<updated>2022-02-24T00:55:52Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: /* Fin Sets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;These are all of the components that you can expect to utilize when designing in OpenRocket, although &amp;lt;i&amp;gt;individual components &amp;lt;b&amp;gt;will be shaded&amp;lt;/b&amp;gt; until available for use with other compatible components&amp;lt;/i&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.00.All.png|frameless|800 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;[[Component Details -- OpenRocket 15.02]]&amp;lt;/font color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Component Classes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The components available in OpenRocket are divided into four classes based upon component function. These classes are &amp;lt;i&amp;gt;assembly components&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;body components and fin sets&amp;lt;/i&amp;gt; (external components), &amp;lt;i&amp;gt;internal components&amp;lt;/i&amp;gt;, and &amp;lt;i&amp;gt;mass components&amp;lt;/i&amp;gt; (which include electronics and recovery components).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Assembly Components&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The assembly components allow you to create individual or multiple stages, and to add boosters and even pods.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.01.Assembly.png|frameless|280 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Assembly Components Basics]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Body Components and Fin Sets Class&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The body components and fin sets, including launch guides, allows you dramatic flexibility in designing rockets, from the most basic to the extremely complex. These components can be generally divided by purpose into three areas, components from which the outer airframe is made, the rockets fins, and the components that guide the rocket until it accelerates to a safe and stable speed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-FinAll.png|frameless|1000 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;Body Components&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The body components consist of the parts that make up the outer airframe of a rocket; nose cones, body tubes, and transitions. Although the top of virtually every rocket is a nose cone, OpenRocket allows these components to be combined in virtually any order, from simple model rockets with just a nose cone and a body tube, to complex designs that feature multiple body tube in a variety of diameters, with transitions in-between.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-Fin.Body.png|frameless|1000 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Body Components Basics]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;Fin Sets&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The fin sets components allow you to select fins from the traditional trapezoidal and elliptical shapes, to just about any shape you can think of by using the freeform fin set editor. And, with the click of a button, you can transform trapezoidal and elliptical fins to freeform so that you can easily change the look and feel of your fin sets. For those who favor ring fins, OpenRocket offers that option as well. And, you can mix and match fin types, such as having trapezoidal fins in-between ring fins.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-Fin.Fit_Sets.png|frameless|1100 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Fin Sets Basics]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;Launch Guides&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The launch guides components allow you to choose from launch lugs for low and mid power rockets to rail guides for your mid to high power needs. Although OpenRocket does not currently directly feature launch shoes, even that guide option may be simulated using the freeform fin set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-Fin.Launch_Guide.png|frameless|550 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Launch Guides Basics]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Inner Components&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The inner components literally makes the rocket work, from the inside out; without these components there would be very little holding your rocket together; these components provide the surfaces necessary to glue the parts as the rocket is assembled. These components include such things as couplers to hold body tube together, bulkheads for avionics bay lids, inner tubes for baffles, centering rings to mount inner motor tubes, and engine blocks to keep the motor from going inside the rocket on launch; these components have many other uses when designing a rocket. Everything you need to construct the skeleton of the rocket.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.03.00.Inner.png|frameless|1200 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Inner Components Basics]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Mass Components&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The mass components allow you to stabilize your rocket by adjusting its center of gravity and even to get your rocket back to the ground safely. This component class includes parachutes and streamers, shock cords and quick links, some electronic components, and the ability to create just about any other component you may need or can think of.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.03.00.Mass.png|frameless|960 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Mass Components Basics]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;[[FAQ|Frequently Asked Questions &amp;amp;larr;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;[[Tips|Tips and Tricks &amp;amp;rarr;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Main Page|&amp;amp;uarr; Back to Contents]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Component_Details&amp;diff=34859</id>
		<title>Component Details</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Component_Details&amp;diff=34859"/>
		<updated>2022-02-23T17:28:48Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: Fix underlines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;[[FAQ|&amp;amp;larr; Frequently Asked Questions (Appendix A)]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;[[Tips|Tips (Appendix C) &amp;amp;rarr;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Main Page|&amp;amp;uarr; Back to Contents]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UserGuideHelp}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;These are all of the components that you can expect to utilize when designing in OpenRocket, although &amp;lt;i&amp;gt;individual components &amp;lt;b&amp;gt;will be shaded&amp;lt;/b&amp;gt; until available for use with other compatible components&amp;lt;/i&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.00.All.png|frameless|800 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;[[Component Details -- OpenRocket 15.02]]&amp;lt;/font color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Component Classes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The components available in OpenRocket are divided into four classes based upon component function. These classes are &amp;lt;i&amp;gt;assembly components&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;body components and fin sets&amp;lt;/i&amp;gt; (external components), &amp;lt;i&amp;gt;internal components&amp;lt;/i&amp;gt;, and &amp;lt;i&amp;gt;mass components&amp;lt;/i&amp;gt; (which include electronics and recovery components).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Assembly Components&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The assembly components allow you to create individual or multiple stages, and to add boosters and even pods.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.01.Assembly.png|frameless|280 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Help with Assembly Components Basics]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Body Components and Fin Sets Class&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The body components and fin sets, including launch guides, allows you dramatic flexibility in designing rockets, from the most basic to the extremely complex. These components can be generally divided by purpose into three areas, components from which the outer airframe is made, the rockets fins, and the components that guide the rocket until it accelerates to a safe and stable speed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-FinAll.png|frameless|1000 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Body Components Class&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The body components consist of the parts that make up the outer airframe of a rocket; nose cones, body tubes, and transitions. Although the top of virtually every rocket is a nose cone, OpenRocket allows these components to be combined in virtually any order, from simple model rockets with just a nose cone and a body tube, to complex designs that feature multiple body tube in a variety of diameters, with transitions in-between.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-Fin.Body.png|frameless|1000 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Help with Body Components Basics]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Fin Sets Class&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The fin sets components allow you to select fins from the traditional trapezoidal and elliptical shapes, to just about any shape you can think of by using the freeform fin set editor. And, with the click of a button, you can transform trapezoidal and elliptical fins to freeform so that you can easily change the look and feel of your fin sets. For those who favor ring fins, Open rocket offers that option as well. And, you can mix and match fin types, such as having trapezoidal fins in-between ring fins.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-Fin.Fit_Sets.png|frameless|1100 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Help with Fin Sets Basics]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Launch Guides Class&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The launch guides components allow you to choose from launch lugs for low and mid power rockets to rail guides for your mid to high power needs. Although OpenRocket does not currently directly feature launch shoes, even that guide option may be simulated using the freeform fin set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.02.00.Body-Fin.Launch_Guide.png|frameless|550 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Help with Launch Guides Basics]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Inner Components Class&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The inner components literally makes the rocket work, from the inside out; without these components there would be very little holding your rocket together; these components provide the surfaces necessary to glue the parts as the rocket is assembled. These components include such things as couplers to hold body tube together, bulkheads for avionics bay lids, inner tubes for baffles, centering rings to mount inner motor tubes, and engine blocks to keep the motor from going inside the rocket on launch; these components have many other uses when designing a rocket. Everything you need to construct the skeleton of the rocket.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.03.00.Inner.png|frameless|1200 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Help with Inner Components Basics]]&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font size=&amp;quot;+1&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Mass Components Class&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The mass components allow you to stabilize your rocket by adjusting its center of gravity and even to get your rocket back to the ground safely. This component class includes parachutes and streamers, shock cords and quick links, some electronic components, and the ability to create just about any other component you may need or can think of.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[File:Components.03.00.Mass.png|frameless|960 px|Openrocket &amp;lt;i&amp;gt;components&amp;lt;/i&amp;gt;.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Help with Mass Components Basics]]&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Downloading_%26_Installing&amp;diff=34778</id>
		<title>Downloading &amp; Installing</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Downloading_%26_Installing&amp;diff=34778"/>
		<updated>2022-02-23T05:03:36Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: /* Download Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;[[Introduction|&amp;amp;larr; Introduction]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;[[Getting Started|Getting Started &amp;amp;rarr;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Main Page|&amp;amp;uarr; Back to Contents]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UserGuideHelp}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is available for Windows, macOS and Linux. &amp;lt;u&amp;gt;The easiest way to get OpenRocket up and running is to download and install one of the packaged installers&amp;lt;/u&amp;gt;. The Packaged Installers for OpenRocket come with everything needed. You &amp;lt;em&amp;gt;don&#039;t&amp;lt;/em&amp;gt; need to install, update or downgrade Java on your machine to run them.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Download Files&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;left&amp;quot; style=&amp;quot;width:900px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Downloadable File Type&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;OpenRocket 22.02.beta.01&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;(INACTIVE UNTIL RELEASE DATE)&amp;lt;/p&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;OpenRocket 15.03&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;p&amp;gt;(2015 VERSION)&amp;lt;/p&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Windows packaged installer&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.02.beta.01/OpenRocket-22.02.beta.01-installer.exe OpenRocket-22.02.beta.01-installer.exe]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03-installer.exe OpenRocket-15.03-installer.exe]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; macOS packaged installer&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.02.beta.01/OpenRocket-22.02.beta.01.dmg OpenRocket-22.02.beta.01.dmg]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.dmg OpenRocket-15.03.dmg]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Linux packaged installer&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.02.beta.01/OpenRocket-22.02.beta.01.AppImage OpenRocket-22.02.beta.01.AppImage]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.AppImage OpenRocket-15.03.AppImage]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; .jar&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.02.beta.01/OpenRocket-22.02.beta.01.jar OpenRocket-22.02.beta.01.jar]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.jar OpenRocket-15.03.jar]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Source code (.zip)&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-22.02.beta.01.zip OpenRocket-22.02.beta.01.zip]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-15.03.zip OpenRocket-15.03.zip]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Source code (.tar.gz)&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-22.02.beta.01.tar.gz OpenRocket-22.02.beta.01.tar.gz]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-15.03.tar.gz OpenRocket-15.03.tar.gz]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation Help ==&lt;br /&gt;
&lt;br /&gt;
[[Windows OS]]&lt;br /&gt;
&lt;br /&gt;
[[macOS]]&lt;br /&gt;
&lt;br /&gt;
[[Linux OS]]&lt;br /&gt;
&lt;br /&gt;
[[Other Installations]]&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Downloading_%26_Installing&amp;diff=34616</id>
		<title>Downloading &amp; Installing</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Downloading_%26_Installing&amp;diff=34616"/>
		<updated>2022-02-20T12:37:12Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: /* Running a &amp;quot;Jar&amp;quot; File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;[[Introduction|&amp;amp;larr; Introduction]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;[[Getting Started|Getting Started &amp;amp;rarr;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Main Page|&amp;amp;uarr; Back to Contents]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UserGuideHelp}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is available for Windows, macOS and Linux. &amp;lt;u&amp;gt;The easiest way to get OpenRocket up and running is to download and install one of the packaged installers&amp;lt;/u&amp;gt;. The Packaged Installers for OpenRocket come with everything needed. You &amp;lt;em&amp;gt;don&#039;t&amp;lt;/em&amp;gt; need to install, update or downgrade Java on your machine to run them.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Download Files&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;left&amp;quot; style=&amp;quot;width:720px&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;File Type&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;OpenRocket 22.00.beta.01&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;OpenRocket 15.03&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;center&amp;gt;&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;(INACTIVE UNTIL RELEASE DATE)&amp;lt;/p&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Windows&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01-installer.exe OpenRocket-22.00.beta.01-installer.exe]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03-installer.exe OpenRocket-15.03-installer.exe]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; macOS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01.dmg OpenRocket-22.00.beta.01.dmg]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.dmg OpenRocket-15.03.dmg]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Linux&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01.AppImage OpenRocket-22.00.beta.01.AppImage]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.AppImage OpenRocket-15.03.AppImage]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; .jar&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01.jar OpenRocket-22.00.beta.01.jar]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.jar OpenRocket-15.03.jar]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Source code (.zip)&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-22.00.beta.01.zip OpenRocket-22.00.beta.01.zip]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-15.03.zip OpenRocket-15.03.zip]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;bull; Source code (.tar.gz)&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-22.00.beta.01.tar.gz OpenRocket-22.00.beta.01.tar.gz]&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;[https://github.com/openrocket/openrocket/archive/refs/tags/release-15.03.tar.gz OpenRocket-15.03.tar.gz]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installers ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Windows&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Download the Windows installer for the version of OpenRocket that you want, then double-click on or open the file to run the installer, much like other Windows installers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2022 Beta Release ====&lt;br /&gt;
 &lt;br /&gt;
[https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01-installer.exe OpenRocket 22.00.beta.01 Installer for Windows &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(INACTIVE UNTIL RELEASE DATE)&amp;lt;/font color&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;Special notice&#039;&#039;&amp;lt;/u&amp;gt;: At the present time, this installer does not create a shortcut on the desktop or the start menu. After installing, the executable file for the application (OpenRocket.exe) is located in the &amp;quot;C:\ProgramFiles\OpenRocket” folder. For easy access to OpenRocket in the future, you can open that folder in Windows Explorer, right click the &amp;quot;OpenRocket.exe&amp;quot; file (NOT the “OpenRocket.jar” file), and create a shortcut, pin it to the taskbar, and/or pin it to the start menu, as you wish.&lt;br /&gt;
&lt;br /&gt;
==== 2015 Version 15.03 ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03-installer.exe OpenRocket 15.03 Installer for Windows]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;U&amp;gt;&#039;&#039;Please note&#039;&#039;&amp;lt;/U&amp;gt;: This installer &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;does not&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt; provide a shortcut on the desktop or the start menu. After installing, the actual executable file for the application is installed into your user/AppData/Local/OpenRocket folder. Open that folder in Windows Explorer, right click the &amp;quot;OpenRocket.exe&amp;quot; file (NOT the “OpenRocket.jar” file), and create a shortcut, pin it to the taskbar and/or pin it in the start menu, as you desire, for easy access to it in the future.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;macOS&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Download the DiskImage file for the version of OpenRocket that you want, open it, and you&#039;ll see a big icon for OpenRocket, and a shortcut to your Application folder. Drag OpenRocket to the Application Folder, let it finish copying, and you&#039;re done.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01.dmg OpenRocket 22.00.beta.01 Application DiskImage for macOS &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(INACTIVE UNTIL RELEASE DATE)&amp;lt;/font color&amp;gt;]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.dmg OpenRocket 15.03 Application DiskImage for macOS]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Linux&amp;lt;/u&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Before beginning, you will need to have the FUSE filesystem installed; most distributions have it installed by default. Download the AppImage file for the version of OpenRocket that you want, and run it by double-clicking, or from the command line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01.AppImage OpenRocket 22.00.beta.01 AppImage for Linux &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(INACTIVE UNTIL RELEASE DATE)&amp;lt;/font color&amp;gt;]&lt;br /&gt;
&amp;lt;p&amp;gt;[https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.AppImage OpenRocket 15.03 AppImage for Linux]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Special note&amp;lt;/i&amp;gt;: The AppImage is the preferred way to obtain OpenRocket for Linux, as OpenRocket 22.00.beta.01 requires Java 11 (LTS) and OpenRocket 15.03 requires Java 8 (LTS), neither of which is installed by default in most other distributions.&lt;br /&gt;
&lt;br /&gt;
== Running a &amp;quot;JAR&amp;quot; File ==&lt;br /&gt;
&lt;br /&gt;
Java is a programming language and computing platform that powers a large share of today’s digital world by providing a reliable platform upon which services and applications can be built. OpenRocket is one of these, and it will not function unless you have Java installed.&lt;br /&gt;
&lt;br /&gt;
Java is enhanced to improve performance, stability and security of the Java applications that run on your machine, and a new feature-release is issued every six months. And, every three years, an issued release is designated as Long-Term Support (LTS) and receives quarterly security, stability, and performance updates only, meaning the version does not changed when updated. To ensure the broadest possible compatibility and stability of the application, OpenRocket is intended to be used with Java LTS versions.&lt;br /&gt;
&lt;br /&gt;
 The OpenRocket installers are packaged with the correct version of Java for the OpenRocket version being installed, such that everything that OpenRocket needs to function correctly is installed during the installation process; &amp;lt;em&amp;gt;the Java version installed on your device &amp;lt;b&amp;gt;is ignored&amp;lt;/b&amp;gt;&amp;lt;/em&amp;gt;. So, the &amp;lt;u&amp;gt;easiest and most reliable way&amp;lt;/u&amp;gt; to use OpenRocket is to &amp;lt;strong&amp;gt;skip the .jar installation&amp;lt;/strong&amp;gt;, and, instead, &amp;lt;u&amp;gt;use the packaged installers&amp;lt;/u&amp;gt; for your device. &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;The use of a .jar version is not recommended&amp;lt;/font&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;2022 Beta Release&amp;lt;/u&amp;gt; ===&lt;br /&gt;
 &lt;br /&gt;
Although Java 17 (LTS) was released in September of 2021, beta development had progressed too far to provide for its compatibility. &amp;lt;u&amp;gt;The 2022 beta release of OpenRocket &amp;lt;b&amp;gt;requires the Java 11 (LTS) platform&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt;; OpenRocket 2022 beta releases are not intended to run with any other version of Java &amp;lt;em&amp;gt;at this time&amp;lt;/em&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Download the [https://github.com/openrocket/openrocket/releases/download/release-22.00.beta.01/OpenRocket-22.00.beta.01.jar OpenRocket 22.00.beta.01.jar &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(INACTIVE UNTIL RELEASE DATE)&amp;lt;/font&amp;gt;] application.&lt;br /&gt;
# Copy it to a convenient folder.&lt;br /&gt;
# Make the .jar file executable (if needed).&lt;br /&gt;
# Start OpenRocket by either double-clicking the .jar file, or right-clicking the .jar file and selecting &amp;quot;Open&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You man also start the .jar OpenRocket from the command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;java -jar /path_to/OpenRocket-22.00.beta.01.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
replacing &amp;quot;/path_to/&amp;quot; with the path to the .jar file on your system.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;u&amp;gt;Version 15.03&amp;lt;/u&amp;gt; ===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;u&amp;gt;OpenRocket 15.03 &amp;lt;b&amp;gt;requires the Java 8 (LTS) platform&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt;; OpenRocket 15.03 may not function correctly using any other version of Java.&lt;br /&gt;
&lt;br /&gt;
# Download the [https://github.com/openrocket/openrocket/releases/download/release-15.03/OpenRocket-15.03.jar OpenRocket-15.03.jar] file.&lt;br /&gt;
# Copy it to a convenient folder.&lt;br /&gt;
# Make the .jar file executable (right-click on .jar file, select &amp;quot;Properties&amp;quot;, go to the Permissions tab and check the &amp;quot;Allow executing file as program&amp;quot; box).&lt;br /&gt;
# Start OpenRocket by either double-clicking the .jar file, or right-clicking the .jar file, and selecting &amp;quot;Open with Sun Java6 Runtime&amp;quot;.&lt;br /&gt;
If the default is set to open with the Archive Manager, then right-click, select &amp;quot;Open with other application&amp;quot;, then select &amp;quot;Open with Sun Java6 Runtime&amp;quot;, and check the box to make that the default. In future, it should be possible to just double-click to start OpenRocket.&lt;br /&gt;
&lt;br /&gt;
Alternatively you may start OpenRocket from the command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;java -jar OpenRocket-15.03.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or, if you are not currently in the same directory as the .jar file, replace &#039;/path_to/&#039; by the appropriate path on your system:&lt;br /&gt;
&amp;lt;pre&amp;gt;java -jar /path_to/OpenRocket-15.03.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ubuntu/Debian Repository ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that if you install OpenRocket from a repository as in the following instructions, it will likely not work since it requires an older version of Java than is commonly distributed today.  Our next release is targeting newer versions of Java, and hopefully this will become a useful approach to installing again at that time.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are running a recent version of Ubuntu or Debian, then OpenRocket can be easily installed using the Ubuntu Software Center or Synaptic (etc.). Please note that the version in the distribution repository &#039;&#039;may not be the latest version&#039;&#039;. Alternatively you may install OpenRocket from the command line:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install openrocket&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install openrocket&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To start OpenRocket, simply select it from the Applications menu.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;[[Introduction|&amp;amp;larr; Introduction]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;[[Getting Started|Getting Started &amp;amp;rarr;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Main Page|&amp;amp;uarr; Back to Contents]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34568</id>
		<title>Developer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34568"/>
		<updated>2021-09-13T13:35:54Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: Updated with zipped XML information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Access}}&lt;br /&gt;
&lt;br /&gt;
This page contains information on the inner workings of OpenRocket and is meant primarily for developers interested in developing OpenRocket.&lt;br /&gt;
&lt;br /&gt;
In addition to this page, information can be found in the [http://openrocket.sourceforge.net/documentation.html Technical documentation] chapter 5.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the source code ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is primarily developed using [http://www.eclipse.org/ Eclipse], and it&#039;s the recommended IDE for compatibility.  Developers are free to use other IDE&#039;s, but everything may not work out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The source code is hosted on [https://github.com/openrocket/openrocket/ GitHub].  You need either to install the [http://www.eclipse.org/egit/ EGit] plugin to Eclipse, or use some other Git client (for example the command-line client).&lt;br /&gt;
&lt;br /&gt;
Using the command-line, the OpenRocket code can be retrieved by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://github.com/openrocket/openrocket.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This [https://sourcespy.com/github/openrocketopenrocket/ sourcespy dashboard] provides a high level overview of architecture, build process and dependencies of the project. It describes Ant [https://sourcespy.com/github/openrocketopenrocket/xx-otasks-.html tasks and dependencies], structure of [https://sourcespy.com/github/openrocketopenrocket/xx-ouiswing-.html UI classes],  and other components of the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The source packages available on the OpenRocket web site (*.zip) are meant for building the application from source code, &#039;&#039;&#039;NOT&#039;&#039;&#039; for development purposes.  They do not contain all the project files etc &lt;br /&gt;
&lt;br /&gt;
== Running OpenRocket from Eclipse (tested with Eclipse Luna and OpenRocket v15.03, September, 2015) ==&lt;br /&gt;
&lt;br /&gt;
The following steps should get you up and running with OpenRocket source code: &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) After downloading the source code, start Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
2) From the Eclipse main menu, select &amp;lt;b&amp;gt;File&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt; &lt;br /&gt;
3) In the &amp;lt;i&amp;gt;Import&amp;lt;/i&amp;gt; window that opens, select &amp;lt;b&amp;gt;General&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Existing Projects into Workspace&amp;lt;/b&amp;gt;, then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
4) In the &amp;lt;i&amp;gt;Select root directory&amp;lt;/i&amp;gt; field, browse to the location of the OpenRocket source code that you downloaded. &amp;lt;br/&amp;gt;&lt;br /&gt;
5) In the file browser that appears, click on the &amp;lt;b&amp;gt;openrocket&amp;lt;/b&amp;gt; root project directory. A list of projects should then appear in the &amp;lt;i&amp;gt;Projects&amp;lt;/i&amp;gt; pane on the import window. &amp;lt;br/&amp;gt;&lt;br /&gt;
6) Select only these three projects from the list: &amp;lt;b&amp;gt;OpenRocket Core&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;OpenRocket Swing&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;OpenRocket Test Libraries&amp;lt;/b&amp;gt;. (Note: As of v15.03 you no longer need to load the other projects to build OpenRocket on the desktop.) &amp;lt;br/&amp;gt;&lt;br /&gt;
7) Once those three projects have been selected, click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Eclipse should start with those three projects shown in the &amp;lt;i&amp;gt;Package Explorer&amp;lt;/i&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;NOTE: You might see errors in some source files, reporting that various Java classes cannot be found. If that happens, you might try these steps to resolve these issues: &amp;lt;/i&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) In the &amp;lt;i&amp;gt;Project Explorer&amp;lt;/i&amp;gt; pane in Eclipse, right-click on the project reporting the errors. Select &amp;lt;b&amp;gt;Properties&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
9) In the properties window that opens, select &amp;lt;b&amp;gt;Java Build Path&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
10) Make sure that the &amp;lt;i&amp;gt;JRE System Library&amp;lt;/i&amp;gt; for your version of Java is seen in the list of libraries. &amp;lt;br/&amp;gt;&lt;br /&gt;
11) If it is NOT included in the list, click the &amp;lt;b&amp;gt;Add Library&amp;lt;/b&amp;gt; button in the menu to the right. &amp;lt;br/&amp;gt;&lt;br /&gt;
12) From the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window that appears, select &amp;lt;b&amp;gt;JRE System Library&amp;lt;/b&amp;gt; from the list. Then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
13) Make sure that the correct &amp;lt;i&amp;gt;Workspace&amp;lt;/i&amp;gt; is selected in the next window that appears, and then click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Once the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window closes, you should then see the JRE System Library added to the list of libraries in the project properties window. &amp;lt;br/&amp;gt;&lt;br /&gt;
14) Click &amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;. Once the project properties window closes you will be returned to Eclipse, and hopefully the errors reported by the IDE will then resolve. &amp;lt;br/&amp;gt;&lt;br /&gt;
15) If there are still errors, you&#039;ll need to revert to Google for additional help. Googling the exact error string reported by Eclipse will most likely help you resolve any outstanding dependency issues. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;***&amp;lt;/b&amp;gt; Also note that the main entry point for OpenRocket is in the &amp;lt;i&amp;gt;OpenRocket Swing&amp;lt;/i&amp;gt; project, in the &amp;lt;b&amp;gt;net.sf.openrocket.startup.SwingStartup.java&amp;lt;/b&amp;gt; file. With that file active OpenRocket should build and start. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, remember that help is available either in the OpenRocket forums or in the main developers list. Good Luck! &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking TODO&#039;s ==&lt;br /&gt;
&lt;br /&gt;
Often when writing code you know that something could be done better, but at the moment is either impossible or unreasonable.  These are commonly marked with a TODO comment.  The following convension is used to mark the importance of different TODO&#039;s:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: CRITICAL: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; A bug or something that is not yet implemented, and must be corrected before any release is made.  The Ant build script checks for these and prevents building if such a comment is found.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: HIGH: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; An important issue that should be looked into within this or the next major release.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: MEDIUM: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would make the software better, but does not represent a problem as such.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: LOW: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would be nice to do better in the future&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== LogBack ===&lt;br /&gt;
&lt;br /&gt;
As of version 13.05, OpenRocket uses [http://logback.qos.ch/index.html LogBack] for logging.&lt;br /&gt;
&lt;br /&gt;
If you want to change the default logging that OpenRocket uses, you can create or reuse a LogBack configuration file stored in openrocket/core/config. For example, you can use the logback-stdout-level-error.xml there which tells logback to log everything to stdout with logging level of Error (serious errors only).&lt;br /&gt;
&lt;br /&gt;
To enable use of a LogBack configuration file, pass the JVM the following option during startup:&lt;br /&gt;
&lt;br /&gt;
 -Dlogback.configurationFile=&amp;lt;directory of openrocket source code&amp;gt;/openrocket/core/config/logback-stdout-level-error.xml&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, that is because the logging level is set to Error, as mentioned previously. You can change the logging level to e.g. show debug information (see [https://wiki.openrocket.info/Developer%27s_Guide#Probably_Obsolete_Debugging_Info this section]) by passing the following options to the JVM:&lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
 -Dopenrocket.debug&lt;br /&gt;
&lt;br /&gt;
See the [http://logback.qos.ch/manual/configuration.html#configFileProperty LogBack configuration page] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Probably Obsolete Debugging Info ===&lt;br /&gt;
&lt;br /&gt;
Log messages in openrocket are specified by one of six levels. You can specify which level of errors you want reported to standard out with a system property which you can add to your VM argument, e.g:&lt;br /&gt;
 &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
&lt;br /&gt;
The error levels available are:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;ERROR&#039;&#039;&#039; - Level for indicating a bug or error condition noticed in the software or JRE. No ERROR level events _should_ occur while running the program.&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;WARN&#039;&#039;&#039; - Level for indicating error conditions or atypical events that can occur during normal operation (errors while loading files, weird computation results etc).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;USER&#039;&#039;&#039; - Level for logging user actions (adding and modifying components, running simulations etc).  A user action should be logged as soon as possible on this level.  The level is separate so that additional INFO messages won&#039;t purge user actions from a bounded log buffer.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;INFO&#039;&#039;&#039; - Level for indicating general level actions the software is performing and other notable events during execution (dialogs shown, simulations run etc)&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;DEBUG&#039;&#039;&#039; - Level for indicating mid-results, outcomes of methods and other debugging information.  The data logged should be of value when analyzing error conditions and what has caused them.  Places that are called repeatedly during e.g. flight simulation should use the VBOSE level instead.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;VBOSE&#039;&#039;&#039; - Level of verbose debug logging to be used in areas which are called repeatedly, such as computational methods used in simulations.  This level is separated to allow filtering out the verbose logs generated during simulations, DnD etc. from the normal debug logs.&lt;br /&gt;
&lt;br /&gt;
In the code, the standard way to log errors is with &lt;br /&gt;
 &lt;br /&gt;
 log.verbose(&amp;quot;Error message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
where log is defined in each class as :&lt;br /&gt;
 &lt;br /&gt;
 private static final LogHelper log = Application.getLogger();&lt;br /&gt;
&lt;br /&gt;
== Units used in OpenRocket ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket always uses internally pure SI units.  For example all rocket dimensions and flight distances are in meters, all masses are in kilograms, density is in kg/m³, temperature is in Kelvin etc.  This convention is also used when storing the design in the OpenRocket format.&lt;br /&gt;
&lt;br /&gt;
The only exception to this rule is angles:&lt;br /&gt;
* Angles are represented as radians internally, but in the file format they are converted to degrees.  This is to make the file format more human-readable and to avoid rounding errors.&lt;br /&gt;
* Latitude and longitude of the launch site are represented in degrees both internally and externally.&lt;br /&gt;
&lt;br /&gt;
When displaying measures to the user, the values are converted into the preferred units of the user.  This is performed using classes in the package &amp;lt;tt&amp;gt;net.sf.openrocket.unit&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;Unit&amp;lt;/tt&amp;gt; class represents a single unit and it includes methods for converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.  A &amp;lt;tt&amp;gt;UnitGroup&amp;lt;/tt&amp;gt; describes a measurable quantity such as temperature and contains the units available for that quantity, such as Celcius, Fahrenheit and Kelvin.&lt;br /&gt;
&lt;br /&gt;
== Rocket design loading and saving ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(This section is based on email correspondence)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All file reading/writing is performed in the package&lt;br /&gt;
&amp;lt;tt&amp;gt;net.sf.openrocket.file&amp;lt;/tt&amp;gt; and subpackages.  To implement a new&lt;br /&gt;
document loader it is necessary to extend the class &amp;lt;tt&amp;gt;RocketLoader&amp;lt;/tt&amp;gt; and&lt;br /&gt;
implement the abstract method &amp;lt;tt&amp;gt;loadFromStream(InputStream)&amp;lt;/tt&amp;gt;.  This&lt;br /&gt;
method simply loads the document and returns an &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt;&lt;br /&gt;
object.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt; contains all the information about an opened&lt;br /&gt;
document, primarily the rocket structure and the simulations.  The&lt;br /&gt;
rocket structure is a simple tree-like structure of &amp;lt;tt&amp;gt;RocketComponents&amp;lt;/tt&amp;gt;.&lt;br /&gt;
All of the components are in the package &amp;lt;tt&amp;gt;.rocketcomponent&amp;lt;/tt&amp;gt;.  A diagram&lt;br /&gt;
of their hierarchy and a short explanation of each class is available&lt;br /&gt;
in my thesis section 5.1&lt;br /&gt;
(http://openrocket.sourceforge.net/documentation.html)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve implemented a simple XML reading framework (based on SAX), which&lt;br /&gt;
simplifies reading by assuming that XML elements can contain only&lt;br /&gt;
other elements or text content, but not both.  Both the OpenRocket and&lt;br /&gt;
Rocksim format abide with this restriction.&lt;br /&gt;
&lt;br /&gt;
The framework is in the package &amp;lt;tt&amp;gt;.file.simplesax&amp;lt;/tt&amp;gt;.  The primary class&lt;br /&gt;
that will be extended is &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;, which contains three methods.&lt;br /&gt;
&amp;lt;tt&amp;gt;openElement()&amp;lt;/tt&amp;gt; is called when a new subelement is found, and it&lt;br /&gt;
returns a new &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt; to handle that element (which can be the&lt;br /&gt;
object itself), or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; in order to ignore that element and all of its&lt;br /&gt;
contents (for example for unknown elements). &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt; is called&lt;br /&gt;
when the subelement ends, and &amp;lt;tt&amp;gt;endHandler()&amp;lt;/tt&amp;gt; is called when the element&lt;br /&gt;
of the current handler ends.  The JavaDoc should provide the necessary&lt;br /&gt;
details.&lt;br /&gt;
&lt;br /&gt;
There are a few ready handlers, the most useful of which will probably&lt;br /&gt;
be &amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt;.  This handler accepts only text content and&lt;br /&gt;
ignores all subelements.  If the XML file contains&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;element&amp;gt;value&amp;lt;/element&amp;gt;&amp;lt;/nowiki&amp;gt;, then the handler can return a&lt;br /&gt;
&amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt; and handle the content within the &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt;&lt;br /&gt;
method, removing the need to write a specialized handler for that&lt;br /&gt;
element.&lt;br /&gt;
&lt;br /&gt;
The XML reading is initiated by calling &amp;lt;tt&amp;gt;SimpleSAX.readXML()&amp;lt;/tt&amp;gt; with the&lt;br /&gt;
input source and the initial &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The OpenRocket document loading is implemented in&lt;br /&gt;
&amp;lt;tt&amp;gt;.file.openrocket.OpenRocketLoader&amp;lt;/tt&amp;gt;.  Here I&#039;ve used a bit more&lt;br /&gt;
boilerplate code to be able to define most of the rocket structure&lt;br /&gt;
preferences without needing separate handlers for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The OpenRocket format (*.ork) ===&lt;br /&gt;
&lt;br /&gt;
The OpenRocket native format uses the file extension *.ork.  It is an XML format, which can optionally be compressed using GZIP.  (The extension *.ork.gz is also accepted by the dialogs, though plain .ork is recommended.)&lt;br /&gt;
&lt;br /&gt;
The core data format of an OpenRocket file is XML. However, the .ork-file that OpenRocket generates is a zipped XML file. This is because besides purely OpenRocket data, stored in XML, other data may also have to be stored, like for example custom decal images. To view the actual contents of the OpenRocket file, you can change the file extension of e.g. &#039;test.ork&#039; to &#039;test.zip&#039; and then unzip that zip-file. Depending on whether you do or don&#039;t have other data besides the XML-data, unzipping the file will simply return a &#039;rocket.ork&#039;-file, which is pure XML (you can open this in any text editor), or a directory containing the &#039;rocket.ork&#039;-file and other files/directories with e.g. decal images.&lt;br /&gt;
&lt;br /&gt;
Currently the file format is not documented other than as the reference implementation, and no XML schema exists.  This will hopefully change in the future.  See [[#Units used in OpenRocket]] for details on units.&lt;br /&gt;
&lt;br /&gt;
Every time the XML format changes, the file version number is increased.  This version number is not linked to the version of OpenRocket that created the file, but instead describes the file format.  Later versions of OpenRocket should attempt to store files in the oldest format that supports all the necessary features.  The changes in the format are described in the [http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/fileformat.txt fileformat.txt file in SVN].&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34567</id>
		<title>Developer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34567"/>
		<updated>2021-09-13T13:01:09Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Access}}&lt;br /&gt;
&lt;br /&gt;
This page contains information on the inner workings of OpenRocket and is meant primarily for developers interested in developing OpenRocket.&lt;br /&gt;
&lt;br /&gt;
In addition to this page, information can be found in the [http://openrocket.sourceforge.net/documentation.html Technical documentation] chapter 5.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the source code ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is primarily developed using [http://www.eclipse.org/ Eclipse], and it&#039;s the recommended IDE for compatibility.  Developers are free to use other IDE&#039;s, but everything may not work out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The source code is hosted on [https://github.com/openrocket/openrocket/ GitHub].  You need either to install the [http://www.eclipse.org/egit/ EGit] plugin to Eclipse, or use some other Git client (for example the command-line client).&lt;br /&gt;
&lt;br /&gt;
Using the command-line, the OpenRocket code can be retrieved by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://github.com/openrocket/openrocket.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This [https://sourcespy.com/github/openrocketopenrocket/ sourcespy dashboard] provides a high level overview of architecture, build process and dependencies of the project. It describes Ant [https://sourcespy.com/github/openrocketopenrocket/xx-otasks-.html tasks and dependencies], structure of [https://sourcespy.com/github/openrocketopenrocket/xx-ouiswing-.html UI classes],  and other components of the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The source packages available on the OpenRocket web site (*.zip) are meant for building the application from source code, &#039;&#039;&#039;NOT&#039;&#039;&#039; for development purposes.  They do not contain all the project files etc &lt;br /&gt;
&lt;br /&gt;
== Running OpenRocket from Eclipse (tested with Eclipse Luna and OpenRocket v15.03, September, 2015) ==&lt;br /&gt;
&lt;br /&gt;
The following steps should get you up and running with OpenRocket source code: &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) After downloading the source code, start Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
2) From the Eclipse main menu, select &amp;lt;b&amp;gt;File&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt; &lt;br /&gt;
3) In the &amp;lt;i&amp;gt;Import&amp;lt;/i&amp;gt; window that opens, select &amp;lt;b&amp;gt;General&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Existing Projects into Workspace&amp;lt;/b&amp;gt;, then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
4) In the &amp;lt;i&amp;gt;Select root directory&amp;lt;/i&amp;gt; field, browse to the location of the OpenRocket source code that you downloaded. &amp;lt;br/&amp;gt;&lt;br /&gt;
5) In the file browser that appears, click on the &amp;lt;b&amp;gt;openrocket&amp;lt;/b&amp;gt; root project directory. A list of projects should then appear in the &amp;lt;i&amp;gt;Projects&amp;lt;/i&amp;gt; pane on the import window. &amp;lt;br/&amp;gt;&lt;br /&gt;
6) Select only these three projects from the list: &amp;lt;b&amp;gt;OpenRocket Core&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;OpenRocket Swing&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;OpenRocket Test Libraries&amp;lt;/b&amp;gt;. (Note: As of v15.03 you no longer need to load the other projects to build OpenRocket on the desktop.) &amp;lt;br/&amp;gt;&lt;br /&gt;
7) Once those three projects have been selected, click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Eclipse should start with those three projects shown in the &amp;lt;i&amp;gt;Package Explorer&amp;lt;/i&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;NOTE: You might see errors in some source files, reporting that various Java classes cannot be found. If that happens, you might try these steps to resolve these issues: &amp;lt;/i&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) In the &amp;lt;i&amp;gt;Project Explorer&amp;lt;/i&amp;gt; pane in Eclipse, right-click on the project reporting the errors. Select &amp;lt;b&amp;gt;Properties&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
9) In the properties window that opens, select &amp;lt;b&amp;gt;Java Build Path&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
10) Make sure that the &amp;lt;i&amp;gt;JRE System Library&amp;lt;/i&amp;gt; for your version of Java is seen in the list of libraries. &amp;lt;br/&amp;gt;&lt;br /&gt;
11) If it is NOT included in the list, click the &amp;lt;b&amp;gt;Add Library&amp;lt;/b&amp;gt; button in the menu to the right. &amp;lt;br/&amp;gt;&lt;br /&gt;
12) From the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window that appears, select &amp;lt;b&amp;gt;JRE System Library&amp;lt;/b&amp;gt; from the list. Then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
13) Make sure that the correct &amp;lt;i&amp;gt;Workspace&amp;lt;/i&amp;gt; is selected in the next window that appears, and then click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Once the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window closes, you should then see the JRE System Library added to the list of libraries in the project properties window. &amp;lt;br/&amp;gt;&lt;br /&gt;
14) Click &amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;. Once the project properties window closes you will be returned to Eclipse, and hopefully the errors reported by the IDE will then resolve. &amp;lt;br/&amp;gt;&lt;br /&gt;
15) If there are still errors, you&#039;ll need to revert to Google for additional help. Googling the exact error string reported by Eclipse will most likely help you resolve any outstanding dependency issues. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;***&amp;lt;/b&amp;gt; Also note that the main entry point for OpenRocket is in the &amp;lt;i&amp;gt;OpenRocket Swing&amp;lt;/i&amp;gt; project, in the &amp;lt;b&amp;gt;net.sf.openrocket.startup.SwingStartup.java&amp;lt;/b&amp;gt; file. With that file active OpenRocket should build and start. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, remember that help is available either in the OpenRocket forums or in the main developers list. Good Luck! &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking TODO&#039;s ==&lt;br /&gt;
&lt;br /&gt;
Often when writing code you know that something could be done better, but at the moment is either impossible or unreasonable.  These are commonly marked with a TODO comment.  The following convension is used to mark the importance of different TODO&#039;s:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: CRITICAL: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; A bug or something that is not yet implemented, and must be corrected before any release is made.  The Ant build script checks for these and prevents building if such a comment is found.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: HIGH: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; An important issue that should be looked into within this or the next major release.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: MEDIUM: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would make the software better, but does not represent a problem as such.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: LOW: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would be nice to do better in the future&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== LogBack ===&lt;br /&gt;
&lt;br /&gt;
As of version 13.05, OpenRocket uses [http://logback.qos.ch/index.html LogBack] for logging.&lt;br /&gt;
&lt;br /&gt;
If you want to change the default logging that OpenRocket uses, you can create or reuse a LogBack configuration file stored in openrocket/core/config. For example, you can use the logback-stdout-level-error.xml there which tells logback to log everything to stdout with logging level of Error (serious errors only).&lt;br /&gt;
&lt;br /&gt;
To enable use of a LogBack configuration file, pass the JVM the following option during startup:&lt;br /&gt;
&lt;br /&gt;
 -Dlogback.configurationFile=&amp;lt;directory of openrocket source code&amp;gt;/openrocket/core/config/logback-stdout-level-error.xml&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, that is because the logging level is set to Error, as mentioned previously. You can change the logging level to e.g. show debug information (see [https://wiki.openrocket.info/Developer%27s_Guide#Probably_Obsolete_Debugging_Info this section]) by passing the following options to the JVM:&lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
 -Dopenrocket.debug&lt;br /&gt;
&lt;br /&gt;
See the [http://logback.qos.ch/manual/configuration.html#configFileProperty LogBack configuration page] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Probably Obsolete Debugging Info ===&lt;br /&gt;
&lt;br /&gt;
Log messages in openrocket are specified by one of six levels. You can specify which level of errors you want reported to standard out with a system property which you can add to your VM argument, e.g:&lt;br /&gt;
 &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
&lt;br /&gt;
The error levels available are:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;ERROR&#039;&#039;&#039; - Level for indicating a bug or error condition noticed in the software or JRE. No ERROR level events _should_ occur while running the program.&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;WARN&#039;&#039;&#039; - Level for indicating error conditions or atypical events that can occur during normal operation (errors while loading files, weird computation results etc).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;USER&#039;&#039;&#039; - Level for logging user actions (adding and modifying components, running simulations etc).  A user action should be logged as soon as possible on this level.  The level is separate so that additional INFO messages won&#039;t purge user actions from a bounded log buffer.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;INFO&#039;&#039;&#039; - Level for indicating general level actions the software is performing and other notable events during execution (dialogs shown, simulations run etc)&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;DEBUG&#039;&#039;&#039; - Level for indicating mid-results, outcomes of methods and other debugging information.  The data logged should be of value when analyzing error conditions and what has caused them.  Places that are called repeatedly during e.g. flight simulation should use the VBOSE level instead.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;VBOSE&#039;&#039;&#039; - Level of verbose debug logging to be used in areas which are called repeatedly, such as computational methods used in simulations.  This level is separated to allow filtering out the verbose logs generated during simulations, DnD etc. from the normal debug logs.&lt;br /&gt;
&lt;br /&gt;
In the code, the standard way to log errors is with &lt;br /&gt;
 &lt;br /&gt;
 log.verbose(&amp;quot;Error message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
where log is defined in each class as :&lt;br /&gt;
 &lt;br /&gt;
 private static final LogHelper log = Application.getLogger();&lt;br /&gt;
&lt;br /&gt;
== Units used in OpenRocket ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket always uses internally pure SI units.  For example all rocket dimensions and flight distances are in meters, all masses are in kilograms, density is in kg/m³, temperature is in Kelvin etc.  This convention is also used when storing the design in the OpenRocket format.&lt;br /&gt;
&lt;br /&gt;
The only exception to this rule is angles:&lt;br /&gt;
* Angles are represented as radians internally, but in the file format they are converted to degrees.  This is to make the file format more human-readable and to avoid rounding errors.&lt;br /&gt;
* Latitude and longitude of the launch site are represented in degrees both internally and externally.&lt;br /&gt;
&lt;br /&gt;
When displaying measures to the user, the values are converted into the preferred units of the user.  This is performed using classes in the package &amp;lt;tt&amp;gt;net.sf.openrocket.unit&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;Unit&amp;lt;/tt&amp;gt; class represents a single unit and it includes methods for converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.  A &amp;lt;tt&amp;gt;UnitGroup&amp;lt;/tt&amp;gt; describes a measurable quantity such as temperature and contains the units available for that quantity, such as Celcius, Fahrenheit and Kelvin.&lt;br /&gt;
&lt;br /&gt;
== Rocket design loading and saving ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(This section is based on email correspondence)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All file reading/writing is performed in the package&lt;br /&gt;
&amp;lt;tt&amp;gt;net.sf.openrocket.file&amp;lt;/tt&amp;gt; and subpackages.  To implement a new&lt;br /&gt;
document loader it is necessary to extend the class &amp;lt;tt&amp;gt;RocketLoader&amp;lt;/tt&amp;gt; and&lt;br /&gt;
implement the abstract method &amp;lt;tt&amp;gt;loadFromStream(InputStream)&amp;lt;/tt&amp;gt;.  This&lt;br /&gt;
method simply loads the document and returns an &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt;&lt;br /&gt;
object.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt; contains all the information about an opened&lt;br /&gt;
document, primarily the rocket structure and the simulations.  The&lt;br /&gt;
rocket structure is a simple tree-like structure of &amp;lt;tt&amp;gt;RocketComponents&amp;lt;/tt&amp;gt;.&lt;br /&gt;
All of the components are in the package &amp;lt;tt&amp;gt;.rocketcomponent&amp;lt;/tt&amp;gt;.  A diagram&lt;br /&gt;
of their hierarchy and a short explanation of each class is available&lt;br /&gt;
in my thesis section 5.1&lt;br /&gt;
(http://openrocket.sourceforge.net/documentation.html)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve implemented a simple XML reading framework (based on SAX), which&lt;br /&gt;
simplifies reading by assuming that XML elements can contain only&lt;br /&gt;
other elements or text content, but not both.  Both the OpenRocket and&lt;br /&gt;
Rocksim format abide with this restriction.&lt;br /&gt;
&lt;br /&gt;
The framework is in the package &amp;lt;tt&amp;gt;.file.simplesax&amp;lt;/tt&amp;gt;.  The primary class&lt;br /&gt;
that will be extended is &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;, which contains three methods.&lt;br /&gt;
&amp;lt;tt&amp;gt;openElement()&amp;lt;/tt&amp;gt; is called when a new subelement is found, and it&lt;br /&gt;
returns a new &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt; to handle that element (which can be the&lt;br /&gt;
object itself), or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; in order to ignore that element and all of its&lt;br /&gt;
contents (for example for unknown elements). &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt; is called&lt;br /&gt;
when the subelement ends, and &amp;lt;tt&amp;gt;endHandler()&amp;lt;/tt&amp;gt; is called when the element&lt;br /&gt;
of the current handler ends.  The JavaDoc should provide the necessary&lt;br /&gt;
details.&lt;br /&gt;
&lt;br /&gt;
There are a few ready handlers, the most useful of which will probably&lt;br /&gt;
be &amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt;.  This handler accepts only text content and&lt;br /&gt;
ignores all subelements.  If the XML file contains&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;element&amp;gt;value&amp;lt;/element&amp;gt;&amp;lt;/nowiki&amp;gt;, then the handler can return a&lt;br /&gt;
&amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt; and handle the content within the &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt;&lt;br /&gt;
method, removing the need to write a specialized handler for that&lt;br /&gt;
element.&lt;br /&gt;
&lt;br /&gt;
The XML reading is initiated by calling &amp;lt;tt&amp;gt;SimpleSAX.readXML()&amp;lt;/tt&amp;gt; with the&lt;br /&gt;
input source and the initial &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The OpenRocket document loading is implemented in&lt;br /&gt;
&amp;lt;tt&amp;gt;.file.openrocket.OpenRocketLoader&amp;lt;/tt&amp;gt;.  Here I&#039;ve used a bit more&lt;br /&gt;
boilerplate code to be able to define most of the rocket structure&lt;br /&gt;
preferences without needing separate handlers for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The OpenRocket format (*.ork) ===&lt;br /&gt;
&lt;br /&gt;
The OpenRocket native format uses the file extension *.ork.  It is an XML format, which can optionally be compressed using GZIP.  (The extension *.ork.gz is also accepted by the dialogs, though plain .ork is recommended.)&lt;br /&gt;
&lt;br /&gt;
Currently the file format is not documented other than as the reference implementation, and no XML schema exists.  This will hopefully change in the future.  See [[#Units used in OpenRocket]] for details on units.&lt;br /&gt;
&lt;br /&gt;
Every time the XML format changes, the file version number is increased.  This version number is not linked to the version of OpenRocket that created the file, but instead describes the file format.  Later versions of OpenRocket should attempt to store files in the oldest format that supports all the necessary features.  The changes in the format are described in the [http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/fileformat.txt fileformat.txt file in SVN].&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34566</id>
		<title>Developer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34566"/>
		<updated>2021-09-13T13:00:09Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: Add debug level link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Access}}&lt;br /&gt;
&lt;br /&gt;
This page contains information on the inner workings of OpenRocket and is meant primarily for developers interested in developing OpenRocket.&lt;br /&gt;
&lt;br /&gt;
In addition to this page, information can be found in the [http://openrocket.sourceforge.net/documentation.html Technical documentation] chapter 5.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the source code ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is primarily developed using [http://www.eclipse.org/ Eclipse], and it&#039;s the recommended IDE for compatibility.  Developers are free to use other IDE&#039;s, but everything may not work out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The source code is hosted on [https://github.com/openrocket/openrocket/ GitHub].  You need either to install the [http://www.eclipse.org/egit/ EGit] plugin to Eclipse, or use some other Git client (for example the command-line client).&lt;br /&gt;
&lt;br /&gt;
Using the command-line, the OpenRocket code can be retrieved by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://github.com/openrocket/openrocket.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This [https://sourcespy.com/github/openrocketopenrocket/ sourcespy dashboard] provides a high level overview of architecture, build process and dependencies of the project. It describes Ant [https://sourcespy.com/github/openrocketopenrocket/xx-otasks-.html tasks and dependencies], structure of [https://sourcespy.com/github/openrocketopenrocket/xx-ouiswing-.html UI classes],  and other components of the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The source packages available on the OpenRocket web site (*.zip) are meant for building the application from source code, &#039;&#039;&#039;NOT&#039;&#039;&#039; for development purposes.  They do not contain all the project files etc &lt;br /&gt;
&lt;br /&gt;
== Running OpenRocket from Eclipse (tested with Eclipse Luna and OpenRocket v15.03, September, 2015) ==&lt;br /&gt;
&lt;br /&gt;
The following steps should get you up and running with OpenRocket source code: &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) After downloading the source code, start Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
2) From the Eclipse main menu, select &amp;lt;b&amp;gt;File&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt; &lt;br /&gt;
3) In the &amp;lt;i&amp;gt;Import&amp;lt;/i&amp;gt; window that opens, select &amp;lt;b&amp;gt;General&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Existing Projects into Workspace&amp;lt;/b&amp;gt;, then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
4) In the &amp;lt;i&amp;gt;Select root directory&amp;lt;/i&amp;gt; field, browse to the location of the OpenRocket source code that you downloaded. &amp;lt;br/&amp;gt;&lt;br /&gt;
5) In the file browser that appears, click on the &amp;lt;b&amp;gt;openrocket&amp;lt;/b&amp;gt; root project directory. A list of projects should then appear in the &amp;lt;i&amp;gt;Projects&amp;lt;/i&amp;gt; pane on the import window. &amp;lt;br/&amp;gt;&lt;br /&gt;
6) Select only these three projects from the list: &amp;lt;b&amp;gt;OpenRocket Core&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;OpenRocket Swing&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;OpenRocket Test Libraries&amp;lt;/b&amp;gt;. (Note: As of v15.03 you no longer need to load the other projects to build OpenRocket on the desktop.) &amp;lt;br/&amp;gt;&lt;br /&gt;
7) Once those three projects have been selected, click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Eclipse should start with those three projects shown in the &amp;lt;i&amp;gt;Package Explorer&amp;lt;/i&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;NOTE: You might see errors in some source files, reporting that various Java classes cannot be found. If that happens, you might try these steps to resolve these issues: &amp;lt;/i&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) In the &amp;lt;i&amp;gt;Project Explorer&amp;lt;/i&amp;gt; pane in Eclipse, right-click on the project reporting the errors. Select &amp;lt;b&amp;gt;Properties&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
9) In the properties window that opens, select &amp;lt;b&amp;gt;Java Build Path&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
10) Make sure that the &amp;lt;i&amp;gt;JRE System Library&amp;lt;/i&amp;gt; for your version of Java is seen in the list of libraries. &amp;lt;br/&amp;gt;&lt;br /&gt;
11) If it is NOT included in the list, click the &amp;lt;b&amp;gt;Add Library&amp;lt;/b&amp;gt; button in the menu to the right. &amp;lt;br/&amp;gt;&lt;br /&gt;
12) From the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window that appears, select &amp;lt;b&amp;gt;JRE System Library&amp;lt;/b&amp;gt; from the list. Then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
13) Make sure that the correct &amp;lt;i&amp;gt;Workspace&amp;lt;/i&amp;gt; is selected in the next window that appears, and then click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Once the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window closes, you should then see the JRE System Library added to the list of libraries in the project properties window. &amp;lt;br/&amp;gt;&lt;br /&gt;
14) Click &amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;. Once the project properties window closes you will be returned to Eclipse, and hopefully the errors reported by the IDE will then resolve. &amp;lt;br/&amp;gt;&lt;br /&gt;
15) If there are still errors, you&#039;ll need to revert to Google for additional help. Googling the exact error string reported by Eclipse will most likely help you resolve any outstanding dependency issues. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;***&amp;lt;/b&amp;gt; Also note that the main entry point for OpenRocket is in the &amp;lt;i&amp;gt;OpenRocket Swing&amp;lt;/i&amp;gt; project, in the &amp;lt;b&amp;gt;net.sf.openrocket.startup.SwingStartup.java&amp;lt;/b&amp;gt; file. With that file active OpenRocket should build and start. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, remember that help is available either in the OpenRocket forums or in the main developers list. Good Luck! &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking TODO&#039;s ==&lt;br /&gt;
&lt;br /&gt;
Often when writing code you know that something could be done better, but at the moment is either impossible or unreasonable.  These are commonly marked with a TODO comment.  The following convension is used to mark the importance of different TODO&#039;s:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: CRITICAL: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; A bug or something that is not yet implemented, and must be corrected before any release is made.  The Ant build script checks for these and prevents building if such a comment is found.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: HIGH: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; An important issue that should be looked into within this or the next major release.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: MEDIUM: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would make the software better, but does not represent a problem as such.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: LOW: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would be nice to do better in the future&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== LogBack ===&lt;br /&gt;
&lt;br /&gt;
As of version 13.05, OpenRocket uses [http://logback.qos.ch/index.html LogBack] for logging.&lt;br /&gt;
&lt;br /&gt;
If you want to change the default logging that OpenRocket uses, you can create or reuse a LogBack configuration file stored in openrocket/core/config. For example, you can use the logback-stdout-level-error.xml there which tells logback to log everything to stdout with logging level of Error (serious errors only).&lt;br /&gt;
&lt;br /&gt;
To enable use of a LogBack configuration file, pass the JVM the following option during startup:&lt;br /&gt;
&lt;br /&gt;
 -Dlogback.configurationFile=&amp;lt;directory of openrocket source code&amp;gt;/openrocket/core/config/logback-stdout-level-error.xml&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, that is because the logging level is set to Error, as mentioned previously. You can change the logging level to e.g. show debug information (see [https://wiki.openrocket.info/Developer%27s_Guide#Probably_Obsolete_Debugging_Info this section]):&lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
 -Dopenrocket.debug&lt;br /&gt;
&lt;br /&gt;
See the [http://logback.qos.ch/manual/configuration.html#configFileProperty LogBack configuration page] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Probably Obsolete Debugging Info ===&lt;br /&gt;
&lt;br /&gt;
Log messages in openrocket are specified by one of six levels. You can specify which level of errors you want reported to standard out with a system property which you can add to your VM argument, e.g:&lt;br /&gt;
 &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
&lt;br /&gt;
The error levels available are:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;ERROR&#039;&#039;&#039; - Level for indicating a bug or error condition noticed in the software or JRE. No ERROR level events _should_ occur while running the program.&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;WARN&#039;&#039;&#039; - Level for indicating error conditions or atypical events that can occur during normal operation (errors while loading files, weird computation results etc).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;USER&#039;&#039;&#039; - Level for logging user actions (adding and modifying components, running simulations etc).  A user action should be logged as soon as possible on this level.  The level is separate so that additional INFO messages won&#039;t purge user actions from a bounded log buffer.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;INFO&#039;&#039;&#039; - Level for indicating general level actions the software is performing and other notable events during execution (dialogs shown, simulations run etc)&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;DEBUG&#039;&#039;&#039; - Level for indicating mid-results, outcomes of methods and other debugging information.  The data logged should be of value when analyzing error conditions and what has caused them.  Places that are called repeatedly during e.g. flight simulation should use the VBOSE level instead.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;VBOSE&#039;&#039;&#039; - Level of verbose debug logging to be used in areas which are called repeatedly, such as computational methods used in simulations.  This level is separated to allow filtering out the verbose logs generated during simulations, DnD etc. from the normal debug logs.&lt;br /&gt;
&lt;br /&gt;
In the code, the standard way to log errors is with &lt;br /&gt;
 &lt;br /&gt;
 log.verbose(&amp;quot;Error message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
where log is defined in each class as :&lt;br /&gt;
 &lt;br /&gt;
 private static final LogHelper log = Application.getLogger();&lt;br /&gt;
&lt;br /&gt;
== Units used in OpenRocket ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket always uses internally pure SI units.  For example all rocket dimensions and flight distances are in meters, all masses are in kilograms, density is in kg/m³, temperature is in Kelvin etc.  This convention is also used when storing the design in the OpenRocket format.&lt;br /&gt;
&lt;br /&gt;
The only exception to this rule is angles:&lt;br /&gt;
* Angles are represented as radians internally, but in the file format they are converted to degrees.  This is to make the file format more human-readable and to avoid rounding errors.&lt;br /&gt;
* Latitude and longitude of the launch site are represented in degrees both internally and externally.&lt;br /&gt;
&lt;br /&gt;
When displaying measures to the user, the values are converted into the preferred units of the user.  This is performed using classes in the package &amp;lt;tt&amp;gt;net.sf.openrocket.unit&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;Unit&amp;lt;/tt&amp;gt; class represents a single unit and it includes methods for converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.  A &amp;lt;tt&amp;gt;UnitGroup&amp;lt;/tt&amp;gt; describes a measurable quantity such as temperature and contains the units available for that quantity, such as Celcius, Fahrenheit and Kelvin.&lt;br /&gt;
&lt;br /&gt;
== Rocket design loading and saving ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(This section is based on email correspondence)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All file reading/writing is performed in the package&lt;br /&gt;
&amp;lt;tt&amp;gt;net.sf.openrocket.file&amp;lt;/tt&amp;gt; and subpackages.  To implement a new&lt;br /&gt;
document loader it is necessary to extend the class &amp;lt;tt&amp;gt;RocketLoader&amp;lt;/tt&amp;gt; and&lt;br /&gt;
implement the abstract method &amp;lt;tt&amp;gt;loadFromStream(InputStream)&amp;lt;/tt&amp;gt;.  This&lt;br /&gt;
method simply loads the document and returns an &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt;&lt;br /&gt;
object.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt; contains all the information about an opened&lt;br /&gt;
document, primarily the rocket structure and the simulations.  The&lt;br /&gt;
rocket structure is a simple tree-like structure of &amp;lt;tt&amp;gt;RocketComponents&amp;lt;/tt&amp;gt;.&lt;br /&gt;
All of the components are in the package &amp;lt;tt&amp;gt;.rocketcomponent&amp;lt;/tt&amp;gt;.  A diagram&lt;br /&gt;
of their hierarchy and a short explanation of each class is available&lt;br /&gt;
in my thesis section 5.1&lt;br /&gt;
(http://openrocket.sourceforge.net/documentation.html)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve implemented a simple XML reading framework (based on SAX), which&lt;br /&gt;
simplifies reading by assuming that XML elements can contain only&lt;br /&gt;
other elements or text content, but not both.  Both the OpenRocket and&lt;br /&gt;
Rocksim format abide with this restriction.&lt;br /&gt;
&lt;br /&gt;
The framework is in the package &amp;lt;tt&amp;gt;.file.simplesax&amp;lt;/tt&amp;gt;.  The primary class&lt;br /&gt;
that will be extended is &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;, which contains three methods.&lt;br /&gt;
&amp;lt;tt&amp;gt;openElement()&amp;lt;/tt&amp;gt; is called when a new subelement is found, and it&lt;br /&gt;
returns a new &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt; to handle that element (which can be the&lt;br /&gt;
object itself), or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; in order to ignore that element and all of its&lt;br /&gt;
contents (for example for unknown elements). &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt; is called&lt;br /&gt;
when the subelement ends, and &amp;lt;tt&amp;gt;endHandler()&amp;lt;/tt&amp;gt; is called when the element&lt;br /&gt;
of the current handler ends.  The JavaDoc should provide the necessary&lt;br /&gt;
details.&lt;br /&gt;
&lt;br /&gt;
There are a few ready handlers, the most useful of which will probably&lt;br /&gt;
be &amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt;.  This handler accepts only text content and&lt;br /&gt;
ignores all subelements.  If the XML file contains&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;element&amp;gt;value&amp;lt;/element&amp;gt;&amp;lt;/nowiki&amp;gt;, then the handler can return a&lt;br /&gt;
&amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt; and handle the content within the &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt;&lt;br /&gt;
method, removing the need to write a specialized handler for that&lt;br /&gt;
element.&lt;br /&gt;
&lt;br /&gt;
The XML reading is initiated by calling &amp;lt;tt&amp;gt;SimpleSAX.readXML()&amp;lt;/tt&amp;gt; with the&lt;br /&gt;
input source and the initial &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The OpenRocket document loading is implemented in&lt;br /&gt;
&amp;lt;tt&amp;gt;.file.openrocket.OpenRocketLoader&amp;lt;/tt&amp;gt;.  Here I&#039;ve used a bit more&lt;br /&gt;
boilerplate code to be able to define most of the rocket structure&lt;br /&gt;
preferences without needing separate handlers for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The OpenRocket format (*.ork) ===&lt;br /&gt;
&lt;br /&gt;
The OpenRocket native format uses the file extension *.ork.  It is an XML format, which can optionally be compressed using GZIP.  (The extension *.ork.gz is also accepted by the dialogs, though plain .ork is recommended.)&lt;br /&gt;
&lt;br /&gt;
Currently the file format is not documented other than as the reference implementation, and no XML schema exists.  This will hopefully change in the future.  See [[#Units used in OpenRocket]] for details on units.&lt;br /&gt;
&lt;br /&gt;
Every time the XML format changes, the file version number is increased.  This version number is not linked to the version of OpenRocket that created the file, but instead describes the file format.  Later versions of OpenRocket should attempt to store files in the oldest format that supports all the necessary features.  The changes in the format are described in the [http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/fileformat.txt fileformat.txt file in SVN].&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34565</id>
		<title>Developer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34565"/>
		<updated>2021-09-13T12:58:14Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Access}}&lt;br /&gt;
&lt;br /&gt;
This page contains information on the inner workings of OpenRocket and is meant primarily for developers interested in developing OpenRocket.&lt;br /&gt;
&lt;br /&gt;
In addition to this page, information can be found in the [http://openrocket.sourceforge.net/documentation.html Technical documentation] chapter 5.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the source code ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is primarily developed using [http://www.eclipse.org/ Eclipse], and it&#039;s the recommended IDE for compatibility.  Developers are free to use other IDE&#039;s, but everything may not work out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The source code is hosted on [https://github.com/openrocket/openrocket/ GitHub].  You need either to install the [http://www.eclipse.org/egit/ EGit] plugin to Eclipse, or use some other Git client (for example the command-line client).&lt;br /&gt;
&lt;br /&gt;
Using the command-line, the OpenRocket code can be retrieved by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://github.com/openrocket/openrocket.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This [https://sourcespy.com/github/openrocketopenrocket/ sourcespy dashboard] provides a high level overview of architecture, build process and dependencies of the project. It describes Ant [https://sourcespy.com/github/openrocketopenrocket/xx-otasks-.html tasks and dependencies], structure of [https://sourcespy.com/github/openrocketopenrocket/xx-ouiswing-.html UI classes],  and other components of the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The source packages available on the OpenRocket web site (*.zip) are meant for building the application from source code, &#039;&#039;&#039;NOT&#039;&#039;&#039; for development purposes.  They do not contain all the project files etc &lt;br /&gt;
&lt;br /&gt;
== Running OpenRocket from Eclipse (tested with Eclipse Luna and OpenRocket v15.03, September, 2015) ==&lt;br /&gt;
&lt;br /&gt;
The following steps should get you up and running with OpenRocket source code: &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) After downloading the source code, start Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
2) From the Eclipse main menu, select &amp;lt;b&amp;gt;File&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt; &lt;br /&gt;
3) In the &amp;lt;i&amp;gt;Import&amp;lt;/i&amp;gt; window that opens, select &amp;lt;b&amp;gt;General&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Existing Projects into Workspace&amp;lt;/b&amp;gt;, then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
4) In the &amp;lt;i&amp;gt;Select root directory&amp;lt;/i&amp;gt; field, browse to the location of the OpenRocket source code that you downloaded. &amp;lt;br/&amp;gt;&lt;br /&gt;
5) In the file browser that appears, click on the &amp;lt;b&amp;gt;openrocket&amp;lt;/b&amp;gt; root project directory. A list of projects should then appear in the &amp;lt;i&amp;gt;Projects&amp;lt;/i&amp;gt; pane on the import window. &amp;lt;br/&amp;gt;&lt;br /&gt;
6) Select only these three projects from the list: &amp;lt;b&amp;gt;OpenRocket Core&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;OpenRocket Swing&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;OpenRocket Test Libraries&amp;lt;/b&amp;gt;. (Note: As of v15.03 you no longer need to load the other projects to build OpenRocket on the desktop.) &amp;lt;br/&amp;gt;&lt;br /&gt;
7) Once those three projects have been selected, click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Eclipse should start with those three projects shown in the &amp;lt;i&amp;gt;Package Explorer&amp;lt;/i&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;NOTE: You might see errors in some source files, reporting that various Java classes cannot be found. If that happens, you might try these steps to resolve these issues: &amp;lt;/i&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) In the &amp;lt;i&amp;gt;Project Explorer&amp;lt;/i&amp;gt; pane in Eclipse, right-click on the project reporting the errors. Select &amp;lt;b&amp;gt;Properties&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
9) In the properties window that opens, select &amp;lt;b&amp;gt;Java Build Path&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
10) Make sure that the &amp;lt;i&amp;gt;JRE System Library&amp;lt;/i&amp;gt; for your version of Java is seen in the list of libraries. &amp;lt;br/&amp;gt;&lt;br /&gt;
11) If it is NOT included in the list, click the &amp;lt;b&amp;gt;Add Library&amp;lt;/b&amp;gt; button in the menu to the right. &amp;lt;br/&amp;gt;&lt;br /&gt;
12) From the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window that appears, select &amp;lt;b&amp;gt;JRE System Library&amp;lt;/b&amp;gt; from the list. Then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
13) Make sure that the correct &amp;lt;i&amp;gt;Workspace&amp;lt;/i&amp;gt; is selected in the next window that appears, and then click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Once the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window closes, you should then see the JRE System Library added to the list of libraries in the project properties window. &amp;lt;br/&amp;gt;&lt;br /&gt;
14) Click &amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;. Once the project properties window closes you will be returned to Eclipse, and hopefully the errors reported by the IDE will then resolve. &amp;lt;br/&amp;gt;&lt;br /&gt;
15) If there are still errors, you&#039;ll need to revert to Google for additional help. Googling the exact error string reported by Eclipse will most likely help you resolve any outstanding dependency issues. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;***&amp;lt;/b&amp;gt; Also note that the main entry point for OpenRocket is in the &amp;lt;i&amp;gt;OpenRocket Swing&amp;lt;/i&amp;gt; project, in the &amp;lt;b&amp;gt;net.sf.openrocket.startup.SwingStartup.java&amp;lt;/b&amp;gt; file. With that file active OpenRocket should build and start. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, remember that help is available either in the OpenRocket forums or in the main developers list. Good Luck! &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking TODO&#039;s ==&lt;br /&gt;
&lt;br /&gt;
Often when writing code you know that something could be done better, but at the moment is either impossible or unreasonable.  These are commonly marked with a TODO comment.  The following convension is used to mark the importance of different TODO&#039;s:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: CRITICAL: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; A bug or something that is not yet implemented, and must be corrected before any release is made.  The Ant build script checks for these and prevents building if such a comment is found.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: HIGH: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; An important issue that should be looked into within this or the next major release.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: MEDIUM: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would make the software better, but does not represent a problem as such.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: LOW: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would be nice to do better in the future&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== LogBack ===&lt;br /&gt;
&lt;br /&gt;
As of version 13.05, OpenRocket uses [http://logback.qos.ch/index.html LogBack] for logging.&lt;br /&gt;
&lt;br /&gt;
If you want to change the default logging that OpenRocket uses, you can create or reuse a LogBack configuration file stored in openrocket/core/config. For example, you can use the logback-stdout-level-error.xml there which tells logback to log everything to stdout with logging level of Error (serious errors only).&lt;br /&gt;
&lt;br /&gt;
To enable use of a LogBack configuration file, pass the JVM the following option during startup:&lt;br /&gt;
&lt;br /&gt;
 -Dlogback.configurationFile=&amp;lt;directory of openrocket source code&amp;gt;/openrocket/core/config/logback-stdout-level-error.xml&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, that is because the logging level is set to Error, as mentioned previously. You can change the logging level to e.g. show debug information:&lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
 -Dopenrocket.debug&lt;br /&gt;
&lt;br /&gt;
See the [http://logback.qos.ch/manual/configuration.html#configFileProperty LogBack configuration page] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Probably Obsolete Debugging Info ===&lt;br /&gt;
&lt;br /&gt;
Log messages in openrocket are specified by one of six levels. You can specify which level of errors you want reported to standard out with a system property which you can add to your VM argument, e.g:&lt;br /&gt;
 &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
&lt;br /&gt;
The error levels available are:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;ERROR&#039;&#039;&#039; - Level for indicating a bug or error condition noticed in the software or JRE. No ERROR level events _should_ occur while running the program.&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;WARN&#039;&#039;&#039; - Level for indicating error conditions or atypical events that can occur during normal operation (errors while loading files, weird computation results etc).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;USER&#039;&#039;&#039; - Level for logging user actions (adding and modifying components, running simulations etc).  A user action should be logged as soon as possible on this level.  The level is separate so that additional INFO messages won&#039;t purge user actions from a bounded log buffer.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;INFO&#039;&#039;&#039; - Level for indicating general level actions the software is performing and other notable events during execution (dialogs shown, simulations run etc)&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;DEBUG&#039;&#039;&#039; - Level for indicating mid-results, outcomes of methods and other debugging information.  The data logged should be of value when analyzing error conditions and what has caused them.  Places that are called repeatedly during e.g. flight simulation should use the VBOSE level instead.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;VBOSE&#039;&#039;&#039; - Level of verbose debug logging to be used in areas which are called repeatedly, such as computational methods used in simulations.  This level is separated to allow filtering out the verbose logs generated during simulations, DnD etc. from the normal debug logs.&lt;br /&gt;
&lt;br /&gt;
In the code, the standard way to log errors is with &lt;br /&gt;
 &lt;br /&gt;
 log.verbose(&amp;quot;Error message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
where log is defined in each class as :&lt;br /&gt;
 &lt;br /&gt;
 private static final LogHelper log = Application.getLogger();&lt;br /&gt;
&lt;br /&gt;
== Units used in OpenRocket ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket always uses internally pure SI units.  For example all rocket dimensions and flight distances are in meters, all masses are in kilograms, density is in kg/m³, temperature is in Kelvin etc.  This convention is also used when storing the design in the OpenRocket format.&lt;br /&gt;
&lt;br /&gt;
The only exception to this rule is angles:&lt;br /&gt;
* Angles are represented as radians internally, but in the file format they are converted to degrees.  This is to make the file format more human-readable and to avoid rounding errors.&lt;br /&gt;
* Latitude and longitude of the launch site are represented in degrees both internally and externally.&lt;br /&gt;
&lt;br /&gt;
When displaying measures to the user, the values are converted into the preferred units of the user.  This is performed using classes in the package &amp;lt;tt&amp;gt;net.sf.openrocket.unit&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;Unit&amp;lt;/tt&amp;gt; class represents a single unit and it includes methods for converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.  A &amp;lt;tt&amp;gt;UnitGroup&amp;lt;/tt&amp;gt; describes a measurable quantity such as temperature and contains the units available for that quantity, such as Celcius, Fahrenheit and Kelvin.&lt;br /&gt;
&lt;br /&gt;
== Rocket design loading and saving ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(This section is based on email correspondence)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All file reading/writing is performed in the package&lt;br /&gt;
&amp;lt;tt&amp;gt;net.sf.openrocket.file&amp;lt;/tt&amp;gt; and subpackages.  To implement a new&lt;br /&gt;
document loader it is necessary to extend the class &amp;lt;tt&amp;gt;RocketLoader&amp;lt;/tt&amp;gt; and&lt;br /&gt;
implement the abstract method &amp;lt;tt&amp;gt;loadFromStream(InputStream)&amp;lt;/tt&amp;gt;.  This&lt;br /&gt;
method simply loads the document and returns an &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt;&lt;br /&gt;
object.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt; contains all the information about an opened&lt;br /&gt;
document, primarily the rocket structure and the simulations.  The&lt;br /&gt;
rocket structure is a simple tree-like structure of &amp;lt;tt&amp;gt;RocketComponents&amp;lt;/tt&amp;gt;.&lt;br /&gt;
All of the components are in the package &amp;lt;tt&amp;gt;.rocketcomponent&amp;lt;/tt&amp;gt;.  A diagram&lt;br /&gt;
of their hierarchy and a short explanation of each class is available&lt;br /&gt;
in my thesis section 5.1&lt;br /&gt;
(http://openrocket.sourceforge.net/documentation.html)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve implemented a simple XML reading framework (based on SAX), which&lt;br /&gt;
simplifies reading by assuming that XML elements can contain only&lt;br /&gt;
other elements or text content, but not both.  Both the OpenRocket and&lt;br /&gt;
Rocksim format abide with this restriction.&lt;br /&gt;
&lt;br /&gt;
The framework is in the package &amp;lt;tt&amp;gt;.file.simplesax&amp;lt;/tt&amp;gt;.  The primary class&lt;br /&gt;
that will be extended is &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;, which contains three methods.&lt;br /&gt;
&amp;lt;tt&amp;gt;openElement()&amp;lt;/tt&amp;gt; is called when a new subelement is found, and it&lt;br /&gt;
returns a new &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt; to handle that element (which can be the&lt;br /&gt;
object itself), or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; in order to ignore that element and all of its&lt;br /&gt;
contents (for example for unknown elements). &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt; is called&lt;br /&gt;
when the subelement ends, and &amp;lt;tt&amp;gt;endHandler()&amp;lt;/tt&amp;gt; is called when the element&lt;br /&gt;
of the current handler ends.  The JavaDoc should provide the necessary&lt;br /&gt;
details.&lt;br /&gt;
&lt;br /&gt;
There are a few ready handlers, the most useful of which will probably&lt;br /&gt;
be &amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt;.  This handler accepts only text content and&lt;br /&gt;
ignores all subelements.  If the XML file contains&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;element&amp;gt;value&amp;lt;/element&amp;gt;&amp;lt;/nowiki&amp;gt;, then the handler can return a&lt;br /&gt;
&amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt; and handle the content within the &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt;&lt;br /&gt;
method, removing the need to write a specialized handler for that&lt;br /&gt;
element.&lt;br /&gt;
&lt;br /&gt;
The XML reading is initiated by calling &amp;lt;tt&amp;gt;SimpleSAX.readXML()&amp;lt;/tt&amp;gt; with the&lt;br /&gt;
input source and the initial &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The OpenRocket document loading is implemented in&lt;br /&gt;
&amp;lt;tt&amp;gt;.file.openrocket.OpenRocketLoader&amp;lt;/tt&amp;gt;.  Here I&#039;ve used a bit more&lt;br /&gt;
boilerplate code to be able to define most of the rocket structure&lt;br /&gt;
preferences without needing separate handlers for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The OpenRocket format (*.ork) ===&lt;br /&gt;
&lt;br /&gt;
The OpenRocket native format uses the file extension *.ork.  It is an XML format, which can optionally be compressed using GZIP.  (The extension *.ork.gz is also accepted by the dialogs, though plain .ork is recommended.)&lt;br /&gt;
&lt;br /&gt;
Currently the file format is not documented other than as the reference implementation, and no XML schema exists.  This will hopefully change in the future.  See [[#Units used in OpenRocket]] for details on units.&lt;br /&gt;
&lt;br /&gt;
Every time the XML format changes, the file version number is increased.  This version number is not linked to the version of OpenRocket that created the file, but instead describes the file format.  Later versions of OpenRocket should attempt to store files in the oldest format that supports all the necessary features.  The changes in the format are described in the [http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/fileformat.txt fileformat.txt file in SVN].&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34564</id>
		<title>Developer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34564"/>
		<updated>2021-09-13T12:49:34Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: More clear path to configuration file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Access}}&lt;br /&gt;
&lt;br /&gt;
This page contains information on the inner workings of OpenRocket and is meant primarily for developers interested in developing OpenRocket.&lt;br /&gt;
&lt;br /&gt;
In addition to this page, information can be found in the [http://openrocket.sourceforge.net/documentation.html Technical documentation] chapter 5.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the source code ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is primarily developed using [http://www.eclipse.org/ Eclipse], and it&#039;s the recommended IDE for compatibility.  Developers are free to use other IDE&#039;s, but everything may not work out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The source code is hosted on [https://github.com/openrocket/openrocket/ GitHub].  You need either to install the [http://www.eclipse.org/egit/ EGit] plugin to Eclipse, or use some other Git client (for example the command-line client).&lt;br /&gt;
&lt;br /&gt;
Using the command-line, the OpenRocket code can be retrieved by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://github.com/openrocket/openrocket.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This [https://sourcespy.com/github/openrocketopenrocket/ sourcespy dashboard] provides a high level overview of architecture, build process and dependencies of the project. It describes Ant [https://sourcespy.com/github/openrocketopenrocket/xx-otasks-.html tasks and dependencies], structure of [https://sourcespy.com/github/openrocketopenrocket/xx-ouiswing-.html UI classes],  and other components of the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The source packages available on the OpenRocket web site (*.zip) are meant for building the application from source code, &#039;&#039;&#039;NOT&#039;&#039;&#039; for development purposes.  They do not contain all the project files etc &lt;br /&gt;
&lt;br /&gt;
== Running OpenRocket from Eclipse (tested with Eclipse Luna and OpenRocket v15.03, September, 2015) ==&lt;br /&gt;
&lt;br /&gt;
The following steps should get you up and running with OpenRocket source code: &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) After downloading the source code, start Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
2) From the Eclipse main menu, select &amp;lt;b&amp;gt;File&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt; &lt;br /&gt;
3) In the &amp;lt;i&amp;gt;Import&amp;lt;/i&amp;gt; window that opens, select &amp;lt;b&amp;gt;General&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Existing Projects into Workspace&amp;lt;/b&amp;gt;, then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
4) In the &amp;lt;i&amp;gt;Select root directory&amp;lt;/i&amp;gt; field, browse to the location of the OpenRocket source code that you downloaded. &amp;lt;br/&amp;gt;&lt;br /&gt;
5) In the file browser that appears, click on the &amp;lt;b&amp;gt;openrocket&amp;lt;/b&amp;gt; root project directory. A list of projects should then appear in the &amp;lt;i&amp;gt;Projects&amp;lt;/i&amp;gt; pane on the import window. &amp;lt;br/&amp;gt;&lt;br /&gt;
6) Select only these three projects from the list: &amp;lt;b&amp;gt;OpenRocket Core&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;OpenRocket Swing&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;OpenRocket Test Libraries&amp;lt;/b&amp;gt;. (Note: As of v15.03 you no longer need to load the other projects to build OpenRocket on the desktop.) &amp;lt;br/&amp;gt;&lt;br /&gt;
7) Once those three projects have been selected, click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Eclipse should start with those three projects shown in the &amp;lt;i&amp;gt;Package Explorer&amp;lt;/i&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;NOTE: You might see errors in some source files, reporting that various Java classes cannot be found. If that happens, you might try these steps to resolve these issues: &amp;lt;/i&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) In the &amp;lt;i&amp;gt;Project Explorer&amp;lt;/i&amp;gt; pane in Eclipse, right-click on the project reporting the errors. Select &amp;lt;b&amp;gt;Properties&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
9) In the properties window that opens, select &amp;lt;b&amp;gt;Java Build Path&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
10) Make sure that the &amp;lt;i&amp;gt;JRE System Library&amp;lt;/i&amp;gt; for your version of Java is seen in the list of libraries. &amp;lt;br/&amp;gt;&lt;br /&gt;
11) If it is NOT included in the list, click the &amp;lt;b&amp;gt;Add Library&amp;lt;/b&amp;gt; button in the menu to the right. &amp;lt;br/&amp;gt;&lt;br /&gt;
12) From the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window that appears, select &amp;lt;b&amp;gt;JRE System Library&amp;lt;/b&amp;gt; from the list. Then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
13) Make sure that the correct &amp;lt;i&amp;gt;Workspace&amp;lt;/i&amp;gt; is selected in the next window that appears, and then click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Once the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window closes, you should then see the JRE System Library added to the list of libraries in the project properties window. &amp;lt;br/&amp;gt;&lt;br /&gt;
14) Click &amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;. Once the project properties window closes you will be returned to Eclipse, and hopefully the errors reported by the IDE will then resolve. &amp;lt;br/&amp;gt;&lt;br /&gt;
15) If there are still errors, you&#039;ll need to revert to Google for additional help. Googling the exact error string reported by Eclipse will most likely help you resolve any outstanding dependency issues. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;***&amp;lt;/b&amp;gt; Also note that the main entry point for OpenRocket is in the &amp;lt;i&amp;gt;OpenRocket Swing&amp;lt;/i&amp;gt; project, in the &amp;lt;b&amp;gt;net.sf.openrocket.startup.SwingStartup.java&amp;lt;/b&amp;gt; file. With that file active OpenRocket should build and start. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, remember that help is available either in the OpenRocket forums or in the main developers list. Good Luck! &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking TODO&#039;s ==&lt;br /&gt;
&lt;br /&gt;
Often when writing code you know that something could be done better, but at the moment is either impossible or unreasonable.  These are commonly marked with a TODO comment.  The following convension is used to mark the importance of different TODO&#039;s:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: CRITICAL: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; A bug or something that is not yet implemented, and must be corrected before any release is made.  The Ant build script checks for these and prevents building if such a comment is found.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: HIGH: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; An important issue that should be looked into within this or the next major release.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: MEDIUM: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would make the software better, but does not represent a problem as such.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: LOW: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would be nice to do better in the future&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== LogBack ===&lt;br /&gt;
&lt;br /&gt;
As of version 13.05, OpenRocket uses [http://logback.qos.ch/index.html LogBack] for logging.&lt;br /&gt;
&lt;br /&gt;
If you want to change the default logging that OpenRocket uses, you can create or reuse a LogBack configuration file stored in openrocket/core/config. For example, you can use the logback-stdout-level-error.xml there which tells logback to log everything to stdout with logging level of Error (serious errors only).&lt;br /&gt;
&lt;br /&gt;
To enable use of a LogBack configuration file, pass the JVM the following option during startup:&lt;br /&gt;
&lt;br /&gt;
 -Dlogback.configurationFile=&amp;lt;directory of openrocket source code&amp;gt;/openrocket/core/config/logback-stdout-level-error.xml &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
 -Dopenrocket.debug&lt;br /&gt;
&lt;br /&gt;
See the [http://logback.qos.ch/manual/configuration.html#configFileProperty LogBack configuration page] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Probably Obsolete Debugging Info ===&lt;br /&gt;
&lt;br /&gt;
Log messages in openrocket are specified by one of six levels. You can specify which level of errors you want reported to standard out with a system property which you can add to your VM argument, e.g:&lt;br /&gt;
 &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
&lt;br /&gt;
The error levels available are:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;ERROR&#039;&#039;&#039; - Level for indicating a bug or error condition noticed in the software or JRE. No ERROR level events _should_ occur while running the program.&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;WARN&#039;&#039;&#039; - Level for indicating error conditions or atypical events that can occur during normal operation (errors while loading files, weird computation results etc).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;USER&#039;&#039;&#039; - Level for logging user actions (adding and modifying components, running simulations etc).  A user action should be logged as soon as possible on this level.  The level is separate so that additional INFO messages won&#039;t purge user actions from a bounded log buffer.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;INFO&#039;&#039;&#039; - Level for indicating general level actions the software is performing and other notable events during execution (dialogs shown, simulations run etc)&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;DEBUG&#039;&#039;&#039; - Level for indicating mid-results, outcomes of methods and other debugging information.  The data logged should be of value when analyzing error conditions and what has caused them.  Places that are called repeatedly during e.g. flight simulation should use the VBOSE level instead.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;VBOSE&#039;&#039;&#039; - Level of verbose debug logging to be used in areas which are called repeatedly, such as computational methods used in simulations.  This level is separated to allow filtering out the verbose logs generated during simulations, DnD etc. from the normal debug logs.&lt;br /&gt;
&lt;br /&gt;
In the code, the standard way to log errors is with &lt;br /&gt;
 &lt;br /&gt;
 log.verbose(&amp;quot;Error message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
where log is defined in each class as :&lt;br /&gt;
 &lt;br /&gt;
 private static final LogHelper log = Application.getLogger();&lt;br /&gt;
&lt;br /&gt;
== Units used in OpenRocket ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket always uses internally pure SI units.  For example all rocket dimensions and flight distances are in meters, all masses are in kilograms, density is in kg/m³, temperature is in Kelvin etc.  This convention is also used when storing the design in the OpenRocket format.&lt;br /&gt;
&lt;br /&gt;
The only exception to this rule is angles:&lt;br /&gt;
* Angles are represented as radians internally, but in the file format they are converted to degrees.  This is to make the file format more human-readable and to avoid rounding errors.&lt;br /&gt;
* Latitude and longitude of the launch site are represented in degrees both internally and externally.&lt;br /&gt;
&lt;br /&gt;
When displaying measures to the user, the values are converted into the preferred units of the user.  This is performed using classes in the package &amp;lt;tt&amp;gt;net.sf.openrocket.unit&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;Unit&amp;lt;/tt&amp;gt; class represents a single unit and it includes methods for converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.  A &amp;lt;tt&amp;gt;UnitGroup&amp;lt;/tt&amp;gt; describes a measurable quantity such as temperature and contains the units available for that quantity, such as Celcius, Fahrenheit and Kelvin.&lt;br /&gt;
&lt;br /&gt;
== Rocket design loading and saving ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(This section is based on email correspondence)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All file reading/writing is performed in the package&lt;br /&gt;
&amp;lt;tt&amp;gt;net.sf.openrocket.file&amp;lt;/tt&amp;gt; and subpackages.  To implement a new&lt;br /&gt;
document loader it is necessary to extend the class &amp;lt;tt&amp;gt;RocketLoader&amp;lt;/tt&amp;gt; and&lt;br /&gt;
implement the abstract method &amp;lt;tt&amp;gt;loadFromStream(InputStream)&amp;lt;/tt&amp;gt;.  This&lt;br /&gt;
method simply loads the document and returns an &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt;&lt;br /&gt;
object.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt; contains all the information about an opened&lt;br /&gt;
document, primarily the rocket structure and the simulations.  The&lt;br /&gt;
rocket structure is a simple tree-like structure of &amp;lt;tt&amp;gt;RocketComponents&amp;lt;/tt&amp;gt;.&lt;br /&gt;
All of the components are in the package &amp;lt;tt&amp;gt;.rocketcomponent&amp;lt;/tt&amp;gt;.  A diagram&lt;br /&gt;
of their hierarchy and a short explanation of each class is available&lt;br /&gt;
in my thesis section 5.1&lt;br /&gt;
(http://openrocket.sourceforge.net/documentation.html)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve implemented a simple XML reading framework (based on SAX), which&lt;br /&gt;
simplifies reading by assuming that XML elements can contain only&lt;br /&gt;
other elements or text content, but not both.  Both the OpenRocket and&lt;br /&gt;
Rocksim format abide with this restriction.&lt;br /&gt;
&lt;br /&gt;
The framework is in the package &amp;lt;tt&amp;gt;.file.simplesax&amp;lt;/tt&amp;gt;.  The primary class&lt;br /&gt;
that will be extended is &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;, which contains three methods.&lt;br /&gt;
&amp;lt;tt&amp;gt;openElement()&amp;lt;/tt&amp;gt; is called when a new subelement is found, and it&lt;br /&gt;
returns a new &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt; to handle that element (which can be the&lt;br /&gt;
object itself), or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; in order to ignore that element and all of its&lt;br /&gt;
contents (for example for unknown elements). &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt; is called&lt;br /&gt;
when the subelement ends, and &amp;lt;tt&amp;gt;endHandler()&amp;lt;/tt&amp;gt; is called when the element&lt;br /&gt;
of the current handler ends.  The JavaDoc should provide the necessary&lt;br /&gt;
details.&lt;br /&gt;
&lt;br /&gt;
There are a few ready handlers, the most useful of which will probably&lt;br /&gt;
be &amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt;.  This handler accepts only text content and&lt;br /&gt;
ignores all subelements.  If the XML file contains&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;element&amp;gt;value&amp;lt;/element&amp;gt;&amp;lt;/nowiki&amp;gt;, then the handler can return a&lt;br /&gt;
&amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt; and handle the content within the &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt;&lt;br /&gt;
method, removing the need to write a specialized handler for that&lt;br /&gt;
element.&lt;br /&gt;
&lt;br /&gt;
The XML reading is initiated by calling &amp;lt;tt&amp;gt;SimpleSAX.readXML()&amp;lt;/tt&amp;gt; with the&lt;br /&gt;
input source and the initial &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The OpenRocket document loading is implemented in&lt;br /&gt;
&amp;lt;tt&amp;gt;.file.openrocket.OpenRocketLoader&amp;lt;/tt&amp;gt;.  Here I&#039;ve used a bit more&lt;br /&gt;
boilerplate code to be able to define most of the rocket structure&lt;br /&gt;
preferences without needing separate handlers for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The OpenRocket format (*.ork) ===&lt;br /&gt;
&lt;br /&gt;
The OpenRocket native format uses the file extension *.ork.  It is an XML format, which can optionally be compressed using GZIP.  (The extension *.ork.gz is also accepted by the dialogs, though plain .ork is recommended.)&lt;br /&gt;
&lt;br /&gt;
Currently the file format is not documented other than as the reference implementation, and no XML schema exists.  This will hopefully change in the future.  See [[#Units used in OpenRocket]] for details on units.&lt;br /&gt;
&lt;br /&gt;
Every time the XML format changes, the file version number is increased.  This version number is not linked to the version of OpenRocket that created the file, but instead describes the file format.  Later versions of OpenRocket should attempt to store files in the oldest format that supports all the necessary features.  The changes in the format are described in the [http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/fileformat.txt fileformat.txt file in SVN].&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34563</id>
		<title>Developer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34563"/>
		<updated>2021-09-13T12:46:38Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: Hyperlink to specific part of website&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Access}}&lt;br /&gt;
&lt;br /&gt;
This page contains information on the inner workings of OpenRocket and is meant primarily for developers interested in developing OpenRocket.&lt;br /&gt;
&lt;br /&gt;
In addition to this page, information can be found in the [http://openrocket.sourceforge.net/documentation.html Technical documentation] chapter 5.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the source code ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is primarily developed using [http://www.eclipse.org/ Eclipse], and it&#039;s the recommended IDE for compatibility.  Developers are free to use other IDE&#039;s, but everything may not work out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The source code is hosted on [https://github.com/openrocket/openrocket/ GitHub].  You need either to install the [http://www.eclipse.org/egit/ EGit] plugin to Eclipse, or use some other Git client (for example the command-line client).&lt;br /&gt;
&lt;br /&gt;
Using the command-line, the OpenRocket code can be retrieved by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://github.com/openrocket/openrocket.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This [https://sourcespy.com/github/openrocketopenrocket/ sourcespy dashboard] provides a high level overview of architecture, build process and dependencies of the project. It describes Ant [https://sourcespy.com/github/openrocketopenrocket/xx-otasks-.html tasks and dependencies], structure of [https://sourcespy.com/github/openrocketopenrocket/xx-ouiswing-.html UI classes],  and other components of the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The source packages available on the OpenRocket web site (*.zip) are meant for building the application from source code, &#039;&#039;&#039;NOT&#039;&#039;&#039; for development purposes.  They do not contain all the project files etc &lt;br /&gt;
&lt;br /&gt;
== Running OpenRocket from Eclipse (tested with Eclipse Luna and OpenRocket v15.03, September, 2015) ==&lt;br /&gt;
&lt;br /&gt;
The following steps should get you up and running with OpenRocket source code: &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) After downloading the source code, start Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
2) From the Eclipse main menu, select &amp;lt;b&amp;gt;File&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt; &lt;br /&gt;
3) In the &amp;lt;i&amp;gt;Import&amp;lt;/i&amp;gt; window that opens, select &amp;lt;b&amp;gt;General&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Existing Projects into Workspace&amp;lt;/b&amp;gt;, then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
4) In the &amp;lt;i&amp;gt;Select root directory&amp;lt;/i&amp;gt; field, browse to the location of the OpenRocket source code that you downloaded. &amp;lt;br/&amp;gt;&lt;br /&gt;
5) In the file browser that appears, click on the &amp;lt;b&amp;gt;openrocket&amp;lt;/b&amp;gt; root project directory. A list of projects should then appear in the &amp;lt;i&amp;gt;Projects&amp;lt;/i&amp;gt; pane on the import window. &amp;lt;br/&amp;gt;&lt;br /&gt;
6) Select only these three projects from the list: &amp;lt;b&amp;gt;OpenRocket Core&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;OpenRocket Swing&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;OpenRocket Test Libraries&amp;lt;/b&amp;gt;. (Note: As of v15.03 you no longer need to load the other projects to build OpenRocket on the desktop.) &amp;lt;br/&amp;gt;&lt;br /&gt;
7) Once those three projects have been selected, click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Eclipse should start with those three projects shown in the &amp;lt;i&amp;gt;Package Explorer&amp;lt;/i&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;NOTE: You might see errors in some source files, reporting that various Java classes cannot be found. If that happens, you might try these steps to resolve these issues: &amp;lt;/i&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) In the &amp;lt;i&amp;gt;Project Explorer&amp;lt;/i&amp;gt; pane in Eclipse, right-click on the project reporting the errors. Select &amp;lt;b&amp;gt;Properties&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
9) In the properties window that opens, select &amp;lt;b&amp;gt;Java Build Path&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
10) Make sure that the &amp;lt;i&amp;gt;JRE System Library&amp;lt;/i&amp;gt; for your version of Java is seen in the list of libraries. &amp;lt;br/&amp;gt;&lt;br /&gt;
11) If it is NOT included in the list, click the &amp;lt;b&amp;gt;Add Library&amp;lt;/b&amp;gt; button in the menu to the right. &amp;lt;br/&amp;gt;&lt;br /&gt;
12) From the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window that appears, select &amp;lt;b&amp;gt;JRE System Library&amp;lt;/b&amp;gt; from the list. Then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
13) Make sure that the correct &amp;lt;i&amp;gt;Workspace&amp;lt;/i&amp;gt; is selected in the next window that appears, and then click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Once the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window closes, you should then see the JRE System Library added to the list of libraries in the project properties window. &amp;lt;br/&amp;gt;&lt;br /&gt;
14) Click &amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;. Once the project properties window closes you will be returned to Eclipse, and hopefully the errors reported by the IDE will then resolve. &amp;lt;br/&amp;gt;&lt;br /&gt;
15) If there are still errors, you&#039;ll need to revert to Google for additional help. Googling the exact error string reported by Eclipse will most likely help you resolve any outstanding dependency issues. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;***&amp;lt;/b&amp;gt; Also note that the main entry point for OpenRocket is in the &amp;lt;i&amp;gt;OpenRocket Swing&amp;lt;/i&amp;gt; project, in the &amp;lt;b&amp;gt;net.sf.openrocket.startup.SwingStartup.java&amp;lt;/b&amp;gt; file. With that file active OpenRocket should build and start. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, remember that help is available either in the OpenRocket forums or in the main developers list. Good Luck! &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking TODO&#039;s ==&lt;br /&gt;
&lt;br /&gt;
Often when writing code you know that something could be done better, but at the moment is either impossible or unreasonable.  These are commonly marked with a TODO comment.  The following convension is used to mark the importance of different TODO&#039;s:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: CRITICAL: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; A bug or something that is not yet implemented, and must be corrected before any release is made.  The Ant build script checks for these and prevents building if such a comment is found.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: HIGH: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; An important issue that should be looked into within this or the next major release.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: MEDIUM: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would make the software better, but does not represent a problem as such.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: LOW: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would be nice to do better in the future&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== LogBack ===&lt;br /&gt;
&lt;br /&gt;
As of version 13.05, OpenRocket uses [http://logback.qos.ch/index.html LogBack] for logging.&lt;br /&gt;
&lt;br /&gt;
If you want to change the default logging that OpenRocket uses, you can create or reuse a LogBack configuration file stored in openrocket/core/config. For example, you can use the logback-stdout-level-error.xml there which tells logback to log everything to stdout with logging level of Error (serious errors only).&lt;br /&gt;
&lt;br /&gt;
To enable use of a LogBack configuration file, pass the JVM the following option during startup:&lt;br /&gt;
&lt;br /&gt;
 -Dlogback.configurationFile=config/logback-stdout-level-error.xml &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
 -Dopenrocket.debug&lt;br /&gt;
&lt;br /&gt;
See the [http://logback.qos.ch/manual/configuration.html#configFileProperty LogBack configuration page] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Probably Obsolete Debugging Info ===&lt;br /&gt;
&lt;br /&gt;
Log messages in openrocket are specified by one of six levels. You can specify which level of errors you want reported to standard out with a system property which you can add to your VM argument, e.g:&lt;br /&gt;
 &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
&lt;br /&gt;
The error levels available are:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;ERROR&#039;&#039;&#039; - Level for indicating a bug or error condition noticed in the software or JRE. No ERROR level events _should_ occur while running the program.&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;WARN&#039;&#039;&#039; - Level for indicating error conditions or atypical events that can occur during normal operation (errors while loading files, weird computation results etc).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;USER&#039;&#039;&#039; - Level for logging user actions (adding and modifying components, running simulations etc).  A user action should be logged as soon as possible on this level.  The level is separate so that additional INFO messages won&#039;t purge user actions from a bounded log buffer.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;INFO&#039;&#039;&#039; - Level for indicating general level actions the software is performing and other notable events during execution (dialogs shown, simulations run etc)&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;DEBUG&#039;&#039;&#039; - Level for indicating mid-results, outcomes of methods and other debugging information.  The data logged should be of value when analyzing error conditions and what has caused them.  Places that are called repeatedly during e.g. flight simulation should use the VBOSE level instead.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;VBOSE&#039;&#039;&#039; - Level of verbose debug logging to be used in areas which are called repeatedly, such as computational methods used in simulations.  This level is separated to allow filtering out the verbose logs generated during simulations, DnD etc. from the normal debug logs.&lt;br /&gt;
&lt;br /&gt;
In the code, the standard way to log errors is with &lt;br /&gt;
 &lt;br /&gt;
 log.verbose(&amp;quot;Error message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
where log is defined in each class as :&lt;br /&gt;
 &lt;br /&gt;
 private static final LogHelper log = Application.getLogger();&lt;br /&gt;
&lt;br /&gt;
== Units used in OpenRocket ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket always uses internally pure SI units.  For example all rocket dimensions and flight distances are in meters, all masses are in kilograms, density is in kg/m³, temperature is in Kelvin etc.  This convention is also used when storing the design in the OpenRocket format.&lt;br /&gt;
&lt;br /&gt;
The only exception to this rule is angles:&lt;br /&gt;
* Angles are represented as radians internally, but in the file format they are converted to degrees.  This is to make the file format more human-readable and to avoid rounding errors.&lt;br /&gt;
* Latitude and longitude of the launch site are represented in degrees both internally and externally.&lt;br /&gt;
&lt;br /&gt;
When displaying measures to the user, the values are converted into the preferred units of the user.  This is performed using classes in the package &amp;lt;tt&amp;gt;net.sf.openrocket.unit&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;Unit&amp;lt;/tt&amp;gt; class represents a single unit and it includes methods for converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.  A &amp;lt;tt&amp;gt;UnitGroup&amp;lt;/tt&amp;gt; describes a measurable quantity such as temperature and contains the units available for that quantity, such as Celcius, Fahrenheit and Kelvin.&lt;br /&gt;
&lt;br /&gt;
== Rocket design loading and saving ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(This section is based on email correspondence)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All file reading/writing is performed in the package&lt;br /&gt;
&amp;lt;tt&amp;gt;net.sf.openrocket.file&amp;lt;/tt&amp;gt; and subpackages.  To implement a new&lt;br /&gt;
document loader it is necessary to extend the class &amp;lt;tt&amp;gt;RocketLoader&amp;lt;/tt&amp;gt; and&lt;br /&gt;
implement the abstract method &amp;lt;tt&amp;gt;loadFromStream(InputStream)&amp;lt;/tt&amp;gt;.  This&lt;br /&gt;
method simply loads the document and returns an &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt;&lt;br /&gt;
object.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt; contains all the information about an opened&lt;br /&gt;
document, primarily the rocket structure and the simulations.  The&lt;br /&gt;
rocket structure is a simple tree-like structure of &amp;lt;tt&amp;gt;RocketComponents&amp;lt;/tt&amp;gt;.&lt;br /&gt;
All of the components are in the package &amp;lt;tt&amp;gt;.rocketcomponent&amp;lt;/tt&amp;gt;.  A diagram&lt;br /&gt;
of their hierarchy and a short explanation of each class is available&lt;br /&gt;
in my thesis section 5.1&lt;br /&gt;
(http://openrocket.sourceforge.net/documentation.html)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve implemented a simple XML reading framework (based on SAX), which&lt;br /&gt;
simplifies reading by assuming that XML elements can contain only&lt;br /&gt;
other elements or text content, but not both.  Both the OpenRocket and&lt;br /&gt;
Rocksim format abide with this restriction.&lt;br /&gt;
&lt;br /&gt;
The framework is in the package &amp;lt;tt&amp;gt;.file.simplesax&amp;lt;/tt&amp;gt;.  The primary class&lt;br /&gt;
that will be extended is &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;, which contains three methods.&lt;br /&gt;
&amp;lt;tt&amp;gt;openElement()&amp;lt;/tt&amp;gt; is called when a new subelement is found, and it&lt;br /&gt;
returns a new &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt; to handle that element (which can be the&lt;br /&gt;
object itself), or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; in order to ignore that element and all of its&lt;br /&gt;
contents (for example for unknown elements). &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt; is called&lt;br /&gt;
when the subelement ends, and &amp;lt;tt&amp;gt;endHandler()&amp;lt;/tt&amp;gt; is called when the element&lt;br /&gt;
of the current handler ends.  The JavaDoc should provide the necessary&lt;br /&gt;
details.&lt;br /&gt;
&lt;br /&gt;
There are a few ready handlers, the most useful of which will probably&lt;br /&gt;
be &amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt;.  This handler accepts only text content and&lt;br /&gt;
ignores all subelements.  If the XML file contains&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;element&amp;gt;value&amp;lt;/element&amp;gt;&amp;lt;/nowiki&amp;gt;, then the handler can return a&lt;br /&gt;
&amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt; and handle the content within the &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt;&lt;br /&gt;
method, removing the need to write a specialized handler for that&lt;br /&gt;
element.&lt;br /&gt;
&lt;br /&gt;
The XML reading is initiated by calling &amp;lt;tt&amp;gt;SimpleSAX.readXML()&amp;lt;/tt&amp;gt; with the&lt;br /&gt;
input source and the initial &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The OpenRocket document loading is implemented in&lt;br /&gt;
&amp;lt;tt&amp;gt;.file.openrocket.OpenRocketLoader&amp;lt;/tt&amp;gt;.  Here I&#039;ve used a bit more&lt;br /&gt;
boilerplate code to be able to define most of the rocket structure&lt;br /&gt;
preferences without needing separate handlers for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The OpenRocket format (*.ork) ===&lt;br /&gt;
&lt;br /&gt;
The OpenRocket native format uses the file extension *.ork.  It is an XML format, which can optionally be compressed using GZIP.  (The extension *.ork.gz is also accepted by the dialogs, though plain .ork is recommended.)&lt;br /&gt;
&lt;br /&gt;
Currently the file format is not documented other than as the reference implementation, and no XML schema exists.  This will hopefully change in the future.  See [[#Units used in OpenRocket]] for details on units.&lt;br /&gt;
&lt;br /&gt;
Every time the XML format changes, the file version number is increased.  This version number is not linked to the version of OpenRocket that created the file, but instead describes the file format.  Later versions of OpenRocket should attempt to store files in the oldest format that supports all the necessary features.  The changes in the format are described in the [http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/fileformat.txt fileformat.txt file in SVN].&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
	<entry>
		<id>http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34562</id>
		<title>Developer&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openrocket.info/index.php?title=Developer%27s_Guide&amp;diff=34562"/>
		<updated>2021-09-13T12:43:19Z</updated>

		<summary type="html">&lt;p&gt;SiboVG: Added changes from issue #344 from GitHub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Access}}&lt;br /&gt;
&lt;br /&gt;
This page contains information on the inner workings of OpenRocket and is meant primarily for developers interested in developing OpenRocket.&lt;br /&gt;
&lt;br /&gt;
In addition to this page, information can be found in the [http://openrocket.sourceforge.net/documentation.html Technical documentation] chapter 5.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the source code ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket is primarily developed using [http://www.eclipse.org/ Eclipse], and it&#039;s the recommended IDE for compatibility.  Developers are free to use other IDE&#039;s, but everything may not work out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The source code is hosted on [https://github.com/openrocket/openrocket/ GitHub].  You need either to install the [http://www.eclipse.org/egit/ EGit] plugin to Eclipse, or use some other Git client (for example the command-line client).&lt;br /&gt;
&lt;br /&gt;
Using the command-line, the OpenRocket code can be retrieved by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://github.com/openrocket/openrocket.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This [https://sourcespy.com/github/openrocketopenrocket/ sourcespy dashboard] provides a high level overview of architecture, build process and dependencies of the project. It describes Ant [https://sourcespy.com/github/openrocketopenrocket/xx-otasks-.html tasks and dependencies], structure of [https://sourcespy.com/github/openrocketopenrocket/xx-ouiswing-.html UI classes],  and other components of the system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The source packages available on the OpenRocket web site (*.zip) are meant for building the application from source code, &#039;&#039;&#039;NOT&#039;&#039;&#039; for development purposes.  They do not contain all the project files etc &lt;br /&gt;
&lt;br /&gt;
== Running OpenRocket from Eclipse (tested with Eclipse Luna and OpenRocket v15.03, September, 2015) ==&lt;br /&gt;
&lt;br /&gt;
The following steps should get you up and running with OpenRocket source code: &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1) After downloading the source code, start Eclipse. &amp;lt;br/&amp;gt;&lt;br /&gt;
2) From the Eclipse main menu, select &amp;lt;b&amp;gt;File&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt; &lt;br /&gt;
3) In the &amp;lt;i&amp;gt;Import&amp;lt;/i&amp;gt; window that opens, select &amp;lt;b&amp;gt;General&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Existing Projects into Workspace&amp;lt;/b&amp;gt;, then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
4) In the &amp;lt;i&amp;gt;Select root directory&amp;lt;/i&amp;gt; field, browse to the location of the OpenRocket source code that you downloaded. &amp;lt;br/&amp;gt;&lt;br /&gt;
5) In the file browser that appears, click on the &amp;lt;b&amp;gt;openrocket&amp;lt;/b&amp;gt; root project directory. A list of projects should then appear in the &amp;lt;i&amp;gt;Projects&amp;lt;/i&amp;gt; pane on the import window. &amp;lt;br/&amp;gt;&lt;br /&gt;
6) Select only these three projects from the list: &amp;lt;b&amp;gt;OpenRocket Core&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;OpenRocket Swing&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;OpenRocket Test Libraries&amp;lt;/b&amp;gt;. (Note: As of v15.03 you no longer need to load the other projects to build OpenRocket on the desktop.) &amp;lt;br/&amp;gt;&lt;br /&gt;
7) Once those three projects have been selected, click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Eclipse should start with those three projects shown in the &amp;lt;i&amp;gt;Package Explorer&amp;lt;/i&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;NOTE: You might see errors in some source files, reporting that various Java classes cannot be found. If that happens, you might try these steps to resolve these issues: &amp;lt;/i&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) In the &amp;lt;i&amp;gt;Project Explorer&amp;lt;/i&amp;gt; pane in Eclipse, right-click on the project reporting the errors. Select &amp;lt;b&amp;gt;Properties&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
9) In the properties window that opens, select &amp;lt;b&amp;gt;Java Build Path&amp;lt;/b&amp;gt; -&amp;gt; &amp;lt;b&amp;gt;Libraries&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
10) Make sure that the &amp;lt;i&amp;gt;JRE System Library&amp;lt;/i&amp;gt; for your version of Java is seen in the list of libraries. &amp;lt;br/&amp;gt;&lt;br /&gt;
11) If it is NOT included in the list, click the &amp;lt;b&amp;gt;Add Library&amp;lt;/b&amp;gt; button in the menu to the right. &amp;lt;br/&amp;gt;&lt;br /&gt;
12) From the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window that appears, select &amp;lt;b&amp;gt;JRE System Library&amp;lt;/b&amp;gt; from the list. Then click &amp;lt;b&amp;gt;Next&amp;lt;/b&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
13) Make sure that the correct &amp;lt;i&amp;gt;Workspace&amp;lt;/i&amp;gt; is selected in the next window that appears, and then click &amp;lt;b&amp;gt;Finish&amp;lt;/b&amp;gt;. Once the &amp;lt;i&amp;gt;Add Library&amp;lt;/i&amp;gt; window closes, you should then see the JRE System Library added to the list of libraries in the project properties window. &amp;lt;br/&amp;gt;&lt;br /&gt;
14) Click &amp;lt;b&amp;gt;OK&amp;lt;/b&amp;gt;. Once the project properties window closes you will be returned to Eclipse, and hopefully the errors reported by the IDE will then resolve. &amp;lt;br/&amp;gt;&lt;br /&gt;
15) If there are still errors, you&#039;ll need to revert to Google for additional help. Googling the exact error string reported by Eclipse will most likely help you resolve any outstanding dependency issues. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;***&amp;lt;/b&amp;gt; Also note that the main entry point for OpenRocket is in the &amp;lt;i&amp;gt;OpenRocket Swing&amp;lt;/i&amp;gt; project, in the &amp;lt;b&amp;gt;net.sf.openrocket.startup.SwingStartup.java&amp;lt;/b&amp;gt; file. With that file active OpenRocket should build and start. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, remember that help is available either in the OpenRocket forums or in the main developers list. Good Luck! &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking TODO&#039;s ==&lt;br /&gt;
&lt;br /&gt;
Often when writing code you know that something could be done better, but at the moment is either impossible or unreasonable.  These are commonly marked with a TODO comment.  The following convension is used to mark the importance of different TODO&#039;s:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: CRITICAL: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; A bug or something that is not yet implemented, and must be corrected before any release is made.  The Ant build script checks for these and prevents building if such a comment is found.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: HIGH: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; An important issue that should be looked into within this or the next major release.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: MEDIUM: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would make the software better, but does not represent a problem as such.&lt;br /&gt;
* &amp;lt;code&amp;gt;// TODO: LOW: Some comment&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; Something that would be nice to do better in the future&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
=== LogBack ===&lt;br /&gt;
&lt;br /&gt;
As of version 13.05, OpenRocket uses [http://logback.qos.ch/index.html LogBack] for logging.&lt;br /&gt;
&lt;br /&gt;
If you want to change the default logging that OpenRocket uses, you can create or reuse a LogBack configuration file stored in openrocket/core/config. For example, you can use the logback-stdout-level-error.xml there which tells logback to log everything to stdout with logging level of Error (serious errors only).&lt;br /&gt;
&lt;br /&gt;
To enable use of a LogBack configuration file, pass the JVM the following option during startup:&lt;br /&gt;
&lt;br /&gt;
 -Dlogback.configurationFile=config/logback-stdout-level-error.xml &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
 -Dopenrocket.debug&lt;br /&gt;
&lt;br /&gt;
See the [http://logback.qos.ch/manual/configuration.html LogBack configuration page] for more details.&lt;br /&gt;
&lt;br /&gt;
=== Probably Obsolete Debugging Info ===&lt;br /&gt;
&lt;br /&gt;
Log messages in openrocket are specified by one of six levels. You can specify which level of errors you want reported to standard out with a system property which you can add to your VM argument, e.g:&lt;br /&gt;
 &lt;br /&gt;
 -Dopenrocket.log.stdout=debug&lt;br /&gt;
&lt;br /&gt;
The error levels available are:&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;ERROR&#039;&#039;&#039; - Level for indicating a bug or error condition noticed in the software or JRE. No ERROR level events _should_ occur while running the program.&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;WARN&#039;&#039;&#039; - Level for indicating error conditions or atypical events that can occur during normal operation (errors while loading files, weird computation results etc).&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;USER&#039;&#039;&#039; - Level for logging user actions (adding and modifying components, running simulations etc).  A user action should be logged as soon as possible on this level.  The level is separate so that additional INFO messages won&#039;t purge user actions from a bounded log buffer.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;INFO&#039;&#039;&#039; - Level for indicating general level actions the software is performing and other notable events during execution (dialogs shown, simulations run etc)&lt;br /&gt;
	&lt;br /&gt;
: &#039;&#039;&#039;DEBUG&#039;&#039;&#039; - Level for indicating mid-results, outcomes of methods and other debugging information.  The data logged should be of value when analyzing error conditions and what has caused them.  Places that are called repeatedly during e.g. flight simulation should use the VBOSE level instead.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;VBOSE&#039;&#039;&#039; - Level of verbose debug logging to be used in areas which are called repeatedly, such as computational methods used in simulations.  This level is separated to allow filtering out the verbose logs generated during simulations, DnD etc. from the normal debug logs.&lt;br /&gt;
&lt;br /&gt;
In the code, the standard way to log errors is with &lt;br /&gt;
 &lt;br /&gt;
 log.verbose(&amp;quot;Error message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
where log is defined in each class as :&lt;br /&gt;
 &lt;br /&gt;
 private static final LogHelper log = Application.getLogger();&lt;br /&gt;
&lt;br /&gt;
== Units used in OpenRocket ==&lt;br /&gt;
&lt;br /&gt;
OpenRocket always uses internally pure SI units.  For example all rocket dimensions and flight distances are in meters, all masses are in kilograms, density is in kg/m³, temperature is in Kelvin etc.  This convention is also used when storing the design in the OpenRocket format.&lt;br /&gt;
&lt;br /&gt;
The only exception to this rule is angles:&lt;br /&gt;
* Angles are represented as radians internally, but in the file format they are converted to degrees.  This is to make the file format more human-readable and to avoid rounding errors.&lt;br /&gt;
* Latitude and longitude of the launch site are represented in degrees both internally and externally.&lt;br /&gt;
&lt;br /&gt;
When displaying measures to the user, the values are converted into the preferred units of the user.  This is performed using classes in the package &amp;lt;tt&amp;gt;net.sf.openrocket.unit&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;Unit&amp;lt;/tt&amp;gt; class represents a single unit and it includes methods for converting between that unit and SI units in addition to creating a string representation with a suitable amount of decimals.  A &amp;lt;tt&amp;gt;UnitGroup&amp;lt;/tt&amp;gt; describes a measurable quantity such as temperature and contains the units available for that quantity, such as Celcius, Fahrenheit and Kelvin.&lt;br /&gt;
&lt;br /&gt;
== Rocket design loading and saving ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(This section is based on email correspondence)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All file reading/writing is performed in the package&lt;br /&gt;
&amp;lt;tt&amp;gt;net.sf.openrocket.file&amp;lt;/tt&amp;gt; and subpackages.  To implement a new&lt;br /&gt;
document loader it is necessary to extend the class &amp;lt;tt&amp;gt;RocketLoader&amp;lt;/tt&amp;gt; and&lt;br /&gt;
implement the abstract method &amp;lt;tt&amp;gt;loadFromStream(InputStream)&amp;lt;/tt&amp;gt;.  This&lt;br /&gt;
method simply loads the document and returns an &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt;&lt;br /&gt;
object.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;tt&amp;gt;OpenRocketDocument&amp;lt;/tt&amp;gt; contains all the information about an opened&lt;br /&gt;
document, primarily the rocket structure and the simulations.  The&lt;br /&gt;
rocket structure is a simple tree-like structure of &amp;lt;tt&amp;gt;RocketComponents&amp;lt;/tt&amp;gt;.&lt;br /&gt;
All of the components are in the package &amp;lt;tt&amp;gt;.rocketcomponent&amp;lt;/tt&amp;gt;.  A diagram&lt;br /&gt;
of their hierarchy and a short explanation of each class is available&lt;br /&gt;
in my thesis section 5.1&lt;br /&gt;
(http://openrocket.sourceforge.net/documentation.html)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve implemented a simple XML reading framework (based on SAX), which&lt;br /&gt;
simplifies reading by assuming that XML elements can contain only&lt;br /&gt;
other elements or text content, but not both.  Both the OpenRocket and&lt;br /&gt;
Rocksim format abide with this restriction.&lt;br /&gt;
&lt;br /&gt;
The framework is in the package &amp;lt;tt&amp;gt;.file.simplesax&amp;lt;/tt&amp;gt;.  The primary class&lt;br /&gt;
that will be extended is &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;, which contains three methods.&lt;br /&gt;
&amp;lt;tt&amp;gt;openElement()&amp;lt;/tt&amp;gt; is called when a new subelement is found, and it&lt;br /&gt;
returns a new &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt; to handle that element (which can be the&lt;br /&gt;
object itself), or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt; in order to ignore that element and all of its&lt;br /&gt;
contents (for example for unknown elements). &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt; is called&lt;br /&gt;
when the subelement ends, and &amp;lt;tt&amp;gt;endHandler()&amp;lt;/tt&amp;gt; is called when the element&lt;br /&gt;
of the current handler ends.  The JavaDoc should provide the necessary&lt;br /&gt;
details.&lt;br /&gt;
&lt;br /&gt;
There are a few ready handlers, the most useful of which will probably&lt;br /&gt;
be &amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt;.  This handler accepts only text content and&lt;br /&gt;
ignores all subelements.  If the XML file contains&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;element&amp;gt;value&amp;lt;/element&amp;gt;&amp;lt;/nowiki&amp;gt;, then the handler can return a&lt;br /&gt;
&amp;lt;tt&amp;gt;PlainTextHandler&amp;lt;/tt&amp;gt; and handle the content within the &amp;lt;tt&amp;gt;closeElement()&amp;lt;/tt&amp;gt;&lt;br /&gt;
method, removing the need to write a specialized handler for that&lt;br /&gt;
element.&lt;br /&gt;
&lt;br /&gt;
The XML reading is initiated by calling &amp;lt;tt&amp;gt;SimpleSAX.readXML()&amp;lt;/tt&amp;gt; with the&lt;br /&gt;
input source and the initial &amp;lt;tt&amp;gt;ElementHandler&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The OpenRocket document loading is implemented in&lt;br /&gt;
&amp;lt;tt&amp;gt;.file.openrocket.OpenRocketLoader&amp;lt;/tt&amp;gt;.  Here I&#039;ve used a bit more&lt;br /&gt;
boilerplate code to be able to define most of the rocket structure&lt;br /&gt;
preferences without needing separate handlers for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The OpenRocket format (*.ork) ===&lt;br /&gt;
&lt;br /&gt;
The OpenRocket native format uses the file extension *.ork.  It is an XML format, which can optionally be compressed using GZIP.  (The extension *.ork.gz is also accepted by the dialogs, though plain .ork is recommended.)&lt;br /&gt;
&lt;br /&gt;
Currently the file format is not documented other than as the reference implementation, and no XML schema exists.  This will hopefully change in the future.  See [[#Units used in OpenRocket]] for details on units.&lt;br /&gt;
&lt;br /&gt;
Every time the XML format changes, the file version number is increased.  This version number is not linked to the version of OpenRocket that created the file, but instead describes the file format.  Later versions of OpenRocket should attempt to store files in the oldest format that supports all the necessary features.  The changes in the format are described in the [http://openrocket.svn.sourceforge.net/viewvc/openrocket/trunk/fileformat.txt fileformat.txt file in SVN].&lt;/div&gt;</summary>
		<author><name>SiboVG</name></author>
	</entry>
</feed>