A brief synopsis of Tcl syntax |
The user of Tcl enters commands after the prompt sign % on the console. The result of each command is displayed on the console window. The format of commands is:
funcname arg1 ... argnIn other words a command is separated from its arguments by spaces, and the arguments are separated from each other by spaces. The end of the argument list is signaled by the end of the line. To continue a command onto a new line, use a backslash as the last character of the line.
Here is an example of a Tcl/Tk command:
set a 4
This command creates a variable a
and sets it to
4. This could be either the integer 4
or the string 4.
In Tcl, the user does not declare the types of variables, and
there is no type system visible to the user.
Internally, an object may have a certain type. The type
is always convertible to and from a printable string.
The name of the variable (in this case "a") in Tcl can be fairly arbitrary strings, but you should probably stick to letters, digits, and underscores.
If an argument itself has a space character in it, then you have to enclose the argument in quotation marks or curly braces:
set a "p 4"
or
set a {p 4}
These commands are completely equivalent. In both cases, the result
is that a
is set to either a string with three characters
or a list with two entries (p and 4). It is indistinguishable to the
console user whether a
is a 3-character string or a
2-entry list, since Tcl internally converts back and forth as needed.
Note that, unlike other languages,
quotation marks do not differentiate string-literals
from non-literals.
The two commands set b a
and set b "a"
have
identical meaning in Tcl/Tk.
To access the value of a variable, you must precede the name with a dollar-sign. Thus, after the commands
set a 4
set b $a
both a and b are assigned the value 4.
The set command has the property
that in addition to setting the variable to the value, it also returns
its value, converted to a string, and prints it on your console.
In QMG, variables are used to stand for meshes and breps. It is
often not desirable to convert them to string representation
because the string representation can be huge if the mesh or brep
is large. For this reason,
QMG defines a
variant of the "set" command
called gmset
which suppresses the conversion of the variable to a string
and its subsequent display on your console.
Another example of a command is the expr
command that
causes a string to be evaluated as an arithmetic expression, and the
value of that expression is returned. For example if you typed
set a 4
expr "$a + 19"
then the second line would return 23.
A second syntactic feature of Tcl/Tk is square-brackets. Square brackets invoke a function. Thus,
set a 4
set b [expr $a+19]
will set b to 23.
A final major syntactic feature is curly-braces. Curly braces
have several properties: like quotes, they suppress spaces as
separators. Unlike quotes, they can be nested.
In addition, unlike quotes, they also prevent
square brackets from being evaluated and dollar-sign substitution.
You need curly braces to denote matrices and vectors to QMG.
Here is an example.
Suppose you want to set t
to be a regular triangle,
and t1 to be a skewed version of that triangle with the matrix
[1,1,0;0,1,0] applied to it (this transformation applies a skew
but no translation). The command in QMG
to define a regular polygon is
gmpolygon
and to
apply a transformation
gmapply
. Thus,
you would type:
gmset t [gmpolygon 3]
gmset t1 [gmapply {{1 1 0} {0 1 0}} $t]
Unforunately, the following will not work:
gmset t [gmpolygon 3]
set skewamount 1
gmset t1 [gmapply {{1 $skewamount 0} {0 1 0}} $t]
The reason this fails is that (as mentioned above) curly braces
prevent dollar-sign substitution, so this
statement would cause the string literal $skewamount to be passed
to the gmapply routine. This will result in an error, because
gmapply will be unable to convert its argument
to a numbers. How do
you get around this problem? You need to use the list
instruction in Tcl:
gmset t [gmpolygon 3]
set skewamount 1
gmset t1 [gmapply [list [list 1 $skewamount 0] [list 0 1 0]] $t]
At this point you probably should get
a book to learn more! There is also information on the web.
Tcl include procedure and looping constructs to build
arbitrarily complex programs. In addition, Tk makes it easy to
attach a graphical user interface to Tcl scripts.
QMG uses Tk for several features: the
gmviz
function
will plot a 2D brep or mesh in a window, and the
mesh generator optionally displays
a window indicating its progress.
This documentation is written by Stephen A. Vavasis and is copyright ©1999 by Cornell University. Permission to reproduce this documentation is granted provided this notice remains attached. There is no warranty of any kind on this software or its documentation. See the accompanying file 'copyright' for a full statement of the copyright.
Stephen A. Vavasis, Computer Science Department, Cornell University, Ithaca, NY 14853, vavasis@cs.cornell.edu