### TclQuick Reference I

#### Index

Output

 `puts "hello world"` Output the contents of the quoted string to the terminal.

Setting Variables

 ```set a 12 set b \$a set aussie "goodday"``` a is assigned the value 12. b is assigned the same value as "a". aussie is assigned the string "goodday".

Arithmetic Using the expr Command

 ```set a 12 set b 2 set c [expr {\$a + \$b}] puts "a is \$a, b is \$b, c is \$c" set c [expr {\$a/\$b}] puts "a is \$a, b is \$b, c is \$c" ``` a is assigned the value 12. b is assigned the value 2. Add a and b using the expr command and assign to c. Display the values of a, b and c. Divide a by b using the expr command and assign to c. Again display the values of a, b and c.

[Many thanks to Matthew Bradley for providing me with corrections to this code sample.
Dec 7 2021]

if ifelse and else

 ```if {\$a == 2} { puts "a is 2" } elseif {\$a > 3} { puts "a is larger than 3" } else { puts "a is smaller than 2" }``` Unlike the 'C' language, "if", "elseif" and "else" are commands. The formatting of the script is very important. The curly braces shown in blue must be on the same line as their corresponding "if", "elseif" and "else". Note that "elseif" is one word not two!

Looping - while

 ```set a 5 while {\$a <= 10} { puts "a is \$a" incr a 1 }``` Unlike the 'C' language, "while" is a command not a statement. Therefore, be careful to put the curly braces exactly as shown. The "incr" command increments the variable a by 1.

Looping - for

 ```for {set a 0} {\$a <= 10} {incr a 1} { puts "a is \$a" }``` Unlike the 'C' language, "for" is a command not a statement. Therefore, be careful to put the curly braces exactly as shown. The "for" command takes three inputs contained in the curly braces. Also, note the spaces between the braces.

Looping - foreach

 ```set files [glob "H:/renderman" *.rib] puts "Found these rib files:" foreach i \$files { puts "\$i" }``` files assigned a list returned by the glob command. Display a simple message using the puts command. Step through the list and for each item, display its name.

switch

 ```set x 4 switch \$x { 0 { puts "match on 0" } 1 { puts "match on 1" } 2 { puts "match on 2" } default { puts "no match" } }``` Assign x the value 4. Attempt to match the value of x to the following, 0 1 2 No match, then do this default action.

Setting a List

 ```set L1 [list a b [list 1 2 3 ] c d ] puts "the raw list is:\n\$L1" set L2 { a b { 1 2 3 } c d} puts "the raw list is:\n\$L2" set combined [list \$L1 \$L2] ``` Use the list command to create a list. Print the entire list to the console. Use of the block substitution ie. curly brackets, to create a list. Note that the 'a' in the second list prints with a leading white space. Combining two lists.

Items in a List

 ```foreach item \$L1 { puts \$item } puts [llength \$L1]``` Use the foreach command to step through a list. The variable "item" (its name is not important) will be assigned the value of each item in the list. A variety of list related commands can be used on lists - such as list length shown here.

Procedures

 ```proc tween {k1 k2 frame v1 v2 rate} { if {\$frame < \$k1} { set output \$v1 } elseif {\$frame > \$k2} { set output \$v2 } else { set per double([expr \$frame - \$k1]) set per [expr \$per / (\$k2 - \$k1)] set per [expr pow(\$per, \$rate)] set result [expr (\$v2-\$v1)*\$per+\$v1] } return \$result }``` An example procedure - it calculates inbetween values for animation. Refer to inbetweening The next box shows this proc being tested.

Calling a Proc

 ```for {set f 0} {\$f <= 50} {incr f} { set value [tween 10 40 \$f 1.5 4.5 1] puts "\$f: \$value" }``` The code must be in the same script as the proc shown above.

Arrays - Iteration

 ```# define an array called "color" # consisting of three elements set color(red) 0.5 set color(green) 0.1 set color(blue) 0.3 # confirm the size of the array set size [array size color] puts "Array size is \$size\n" # reference the beginning of the array set start [array startsearch color] # get each element and use # it as an index into the array for {set n 0} {\$n < \$size} {incr n} { set value [array nextelement color \$start] puts "\$value = \$color(\$value)" }```

Splitting (tokenizing) a String

 ```proc splitMayaPath { mayapath } { set items [split \$mayapath |] return [lindex \$items 1] } set dagPath "|pSphere1|pSphereShape1" puts [splitMayaPath \$dagPath]``` This example of string splitting returns the second item in an input string which, in this example, consists of the name of an object in a Maya scene. A Maya object name is derived from Maya scene graph path - hence the vertical bars. output >> pSphereShape1

Extracting an Integer from a String

 ```proc extractInt { str } { regsub -all {[^0-9]} \$str "" out return out } puts [extractInt "nurbsSphereShape8"]``` The TCL command regsub (regular expression substitution) is setup to copy ALL digits from an input string to an output string. Notice the input consists of a single item. Try this code sample using this input. `"|nurbsSphere5|nurbsSphereShape8"` If you wish to extract either the first or the last number you will have to modify this sample code. That is left as an exercise. output >> 8

Using eval

 ```set trig1 "sin(1.5) * cos(2) + 1.5" set trig2 "sin(1) * cos(2.3)" set op + puts [eval expr \$trig1 \$op \$trig2]``` This is an example of using the eval procedure to evaluate some (arbitary) maths operations.