117 lines
4.3 KiB
Markdown
117 lines
4.3 KiB
Markdown
|
# XML File Generator
|
||
|
|
||
|
This directory contains an embryonic Python program with associated json data files that will generate the XML
|
||
|
files for OpenRocket component databases from a much more compact set of inputs.
|
||
|
|
||
|
## Motivation
|
||
|
|
||
|
The .orc XML files read by OpenRocket to define the "preset" parts have an enormous amount of duplicated data
|
||
|
that makes some kinds of systematic edits very difficult. For example, if it's discovered that the specified
|
||
|
inside diameter of a body tube series is slightly different than what is already in the XML files, every single
|
||
|
body tube, tube coupler, nose cone, bulkhead, and centering ring for that tube size has to be changed.
|
||
|
|
||
|
Likewise, if you wish to systematically set the offset between the outside diameters of centering rings and the
|
||
|
inside diameters of the mating body tubes, each and every centering ring entry must be edited.
|
||
|
|
||
|
Another major benefit is to provide error checking and consistency guarantees that should greatly increase the
|
||
|
accuracy of the XML parts files. In particiular, the following kinds of errors can be completely eliminated:
|
||
|
|
||
|
* Incorrect ID/OD becomes impossible for nearly all parts. Everything will match the tube system.
|
||
|
* Can automatically add all the referenced materials to the .orc files and flag those that don't exist
|
||
|
in the master materials list. Eliminates zero-mass parts that occur when the specified material isn't at the
|
||
|
top of the .orc file.
|
||
|
* Inconsistent organization of the description field in the XML will be eliminated, and can be easily changed.
|
||
|
|
||
|
Yet another benefit is to provide a place to capture research notes about various components and tube families.
|
||
|
|
||
|
Finally there is a desire to be able to automatically export large groups of parts into other formats such as
|
||
|
3D CAD and printing files.
|
||
|
|
||
|
## General Design
|
||
|
|
||
|
There will be a set of JSON files that define various systematic parameters, and the parts generated from them.
|
||
|
The JSON will be in at least first normal form so that fundamental data is not repeated.
|
||
|
The most important of these is the JSON file that defines the body tube size systems, since nearly everything
|
||
|
else is affected by tube diameters.
|
||
|
|
||
|
The description and part number fields in the XML file will be built from fields in the JSON.
|
||
|
|
||
|
Here is an example file defining the tube series dimensions:
|
||
|
```json
|
||
|
{
|
||
|
"BT-20":
|
||
|
{
|
||
|
"name": "BT-20",
|
||
|
"id" : "0.710 in",
|
||
|
"od" : "0.736 in",
|
||
|
"rmk": "standard 18mm motor tube"
|
||
|
},
|
||
|
"BT-50":
|
||
|
{
|
||
|
"name": "BT-50",
|
||
|
"id" : "0.950 in",
|
||
|
"od" : "0.976 in",
|
||
|
"rmk": "standard 24mm motor tube"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
Here is a file for one manufacturer's implementation of a tube series. This factoring is necessary because
|
||
|
multiple manufacturers implement identical dimension tubes but in various materials, colors, lengths, and PNs.
|
||
|
```json
|
||
|
{
|
||
|
"Estes BT-20 Classic":
|
||
|
{
|
||
|
"mfr_series_name" : "Estes BT-20 Classic",
|
||
|
"tube_series_name" : "BT-20",
|
||
|
"mfr_name" : "Estes",
|
||
|
"material" : "paper, kraft/glassine, Estes",
|
||
|
"description": "Body tube",
|
||
|
"color_default" : "kraft",
|
||
|
"data_sources" : ["Estes 1975 catalog"],
|
||
|
"products" :
|
||
|
{
|
||
|
"BT-20":
|
||
|
{
|
||
|
"len" : "18.0 in",
|
||
|
"pns" : [ "BT-20", "30316" ]
|
||
|
},
|
||
|
"BT-20P":
|
||
|
{
|
||
|
"len" : "13.75 in",
|
||
|
"pns" : [ "BT-20P", "30333"]
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
"Estes BT-50 Classic" :
|
||
|
{
|
||
|
"mfr_series_name": "Estes BT-50 Classic",
|
||
|
"tube_series_name" : "BT-50",
|
||
|
"mfr_name" : "Estes",
|
||
|
"material" : "paper, kraft/glassine, Estes",
|
||
|
"description": "Body tube",
|
||
|
"color_default" : "kraft",
|
||
|
"data_sources" : ["Estes 1975 catalog"],
|
||
|
"products" : [
|
||
|
{ "len" : "18.0 in",
|
||
|
"pns" : [ "BT-50", "30352" ]
|
||
|
},
|
||
|
{ "len" : "18.0 in",
|
||
|
"pns" : [ "BT-50", "30355"],
|
||
|
"color" : "yellow", # color override
|
||
|
"rmk" : "punched 1/4 inch hole at one end", # optional remark
|
||
|
"data_sources" : [ "Estes 1985 catalog", "http://foo.bar.baz" ] # specific sources for this item
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Here is a file for a nose cone series:
|
||
|
```
|
||
|
{ mfr_nose_cone_series: [
|
||
|
{ "mfr_series_name" : "Estes BNC-20",
|
||
|
"tube_series_name" : "BT-20",
|
||
|
]}
|
||
|
```
|