I haven't had a chance to test this yet but the concept is absolutely awesome. One of the things I liked most about Mach was the Wizard facility, and this goes a long way to making subroutines as nice for end-users as the Mach wizards.
To that end, I have a few ideas for ways to make this friendlier or more powerful:
1. As someone said earlier, it would be a nice option to be able to populate an input based on "Current Machine Position." Maybe you need three buttons for Machine X, Y, Z, etc.
2. Tool parameters: I'd like to set things like feed rate, plunge rate, RPM, and depth of cut on a per-tool basis and use them as defaults when populating a subroutine. Ideally I could either set these directly and see what they equate to in SFM, feed per tooth, etc. or vice-versa.
3. Graphic legend: Allow the subroutine programmer to attach an image which visually explains the parameters. Sometimes it's easier to put labels on a picture than explain things with words, especially as the number of params grows. Mach lets the wizard designer place the inputs directly on top of a graphic, but I think that's superfluous.
4. Saving parameters in a single part file: This one might be a bit complicated but I think it could be really powerful. Let's say you have a bracket which consists of a surfacing op, four drilled holes, and a rectangular pocket. You make one, but find that the pocket needs to be shifted 0.050" to the right and milled 0.050" deeper.
Right now, I could go into the gcode program, delete the pocketing routine, run the pocket sub with the new parameters, and paste the output. It's not bad, really, but it requires switching to an editor and it's easy to miss a line of code and ruin the program. I think it can be made much better:
- When the user first opens NGCGUI, allow them to select or create a new "Part File." I could see doing this as its own file, e.g. an XML file, or embedding the information in G-code comment blocks in the final program.
- The part file would contain a definition block for each part feature. A feature would be an instance of a particular subrotuine, i.e., if I run the "drill a hole" subroutine four times to define four drilled holes, my part program would have four feature definitions, with user-defined labels like Hole 1, Hole 2... Hole 4.
- If I chose an existing part file, the gui would have a dropdown with all the features of that type. I.e., if I choose the rectangular pocket sub, then open a part file, it would show me all the rectangular pockets on that part, plus the option to create a new one
- If I choose an existing pocket, it would load all the parameters, and then I could modify the specific ones I want, and save them.
- At some level, the user would get the option to "run all" which would run all the individual subroutines (of all types) based on their saved parameters, and spool the outputs into a single program file
When you combine this with the full toolpath preview in Axis, I think it would make for an extremely awesome user experience. And I don't know if my description makes it sound really complex to implement, but the way I'm seeing it I think it should be--mostly--pretty straightforward.