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", | ||
|  | ]} | ||
|  | ``` |