gcmc - G-Code Meta Compiler
Function reference
Vector functions
integer
count
(
vector:arg
)
integer
count
(
vectorlist:arg
)
integer
count
(
string:arg
)
arg |
vector |
|
Vector coordinates to count. |
arg |
vectorlist |
|
Vectors to count. |
arg |
string |
|
String characters to count. |
Returns number of coordinates or the number of
vectors in arg for argument types
vector and vectorlist
respectively.
Returns the number of bytes occupied by arg
if it is of type string. No support is available
for multi-byte charactersets to count the number of actual characters in the
string.
vector
delete
(
vector:arg,
scalar:idx
)
vector
delete
(
vector:arg,
scalar:idx,
scalar:cnt
)
vectorlist
delete
(
vectorlist:arg,
scalar:idx
)
vectorlist
delete
(
vectorlist:arg,
scalar:idx,
scalar:cnt
)
string
delete
(
string:arg,
scalar:idx
)
string
delete
(
string:arg,
scalar:idx,
scalar:cnt
)
arg |
vector |
|
Vector coordinates from which to remove coordinates. |
arg |
vectorlist |
|
Vectorlist from which to remove vectors. |
arg |
string |
|
String from which to remove characters. |
idx |
scalar |
[no unit] |
Index which entry to remove; valid range [-count(arg)...count(arg)-1]. |
cnt |
scalar |
[no unit] |
Number of entries to remove and must be ≥0 and defaults to 1 is not specified. |
Returns arg with
the entry idx removed from the vector, vectorlist
or string. The second form removes cnt entries.
Argument idx may be positive to remove at the
position counting from the start, or negative to start counting from the end
(with -1 being the last entry of the vector/vectorlist/string). Argument
cnt must be larger or equal to zero.
vector
insert
(
vector:arg,
scalar:val,
scalar:idx
)
vector
insert
(
vector:arg,
vector:val,
scalar:idx
)
vectorlist
insert
(
vectorlist:arg,
vector:val,
scalar:idx
)
vectorlist
insert
(
vectorlist:arg,
vectorlist:val,
scalar:idx
)
string
insert
(
string:arg,
string:val,
scalar:idx
)
arg |
vector |
|
Vector to insert coordinate(s) into. |
arg |
vectorlist |
|
Vectorlist to insert vector(s) into. |
arg |
string |
|
String to insert character(s) into. |
val |
scalar |
|
Scalar to insert into a vector. |
val |
vector |
|
Vector coordinates to insert into a vector, or vector to insert into a vectorlist. |
val |
vectorlist |
|
Vectors to insert into a vectorlist. |
val |
string |
|
String (characters) to insert into a string. |
idx |
scalar |
[no unit] |
Index at which to insert; valid range [-count(arg)-1...count(arg)]. |
Returns
arg with
value
val inserted into the
vector/vectorlist/string at position
idx.
Inserting a scalar
val into a
vector
or vector
val into a
vectorlist
inserts one single entry. Inserting a vector
val
into a
vector or vectorlist
val
into a
vectorlist inserts all of the contained
entries from
val.
The
idx argument specifies the location of
insertion with following meaning (with n =
count(arg)):
idx | = | -n-1 | prepend |
idx | ≥ | -n | insert |
idx | = | -1 | append |
idx | = | 0 | prepend |
idx | ≤ | n-1 | insert |
idx | = | n | append |
Inserting an empty vector into a vector, an empty vectorlist into a vectorlist
or an empty string into a string has no effect and the result is equal
arg.
When using huge vectorlists: It should be noted that simple prepending a single
vector to a vectorlist or appending a vectorlist to a vectorlist may use a
faster alternative formulation. The same is true for strings:
veclst = {...many many vectors...};
veclst = insert(veclst, vec, -1);
veclst += {vec};
veclst = insert(veclst, {vec1, vec2}, -1);
veclst += {vec1, vec2};
vectlst = insert(veclst, vec, 0);
veclst >>= 1;
veclst[0] = vec;
str = insert("string one", "string two", 0);
str = "string two" + "string one";
str = insert("string one", "string two", -1);
str = "string one" + "string two";
The intrinsic forms are faster because it does not require a copy of the veclst
or strings to be created. This also goes for prepending a value to a vector.
Appending values to vectors does not have a more efficient intrinsic
equivalent, which is in contrast to strings, where the reversal of the
arguments in intrinsic form is the most simple and efficient way.
float
length
(
vector:arg
)
arg |
vector |
[distance] |
Vector for length determination. |
Returns the length of
arg calculated as
sqrt(
arg *
arg).
vector
normalize
(
vector:arg
)
arg |
vector |
[distance] |
Vector for normalization. |
Returns the scaled version of
arg such that
length(
normalize(
arg))
equals 1.0. The resulting normalized vector has no units associated.
vector
reverse
(
vector:arg
)
vectorlist
reverse
(
vectorlist:arg
)
string
reverse
(
string:arg
)
arg |
vector |
|
Vector to reverse coordinates. |
arg |
vectorlist |
|
Vectorlist to reverse vectors. |
arg |
string |
|
String to reverse characters. |
Returns the reversed version of
arg such that all coordinates of a vector,
vectors of a vectorlist or characters of a string are reversed. I.e. the first
becomes the last, etc..
vector
position
(
)
vector
position
(
scalar:naxes
)
naxes |
scalar |
|
Maximum number of axis to return. Must be ≥ 1 and less or equal the number of active axes (6 or 9). |
Returns the current absolute position as a
vector. The default number of coordinates returned is 3 (XYZ). The maximum
number of coordinates returned is 6 or 9, depending whether 9-axis mode is
enabled on the command-line. The optional argument
naxes limits the number of axis returned.
vector
rotate_xy
(
vector:arg,
scalar:angle
)
vector
rotate_xz
(
vector:arg,
scalar:angle
)
vector
rotate_yz
(
vector:arg,
scalar:angle
)
vectorlist
rotate_xy
(
vectorlist:arg,
scalar:angle
)
vectorlist
rotate_xz
(
vectorlist:arg,
scalar:angle
)
vectorlist
rotate_yz
(
vectorlist:arg,
scalar:angle
)
arg |
vector |
[distance] |
Vector to rotate. |
arg |
vectorlist |
[distance] |
Vectors to rotate. |
angle |
scalar |
[angular] |
Angle of rotation. Defaults to radians if no units are associated. |
Returns arg rotated by angle.
The plane of rotation is XY, XZ or YZ for respective functions. If arg
is of type vectorlist, then each containing vector is
rotated and a vectorlist is returned.
vector
scale
(
vector:arg,
vector:mult
)
vectorlist
scale
(
vectorlist:arg,
vector:mult
)
arg |
vector |
|
Vector to scale. |
arg |
vectorlist |
|
Vectors to scale. |
mult |
vector |
|
Multiplication factors. |
Multiply arg with coefficients from
mult. Where mult can be seen
as the primary diagonal of a multiplication matrix. If the first argument is of type
vectorlist, then each containing vector of arg
is iterated and scaled separately.
vector
head
(
vector:arg,
scalar:nr
)
vectorlist
head
(
vectorlist:arg,
scalar:nr
)
string
head
(
string:arg,
scalar:nr
)
arg |
vector |
|
Vector to take coordinates from. |
arg |
vectorlist |
|
Vectorlist to take vectors from. |
arg |
string |
|
String to take characters from. |
nr |
scalar |
[no unit] |
Number of elements to take if positive and number of elements to leave when negative. |
Returns the first
nr
number of entries from
arg as a vector,
vectorlist or string. If
arg is a
vector
and has fewer than
nr entries, then the result is
padded with
undef until the result has
nr
entries.
If
arg is a
vectorlist
or
string and has fewer than
nr
entries, then only the available entries are returned.
If
nr is negative then a
vector/
vectorlist/
string
is returned with |
nr| fewer entries than
count(
arg).
vector
tail
(
vector:arg,
scalar:nr
)
vectorlist
tail
(
vectorlist:arg,
scalar:nr
)
string
tail
(
string:arg,
scalar:nr
)
arg |
vector |
|
Vector to take coordinates from. |
arg |
vectorlist |
|
Vectorlist to take vectors from. |
arg |
string |
|
String to take characters from. |
nr |
scalar |
[no unit] |
Number of elements to take if positive and number of elements to leave when negative. |
Returns the last
nr
number of entries from
arg as a vector,
vectorlist or string. If
arg is a
vector
and has fewer than
nr entries, then the result is
prepended with
undef until the result has
nr
entries.
If
arg is a
vectorlist
or
string and has fewer than
nr
entries, then only the available entries are returned.
If
nr is negative then a
vector/
vectorlist/
string
is returned with |
nr| fewer entries than
count(
arg).
Special functions
integer
linecolor
(
)
integer
linecolor
(
scalar:color
)
integer
linecolor
(
string:color
)
integer
linecolor
(
scalar:hue,
scalar:saturation,
scalar:value
)
color |
integer |
[none] |
The color as an integer; usually specified as a hex number in 0xrrggbb. |
color |
string |
|
The color in standard "#rrggbb" format. |
hue |
scalar |
[angular] |
The HSV angle in the color circle. Defaults to radians if no units are associated. |
saturation |
scalar |
[none] |
The color saturation; valid range [0.0...1.0]. |
value |
scalar |
[none] |
The color value (intensity); valid range [0.0...1.0]. |
Set the color of the lines, arcs and circles
generated by moves in SVG and DXF. The argument color
may be an integer or a string using "#RRGGBB" format. You can also specify the
color in the HSV colorspace. The angle is internally normalized using a modulo
360deg calculation and made positive. Calling linecolor()
without arguments simply returns the current color. Otherwise it returns the
previous color.
float
lineopacity
(
)
float
lineopacity
(
scalar:level
)
level |
scalar |
[none] |
The level of opacity; valid range [0.0...1.0]. |
Sets the opacity of the lines drawn in SVG and
DXF to level, where 1.0 is fully opaque and 0.0
is completely transparent. The current unitless opacity is returned if no
argument is given. Otherwise it returns the unitless opacity before the
call.
float
linewidth
(
)
float
linewidth
(
scalar:width
)
width |
scalar |
[distance] |
The width of the lines; valid range [0.001mm...1000.0mm]. |
Sets the line width of the lines drawn in SVG and
DXF to width. The width is specified as a
distance parameter, which allows exact sizes to be created with any distance
units. The current line width is returned in distance units if no argument is
given. Otherwise it returns the line width in distance units before the
call.
undef
relocate
(
)
undef
relocate
(
vector:offs
)
offs |
vector |
|
Vector coordinates defining the current relative offset. |
Sets a relative offset for any axis on all
subsequent output of any path. The relative offset is applied to the
coordinates just before they are output. The relative offset is independent of
the offset set on the command-line. A program may set both, either or neither
relative or global offsets for any coordinate. The generated output uses the
sum of the global offset (command-line values) and the currently active
relative offset, as set by the offs argument. Any
coordinate not specified in the offs argument is
set to zero (0.0). Not specifying an argument to the
relocate() function zeros the relative offset
for all axes.
The relocate() function is especially useful
when several identical parts must be cut on one piece, but at different
locations. The generating code can be simplified by producing the same path
with different relative offsets, set before the call to generate the pattern.
Note: proper parametrization of the generating code is better (creating a
function with a specific offset argument). The
relocate() function is an alternative to achieve
a non-parametrized result quickly.
vectorlist
typeset
(
string:text,
integer:fontid
)
text |
string |
|
The text to typeset in UTF-8 format. |
fontid |
integer |
[no unit] |
Reference ID of the font to use (see table below). |
Returns a vectorlist with all strokes to write out
text shaped using the font-face as defined by the
fontid argument. The vectorlist includes pen-up
and pen-down vectors so movement can be separated into engraving and
non-engraving.
The
fontid should be one of the following:
The fonts are derived from the Hershey fonts and linked to a corresponding
visualisation in SVG format for all glyphs in the font-faces.
The returned vectorlist is constructed with two inital vectors. The first
vector is always a pen-up movement specified as [-, -, 1.0]. The
second vector is always a movement to the XY origin [0.0, 0.0, -].
The last two vectors in the vectorlist is the are always a pen-up movement
followed by a XY movement to the end-position of the typeset string. The
end-position is such that it can be used as an offset for subsequent
strings. The setting can be illustrated as:
veclist[0] = [-, -, 1.0];
veclist[1] = [0.0, 0.0, -];
veclist[2] = [x, y, -];
veclist[3] = [-, -, 0.0];
... lots of entries up to n-2 ...
veclist[n-1] = [-, -, 1.0];
veclist[n] = [end_x_pos, 0.0, -];
A pen-down movement is defined as vector [-, -, 0.0]. This implies
that the engraving plane is defined at Z-level 0.0 (down).
The font-height is by definition 1.0. All glyphs are scaled such that the upper
case character 'X' has the exact height of 1.0. No units are associated with
any value in the vectors. The caller may use the
scale() function to scale the font to
real-world sizes, as well as scaling the engraving plane to any level.
Additionally, vector-additions may be used to relocate the typeset text to any
position in space.
See also the library function
engrave()
for engraving the returned vectorlist and the examples in the
distribution for outputting the vectorlist. You can alternatively use the
path with
move() and
goto() calls manually (see
engrave()
source in the distribution for details).
Math functions
scalar
abs
(
scalar:val
)
Return the absolute value of val. Units are preserved.
float
acos
(
scalar:val
)
val |
scalar |
[no unit] |
A number from -1.0 to 1.0. |
Return the arc-cosine of val in radians.
float
asin
(
scalar:val
)
val |
scalar |
[no unit] |
A number from -1.0 to 1.0. |
Return the arc-sine of val in radians.
float
atan
(
scalar:y,
scalar:x
)
y |
scalar |
[distance] |
Any number. |
x |
scalar |
[distance] |
Any number. |
Return the arc-tangent of y/x in radians.
float
atan_xy
(
vector:v
)
v |
vector |
[distance] |
Any vector with both X and Y coordinates. |
Return the arc-tangent of v.y/v.x in radians.
float
atan_xz
(
vector:v
)
v |
vector |
[distance] |
Any vector with both X and Z coordinates. |
Return the arc-tangent of v.z/v.x in radians.
float
atan_yz
(
vector:v
)
v |
vector |
[distance] |
Any vector with both Y and Z coordinates. |
Return the arc-tangent of v.z/v.y in radians.
float
ceil
(
scalar:val
)
Return the smallest integral number not smaller than
val.
Units are preserved. Examples:
ceil(0.5) → 1.0
ceil(-0.5) → 0.0
float
cos
(
scalar:angle
)
angle |
scalar |
[angular] |
Any number. Defaults to radians if no units are associated. |
Return the cosine of angle.
The returned value has no units associated.
float
exp
(
scalar:val
)
Return the exponentiation of val with base e.
The returned value has no units associated.
float
floor
(
scalar:val
)
Return the largest integral number not greater than
val.
Units are preserved. Examples:
floor(0.5) → 0.0
floor(-0.5) → -1.0
float
log10
(
scalar:val
)
float
log2
(
scalar:val
)
float
loge
(
scalar:val
)
val |
scalar |
|
Any number greater than zero. |
Return the logarithm of val with base 10, 2 and e respectively.
The returned value has no units associated.
float
pi
(
)
Returns pi (3.141592.....).
float
pow
(
scalar:x,
scalar:y
)
x |
scalar |
|
Any number. |
y |
scalar |
[no unit] |
Any number. |
Return the x raised to the power y.
The returned value has no units associated.
float
round
(
scalar:val
)
Return
val rounded with half-way cases rounded away from zero.
Units are preserved. Examples:
round(0.7) → 1.0
round(0.5) → 1.0
round(0.4) → 0.0
round(-0.4) → 0.0
round(-0.5) → -1.0
round(-0.7) → -1.0
float
sign
(
scalar:val
)
Returns +1.0 if val
is greater or equal 0.0 and -1.0 if val is
negative. The returned value has no units associated.
float
sin
(
scalar:angle
)
angle |
scalar |
[angular] |
Any number. Defaults to radians if no units are associated. |
Return the sine of angle.
The returned value has no units associated.
float
sqrt
(
scalar:val
)
val |
scalar |
|
Any number greater or equal zero. |
Return the square root of val.
The returned value has no units associated.
float
tan
(
scalar:angle
)
angle |
scalar |
[angular] |
Any number. Defaults to radians if no units are associated. |
Return the tangent of angle.
The returned value has no units associated.
undef
undef
(
)
Return an
undef
value. An
undef value may also be written as
[-][0] (see also
Undef handling),
but it is more readable to write it as a function.
Conversion functions
scalar
to_deg
(
scalar:arg
)
vector
to_deg
(
vector:arg
)
vectorlist
to_deg
(
vectorlist:arg
)
arg |
scalar |
[angular] |
Any number. |
arg |
vector |
[angular] |
|
arg |
vectorlist |
[angular] |
|
Returns
arg /
pi() * 180.0 (deg)
if
arg has unit radians, returns
arg otherwise. Vectors and vectorlists are iterated
over all scalars contained in them and return vector or vectorlist.
Conversions:
1 | → 1deg |
1mm | → Warning, 1deg |
1in | → Warning, 1deg |
1deg | → 1deg |
1rad | → 57.29577951deg |
undef | → undef |
scalar
to_distance
(
scalar:arg
)
vector
to_distance
(
vector:arg
)
vectorlist
to_distance
(
vectorlist:arg
)
arg |
scalar |
|
Any number. |
arg |
vector |
|
|
arg |
vectorlist |
|
|
Returns
arg
converting any value without distance units to have distance units. The units
depend on the command-line setting whether metric or imperial is used according
to following rules:
If gcmc is run in metric mode (default):
1 | → 1mm |
1mm | → 1mm |
1in | → 1in |
1deg | → Warning, 1mm |
1rad | → Warning, 1mm |
undef | → undef |
If gcmc is run in imperial mode (-i/--imperial option set on command-line):
1 | → 1in |
1mm | → 1mm |
1in | → 1in |
1deg | → Warning, 1in |
1rad | → Warning, 1in |
undef | → undef |
Vectors and vectorlists are iterated over all scalars contained in them and
return vector or vectorlist.
scalar
to_rad
(
scalar:arg
)
vector
to_rad
(
vector:arg
)
vectorlist
to_rad
(
vectorlist:arg
)
arg |
scalar |
[angular] |
Any number. |
arg |
vector |
[angular] |
|
arg |
vectorlist |
[angular] |
|
Returns
arg *
pi() / 180.0 (rad)
if
arg has unit degrees, returns
arg otherwise. Vectors and vectorlists are iterated
over all scalars contained in them and return vector or vectorlist.
Conversions:
1 | → 1rad |
1mm | → Warning, 1rad |
1in | → Warning, 1rad |
1deg | → 0.01745329rad |
1rad | → 1rad |
undef | → undef |
scalar
to_in
(
scalar:arg
)
vector
to_in
(
vector:arg
)
vectorlist
to_in
(
vectorlist:arg
)
scalar
to_inch
(
scalar:arg
)
vector
to_inch
(
vector:arg
)
vectorlist
to_inch
(
vectorlist:arg
)
arg |
scalar |
[distance] |
Any number. |
arg |
vector |
[distance] |
|
arg |
vectorlist |
[distance] |
|
Returns
arg coverted to inch.
If
arg has no units or already is in inch, then no
conversion is performed. Vectors and vectorlists are iterated over all scalars
contained in them and return vector or vectorlist. Conversions:
1 | → 1in |
1mm | → 0.03937008in |
1in | → 1in |
1deg | → Warning, 1in |
1rad | → Warning, 1in |
undef | → undef |
Function
to_in() is an alias for
to_inch().
scalar
to_mm
(
scalar:arg
)
vector
to_mm
(
vector:arg
)
vectorlist
to_mm
(
vectorlist:arg
)
arg |
scalar |
[distance] |
Any number. |
arg |
vector |
[distance] |
|
arg |
vectorlist |
[distance] |
|
Returns
arg coverted to mm.
If
arg has no units or already is in mm, then no
conversion is performed. Vectors and vectorlists are iterated over all scalars
contained in them and return vector or vectorlist. Conversions:
1 | → 1mm |
1mm | → 1mm |
1in | → 25.4mm |
1deg | → Warning, 1mm |
1rad | → Warning, 1mm |
undef | → undef |
scalar
to_native
(
scalar:arg
)
vector
to_native
(
vector:arg
)
vectorlist
to_native
(
vectorlist:arg
)
arg |
scalar |
|
Any number. |
arg |
vector |
|
|
arg |
vectorlist |
|
|
Returns
arg converting any value to gcode native representation according to following rules:
If gcmc is run in metric mode (default):
1 | → 1 |
1mm | → 1mm |
1in | → 25.4mm |
1deg | → 1deg |
1rad | → 57.2957795131deg |
undef | → undef |
If gcmc is run in imperial mode (-i/--imperial option set on command-line):
1 | → 1 |
1mm | → 0.0393700787402in |
1in | → 1in |
1deg | → 1deg |
1rad | → 57.2957795131deg |
undef | → undef |
Vectors and vectorlists are iterated over all scalars contained in them and
return vector or vectorlist.
scalar
to_none
(
scalar:arg
)
vector
to_none
(
vector:arg
)
vectorlist
to_none
(
vectorlist:arg
)
arg |
scalar |
|
Any number. |
arg |
vector |
|
|
arg |
vectorlist |
|
|
Returns
arg stripping any
associated units. Vectors and vectorlists are iterated over all scalars
contained in them and return vector or vectorlist. Conversions:
1 | → 1 |
1mm | → 1 |
1in | → 1 |
1deg | → 1 |
1rad | → 1 |
undef | → undef |
string
to_string
(
arg,
...
)
Returns arg and any
additional arguments converted and concatenated to a string. Scalar values,
including those within vectors and
vectorlists, have their units appended in
the string. Floating point values are printed with the number of decimals as
indicated on the command-line.
string
to_chr
(
integer:arg
)
arg |
integer |
none |
Value to convert to Unicode |
Returns arg
converted to a string with one Unicode character with the value of
arg. The argument must be integer and have no
units attached or a warning wil be emitted. An additional warning is emitted in
pedantic mode if arg is zero.
integer
to_val
(
string:arg
)
arg |
string |
|
String (character) to convert to Unicode value |
Returns the first Unicode character of
arg converted to an integer value without units.
Any additional characters in the argument are ignored. Zero is returned if the
string is empty.
float
to_float
(
scalar:arg
)
vector
to_float
(
vector:arg
)
vectorlist
to_float
(
vectorlist:arg
)
float
to_float
(
string:arg
)
arg |
scalar |
|
Any number. |
arg |
vector |
|
|
arg |
vectorlist |
|
|
arg |
string |
|
|
Convert arg to floating
point. Vectors and vectorlists are iterated over all scalars contained in them
and return vector or vectorlist. Undef is returned as undef and units are
preserved.
Strings are converted into floating point numbers with optional units (mm, in,
mil, rad, deg). A string that cannot be converted returns 0.0 and emits a
warning. Both conversions to NaN (not a number) and Inf (infinity) result in a
warning. The special string "<undef>" will result in an undef value.
integer
to_int
(
scalar:arg
)
vector
to_int
(
vector:arg
)
vectorlist
to_int
(
vectorlist:arg
)
integer
to_int
(
string:arg
)
integer
to_int
(
string:arg,
integer:base
)
arg |
scalar |
|
Any number. |
arg |
vector |
|
|
arg |
vectorlist |
|
|
arg |
string |
|
|
base |
integer |
none |
Conversion base must be zero or [2..36] |
Convert
arg to
integer. Floating point numbers are converted by truncation. However, values
are subject to EPSILON calculation. Any floating point value within EPSILON of
an integer value will be rounded to that value. Examples:
1.5 | → | 1 |
-1.5 | → | -1 |
0.999999999999999 | → | 1 |
Vectors and vectorlists are iterated over all scalars contained in them
and return vector or vectorlist. Undef is returned as undef and units are
preserved.
String are converted to integer with optional units (mm, in, mil, rad, deg). A
string that cannot be converted returns 0 and emits a warning. The integer
number may be of octal, decimal or hexadecimal base using usual patterns.
Integer numbers for base zero can be described by the following regex:
Octal | [+-]?0[0-7]*(mm|in|mil|rad|deg)? |
Decimal | [+-]1[0-9]*(mm|in|mil|rad|deg)? |
Hexadecimal | [+-]?0[xX][0-9a-fA-F]*(mm|in|mil|rad|deg)? |
undef | <undef> |
The optional
base argument may be used to specify
a specific conversion base for the number. This may or may not play nice with
attached units. The same problem exists for hexadecimal conversions and deg
units.
Note 1: The variable base means that values with a leading zero are
interpreted as octal numbers.
Note 2: Using 'mil' as unit may lead to loss of digits because the value
is automatically converted to inch and
remains integer. A warning is
emitted if this happens. If you want the specific conversion, then you should use
to_int(
to_float(milvalue))
instead, which will perform the same function without the warning.
Output flow functions
undef
literal
(
...
)
Outputs all arguments as text into the output.
Note that the
literal() function does
not terminate the line with a newline and you must provide the newline as a
string argument if the line must be terminated. The SVG and DXF backends ignore
this function.
Do
not use the
literal()
function lightly. It is extremely powerful but also very dangerous. It will
make your source a lot more unreadable and may introduce side-effects that you
did not intend.
If you simply want to embed a comment or a G-code debug statement, you should
be using the
comment() function
instead because it is much safer to use.
undef
(
...
)
Outputs all arguments as a G-code comment into
the output. The
comment() function
will prepend a '(' and append a ')' including newline automatically.
undef
message
(
...
)
undef
warning
(
...
)
undef
error
(
...
)
Outputs all arguments as text to the console. Origin
file and line number is prepended and a newline is appended if none in the last
argument. The gcmc executable will return non-zero if error() is
executed.
Query functions
integer
isfloat
(
arg
)
integer
isint
(
arg
)
integer
isscalar
(
arg
)
integer
isstring
(
arg
)
integer
isundef
(
arg
)
integer
isvector
(
arg
)
integer
isvectorlist
(
arg
)
These functions return an integer (boolean) which is
true (1) if
arg is of tested type and false (0)
otherwise.
Function
isscalar(
arg) equals
"
isint(
arg) ||
isfloat(
arg)".
integer
isangle
(
scalar:arg
)
integer
isdistance
(
scalar:arg
)
integer
isdeg
(
scalar:arg
)
integer
israd
(
scalar:arg
)
integer
ismm
(
scalar:arg
)
integer
isinch
(
scalar:arg
)
integer
isnone
(
scalar:arg
)
These functions return an integer (boolean) which is
true (1) if
arg has the tested units and false (0)
otherwise.
Function
isangle(
arg) equals
"
israd(
arg) ||
isdeg(
arg)".
Function
isdistance(
arg) equals
"
ismm(
arg) ||
isinch(
arg)".
integer
isgcode
(
)
integer
isdxf
(
)
integer
issvg
(
)
These function return an integer (boolean) which is
true (1) is the current output format is set as queried and false (0)
otherwise.
integer
isdefined
(
string:var
)
Returns an integer (boolean) which is true (1) if a
variable with name var is currently defined in either
local or global scope and false (0) otherwise.
integer|undef
isconst
(
string:var
)
Returns an integer (boolean) which is true (1) if
a variable with name var is constant and false
(0) otherwise. The return value is undef if the
variable is not defined in local or global scope.
integer
ismodemm
(
)
Returns an integer (boolean) which is true (1) if
gcmc is run in millimeter mode and false (0) if run in inch mode (option
-i/--imperial).
integer
isrelative
(
)
Returns an integer (boolean) which is true (1) if the
output is set to relative mode (-r option) and false (0) otherwise.
Movement functions
vector
arc_ccw
(
vector:endpoint,
scalar:radius
)
vector
arc_ccw
(
vector:endpoint,
scalar:radius,
scalar:turns
)
vector
arc_ccw_r
(
vector:endpoint,
scalar:radius
)
vector
arc_ccw_r
(
vector:endpoint,
scalar:radius,
scalar:turns
)
vector
arc_cw
(
vector:endpoint,
scalar:radius
)
vector
arc_cw
(
vector:endpoint,
scalar:radius,
scalar:turns
)
vector
arc_cw_r
(
vector:endpoint,
scalar:radius
)
vector
arc_cw_r
(
vector:endpoint,
scalar:radius,
scalar:turns
)
endpoint |
vector |
[distance] |
Endpoint coordinate of the arc. |
radius |
scalar |
[distance] |
Radius of the arc. Radius must not be zero. |
turns |
scalar |
[no units] |
Number of turns to perform. Turns should be integer and must be larger than zero. |
Perform a counter clockwise (ccw) or clockwise (cw)
arc from the current position to
endpoint with radius
radius. The arc will be shortest angular movement with
positive radius and largest angular movement with negative radius. Optional
turns sets the number of turns to perform. Functions
arc_ccw_r() and
arc_cw_r()
use relative addressing. The argument endpoint returned.
undef
circle_ccw
(
vector:centerpoint
)
undef
circle_ccw
(
vector:centerpoint,
scalar:turns
)
undef
circle_ccw
(
scalar:radius,
scalar:angle
)
undef
circle_ccw_r
(
vector:centerpoint
)
undef
circle_ccw_r
(
vector:centerpoint,
scalar:turns
)
undef
circle_cw
(
vector:centerpoint
)
undef
circle_cw
(
vector:centerpoint,
scalar:turns
)
undef
circle_cw
(
scalar:radius,
scalar:angle,
scalar:turns
)
undef
circle_cw_r
(
vector:centerpoint
)
undef
circle_cw_r
(
vector:centerpoint,
scalar:turns
)
centerpoint |
vector |
[distance] |
Coordinate of the center of the circle. |
radius |
scalar |
[distance] |
Radius of the circle. |
angle |
scalar |
[angular] |
Angle of the vector from the current point to the center of the circle. Defaults to radians if no units are associated. |
turns |
scalar |
[no units] |
Number of turns to perform. Turns should be integer and must be larger than zero. |
Perform a clockwise (cw) or counter clockwise (ccw)
circle with radius
length(
centerpoint)
for the
circle_cw_r and
circle_ccw_r
functions and radius
length(
centerpoint-
position())
for the
circle_cw and
circle_ccw
functions and where
centerpoint is the center point or
the circle. Optional
turns sets the number of turns
to perform. The specified
centerpoint is a relative
position for the
circle_cw_r and
circle_ccw_r
functions and an absolute coordinate for
circle_cw
and
circle_ccw. The non-active plane coordinate
may be used to create a helical movement.
The scalar form performs a clockwise (cw) or counter clockwise (ccw)
circle with radius
radius. The center point is located
at a vector calculated from the current position of length
radius
and angled at
angle. Optional
turns
sets the number of turns to perform. The circle is always performed within the
active plane.
undef
drill
(
vector:drillpoint,
scalar:retract,
scalar:increment
)
undef
drill
(
vector:drillpoint,
scalar:retract,
scalar:increment,
scalar:repeat
)
drillpoint |
vector |
[distance] |
Endpoint of the drill-hole. |
retract |
scalar |
[distance] |
Endpoint of the Z-axis after drilling. |
increment |
scalar |
[distance] |
Increments of the Z-axis before retracting temporarily. |
repeat |
scalar |
[no units] |
Number of repeats of the drill-cycle. Repeats must be larger the zero. |
Perform a drill-cycle to drillpoint
with retract denoting the retract (Z) position after the cycle,
increment the Z-axis increments and optional
repeat repeats.
vector
goto
(
vector:endpoint
)
vector
goto
(
vectorlist:points
)
vector
goto_r
(
vector:endpoint
)
vector
goto_r
(
vectorlist:points
)
endpoint |
vector |
[distance/anglular] |
Endpoint of the rapid |
points |
vectorlist |
[distance/anglular] |
Points to visit using rapids |
Rapid move (G0) to position
endpoint,
or all position in vectorlist
points.
The
endpoint/
points
position is an absolute position for
goto()
and a relative position for
goto_r().
The
endpoint vector and each vector in vectorlist
points may consist of up to nine coordinates and
are interpreted for axis XYZABCUVW respectively. Coordinates for axes XYZ and
UVW are interpreted with distance units and axes ABC are interpreted with
angular units. The absolute position before the movement is returned.
integer
layer
(
)
integer
layer
(
integer:id
)
integer
layer
(
string:name
)
id |
integer |
[none] |
One-based index in the layer stack |
name |
string |
|
Name of the layer to activate |
Set the active layer on which to output feed moves
from the
move(),
move_r(),
arc_*(),
circle_*() and all other feed-move
producing functions.
The
id argument is an index in the set of layers
defined by the
layerstack() call.
The index is one-based. Alternatively, the active layer can be set by
specifying the name of the layer using the
name
argument. The
name must have the same spelling as
used in the
layerstack() call or a
warning will be issued.
Layers are transparent to the G-Code backend and are simply ignored. All rapid
and feed movement is output regardless of the active layer. Currently, only SVG
and DXF backends make use of the layer settings.
Note: Layer names are limited to characters
[a-zA-Z0-9_]. Any other characters result in an error.
The function returns the currently active layer if called without arguments.
The other two forms with one argument will return the previously active layer
(before the call).
Example:
square = {[-1,-1], [-1,1], [1,1], [1,-1]};
layerstack("layer1", "layer2", "layer3");
layer(2);
goto(square[-1] * 20.0mm);
move(square * 20.0mm);
layer(3);
goto(square[-1] * 30.0mm);
move(square * 30.0mm);
layer("layer1");
goto(square[-1] * 10.0mm);
move(square * 10.0mm);
undef
layerstack
(
string:name1 [,
string:name2 [, ...] ]
)
name* |
string |
|
Name of the layers |
Declare the stack of layers to be used in DXF and SVG output. Each
name argument is entered in the stack in the
order in which they are specified. The output routine will output the layers in
that order.
The
layerstack() function
automatically activates the first layer in the argument list after the call. A
call to
layer() must be used to change
the active layer.
Note: Layer names are limited to characters
[a-zA-Z0-9_]. Any other characters result in an error.
vector
move
(
vector:endpoint
)
vector
move
(
vector:endpoint,
scalar:rate
)
vector
move
(
vectorlist:points
)
vector
move
(
vectorlist:points,
scalar:rate
)
vector
move_r
(
vector:endpoint
)
vector
move_r
(
vector:endpoint,
scalar:rate
)
vector
move_r
(
vectorlist:points
)
vector
move_r
(
vectorlist:points,
scalar:rate
)
endpoint |
vector |
[distance/angular] |
Endpoint of the feed move |
points |
vectorlist |
[distance/angular] |
A list of points to visit |
rate |
scalar |
[distance] |
Maximum feed rate override; must be larger than zero. |
Feed move (G1) to position
endpoint,
or all position in vectorlist
points.
The
endpoint/
points position is an absolute position for
move() and a relative position for
move_r().
The optional
rate argument sets the feed override
(F-parameter) for this move and is interpreted in the context of the
feedmode() setting.
The
endpoint vector and each vector in vectorlist
points may consist of up to nine coordinates and
are interpreted for axis XYZABCUVW respectively. Coordinates for axes XYZ and
UVW are interpreted with distance units and axes ABC are interpreted with
angular units. The absolute position before the movement is returned.
integer
plane
(
scalar:mode
)
integer
plane
(
string:mode
)
mode |
scalar |
[no units] |
Active cutting plane (see below). |
mode |
string |
|
Active cutting plane (see below). Mode is case-insensitive. |
Set the current operational plane to
mode or
return the current active plane. Argument
mode
may be one of the following:
| scalar | (value) | string | Description |
• | PLANE_QUERY | (undef) | | return current plane as integer |
• | PLANE_XY | (0) | "XY" | set XY plane and return previous value (G17, default set in prologue) |
• | PLANE_XZ | (1) | "XZ" | set XZ plane and return previous value (G18) |
• | PLANE_YZ | (2) | "YZ" | set YZ plane and return previous value (G19) |
The previously active plane is returned if the plane is set. The current plane
of operation is returned as an integer if
mode is
undef.
G-code functions
undef
coolant
(
scalar:state
)
undef
coolant
(
string:state
)
state |
scalar |
[no units] |
Coolant state (see below). |
state |
string |
|
Coolant state (see below). State is case-insensitive. |
Enable/disable coolant (M7, M8, M9). Argument
state must be one of:
| scalar | (value) | string | Description |
• | COOLANT_OFF | (0) | "off" | coolant off |
• | COOLANT_MIST | (1) | "mist" | coolant mist |
• | COOLANT_FLOOD | (2) | "flood" | coolant flood |
• | COOLANT_ALL | (3) | "mist+flood" | coolant mist+flood |
undef
dwell
(
scalar:time
)
time |
scalar |
[no units] |
Time to stay at the current position. Time must be larger or equal zero. |
Pause (G4) for time seconds.
undef
feedmode
(
scalar:mode
)
undef
feedmode
(
string:mode
)
mode |
scalar |
[no units] |
Feed mode (see below). |
mode |
string |
|
Feed mode (see below). Mode is case-insensitive. |
Feed rate mode setting to one of the following:
| scalar | (value) | string | Description |
• | FEEDMODE_INVERSE | (0) | "inverse" | Inverse Time Mode (G93) |
• | FEEDMODE_UPM | (1) | "upm" | Units Per Minute (G94) (default) |
• | FEEDMODE_UPR | (2) | "upr" | Units Per Revolution (G95) |
The time based units interpretation depend on the command-line setting whether
metric (mm/s) or imperial (in/s).
undef
feedrate
(
scalar:rate
)
rate |
scalar |
[distance] |
Feed rate; must be larger than zero. |
Set feedrate (F) to
rate. The
rate is interpreted following the setting of the
feedmode() function.
undef
lathemode
(
scalar:mode
)
undef
lathemode
(
string:mode
)
mode |
scalar |
[no units] |
Lathe mode (see below) |
mode |
string |
|
Lathe mode (see below). Mode is case-insensitive. |
Sets the lathe X-axis mode of operation to radius (G8) or diameter (G7) according to following arguments:
| scalar | (value) | string | Description |
• | LATHEMODE_RADIUS | (0) | "radius" | Move X-axis full distance, making the final part diameter double the indicated X-move (G8) (default) |
• | LATHEMODE_DIAMETER | (1) | "diameter" | Move X-axis at 1/2 distance, making the final part diameter as indicated by the X-move. (G7) |
undef
fixpos_restore
(
scalar:g28g30
)
undef
fixpos_restore
(
scalar:g28g30,
vector:rapid
)
g28g30 |
scalar |
[none] |
Boolean to indicate which position storage to retrieve |
rapid |
vector |
|
Rapid before restoring predefined position |
Emit a G28 or G30 gcode (goto predefined position).
If
g28g30 evaluates to false then G28 is used,
otherwise G30. The argument
rapid defines a
rapid move in absolute coordinates to perform before the rapid move to the
indicated stored position is performed.
A warning is emitted if the position was never stored using
fixpos_store or set using
fixpos_set before restored and
gcmc's internally tracked position is set to
[0, 0, 0, 0, 0, 0, 0, 0, 0].
undef
fixpos_set
(
scalar:g28g30,
vector:pos
)
g28g30 |
scalar |
[none] |
Boolean to indicate which position storage to retrieve |
pos |
vector |
|
Absolute position to set at stored entry |
Set the position
pos for use in use in G28 and G30. If
g28g30 evaluates to false then G28's position is
set, otherwise G30's position is set.
This function is an administrative function to allow
fixpos_restore() to be called
without emitting a warning. The G28/G30 positions are often machine dependent
variables and gcmc has no means of knowing them unless set explicitly.
undef
fixpos_store
(
scalar:g28g30
)
g28g30 |
scalar |
[none] |
Boolean to indicate which position storage to retrieve |
Emit a G28.1 or G30.1 gcode (store current absolute position).
If g28g30 evaluates to false then G28.1 is used,
otherwise G30.1.
undef
pathmode
(
scalar:exact
)
undef
pathmode
(
scalar:pathtol,
scalar:colintol
)
exact |
scalar |
[none] |
Boolean to indicate pathmode exact (true) or blend (false) |
pathtol |
scalar |
[distance] |
Maximum path tolerance for any given path. Must be ≥0.0 |
colintol |
scalar |
[distance] |
Co-linearity tolerance to join paths. Must be ≥0.0 |
The single argument form emits a G61 (exact
path mode) gcode when exact is true and a G64
gcode (best possible speed) when exact is
false.
The dual argument form emits a G64 with path tolerance (P-parameter) set
to pathtol and the co-linearity tolerance
(Q-parameter) to colintol. If you only intent to
use/set the path tolerance, then you should set colintol
to <undef> to suppress the Q-parameter or set both pathtol
and colintol to the same value.
undef
pause
(
)
undef
pause
(
scalar:optionalstop
)
optionalstop |
scalar |
[none] |
Boolean to indicate optional/forced program pause |
Emit an M0 gcode (forced pause) if
optionalstop evaluates to false or is not
specified. Otherwise, emit an M1 gcode (optional pause) if
optionalstop evaluates to true.
undef
spindle
(
scalar:speed
)
speed |
scalar |
[no units] |
Spindle speed (see below). |
Enable/disable spindle turning and set the spindle's speed, where
speed should be:
| scalar | Description |
• | <0 | spindle counter clockwise (M4) |
• | 0 | spindle off (M5) |
• | >0 | spindle clockwise (M3) |
The spindle speed is set with an S command to
abs(
speed)
before the spindle is enabled.
undef
spindlespeed
(
scalar:speed
)
speed |
scalar |
[no units] |
Spindle speed. Speed must be larger or equal zero. |
Set the spindle's speed (S) to speed.
undef
toolchange
(
scalar:toolnr
)
undef
toolchange
(
scalar:toolnr,
scalar:setoffs
)
toolnr |
scalar |
[no units] |
Tool number to change to. Toolnr should be integer and must be larger or equal zero. |
setoffs |
scalar |
[boolean] |
Set tool offset. |
Change tool (T) to toolnr.
An M6 code is also emitted to perform the actual tool change.
If setoffs evaluates to true, then a G43 code is
also emitted to set the tool's offset.
SVG functions
undef
svg_closepath
(
)
Emits a close-path SVG command (Z) to the path being
output, such that the current shape becomes closed.
DXF functions
No specific DXF functions yet.