Here's an example, which will mill a set of slots in an efficient manner (first from left to right, then from right to left):
A ".gcl" file (pending a better choice of name---I'm told this extension is already used for GNU common lisp files) is processed by "gcode.tcl" to create a .ngc file output. Almost any g-code program which does not use square brackets or variables will be unchanged when processed, but Tcl variables and control structures like the for-loop shown here, may also be used. Specifically, the .gcl file is processed just like a "source"'d .tcl file, but when an unknown Tcl command is encountered (one not built-in or defined by a 'proc'), and it starts with one of the characters In the set "GMXYZABC(", it is copied to the output.G20; G0 X0 Y0 Z.1; F8 for {set i 0} {$i < 10} {incr i} { G0 X$i; G1 Z-.1 if {$i % 2 == 0} Y10 else Y0 G0 Z.1 } M2
Tcl has not only integer and floating-point numbers, but also strings, lists, and arrays. Tcl extensions can be written in C, C++, and other languages, so an interface to a library like CGAL could be implemented, easing the work of writing code to mill irregular pockets. And finally, the Tk graphical toolkit is accessible by simply putting 'package require Tk' in your .gcl file, allowing the program to include its own user-prompting facility.
The downsides to any "preprocess to linear g-code" method is that infinite programs cannot be written (though in fact, you can write O-words to the output of a gcl program), and that program logic cannot depend on the result of a probe operation (though again you can still "escape" to O-words). These may be required features for a few people, but probably not for most.
Files currently attached to this page:
example.gcl | 132 bytes |
gcode.tcl | 269 bytes |
(originally posted on the AXIS blog)
Entry first conceived on 28 December 2006, 14:19 UTC, last modified on 15 January 2012, 3:46 UTC
Website Copyright © 2004-2024 Jeff Epler