its great that you are taking on this type of project, but I do see one minor issue...
if every 'output' has to be created by you, there are billions of different programs/things out there, and there is only one of you (unless you found some new cloning tech?)... wouldn't it be better to come up with a way to have the end user define the output that they want/need? like a post processor type concept?
like for example, this could be the PP for cambam:
Code:
#EXT=XML
#PATH=C:\ProgramData\CamBam plus 0.9.8\tools
#HEADER START
<?xml version="1.0" encoding="utf-8"?>
<ToolLibrary Version="0.9.8.0" NumberFormat="0.00">
#HEADER END
#BODY START
<ToolDefinition Name="{TCToolName}">
<Index>{TCToolIndex}</Index>
<Diameter>{TCToolDiam}</Diameter>
<ToolProfile>{TCToolProfile}</ToolProfile>
<Flutes>{TCToolFlutes}</Flutes>
<FluteLength>{TCToolFluteLength}</FluteLength>
<Length>{TCToolLength}</Length>
<Material>{TCToolMaterial}</Material>
<ShankDiameter>{TCToolShankDiam}</ShankDiameter>
<HelixAngle>{TCToolHelixAngle}</HelixAngle>
<VeeAngle>{TCToolVeeAngle}</VeeAngle>
<MaxRampAngle>{TCToolMaxRampAngle}</MaxRampAngle>
<ToothLoad>{TCToolToothLoad}</ToothLoad>
<AxialDepthOfCut>{TCToolAxialDepthOfCut}</AxialDepthOfCut>
<RadialDepthOfCut>{TCToolRadialDepthOfCut}</RadialDepthOfCut>
</ToolDefinition>
#BODY END
#FOOTER START
</ToolLibrary>
#FOOTER END
the #Path would tell it where to dump the file (not sure this is a good idea, maybe make it optional?) so that for local stuff like cad/cam it would automatically put the file where needed.
the #EXT would just be the default file extension.
the #Header crap would just be all the unique[Blah crap] that everyone seems to want to put at the top of the tool file.
the #Body section is where all the fun stuff would happen, you would create a the file using the style or whatever you call it that is laid out in the body, and replace all the {TCToolXXX} with data from the database that matches that field (I just made up the TCToolxxx names as an example) and it would keep looping or whatever until it had processed every tool in the database
for things that the database doesn't track, like say like the {TCToolMaxRampAngle} field, then when making the PP file we could just either place default value there like this:
<MaxRampAngle>0</MaxRampAngle>
or maybe have a {null} option or something?
the #Footer would just be any ending crap that was need to finish off a file, probably only needed on .XML style outputs?
so for the above PP the output would look something like this:
Code:
<?xml version="1.0" encoding="utf-8"?>
<ToolLibrary Version="0.9.8.0" NumberFormat="0.00">
<ToolDefinition Name="1/16 SINGLE END 2 FLUTE CARBIDE END MILL">
<Index>3</Index>
<Diameter>0.0625</Diameter>
<ToolProfile>EndMill</ToolProfile>
<Flutes>2</Flutes>
<FluteLength>0.25</FluteLength>
<Length>0</Length>
<Material>Carbide</Material>
<ShankDiameter>0.125</ShankDiameter>
<HelixAngle>0</HelixAngle>
<VeeAngle>0</VeeAngle>
<MaxRampAngle>0</MaxRampAngle>
<ToothLoad>0</ToothLoad>
<AxialDepthOfCut>0</AxialDepthOfCut>
<RadialDepthOfCut>0</RadialDepthOfCut>
</ToolDefinition>
<ToolDefinition Name="1/16 SINGLE END 4 FLUTE ALTIN COATED">
<Index>4</Index>
<Diameter>0.0625</Diameter>
<ToolProfile>EndMill</ToolProfile>
<Flutes>4</Flutes>
<FluteLength>0.25</FluteLength>
<Length>0</Length>
<ShankDiameter>0.125</ShankDiameter>
<HelixAngle>0</HelixAngle>
<VeeAngle>0</VeeAngle>
<MaxRampAngle>0</MaxRampAngle>
<ToothLoad>0</ToothLoad>
<AxialDepthOfCut>0</AxialDepthOfCut>
<RadialDepthOfCut>0</RadialDepthOfCut>
<Material>Carbide</Material>
</ToolDefinition>
</ToolLibrary>