# Author: Malcolm Kesson (2007)
proc render { lstr script filename } {
global LROOT
set out [open "$LROOT/$filename.mel" w]
# Get the relevant data from the scriptDB
upvar $script ScriptDB
set scale [getArrayValueOf ScriptDB scale]
set translate [getArrayValueOf ScriptDB translate]
set angle [getArrayValueOf ScriptDB angle]
if {$scale == ""} { set scale 1.0 }
if {$translate == ""} { set translate 1.0 }
if {$angle == ""} { set angle 90.0 }
# Check for missing default values
if {$scale == ""} { set scale 1.0 }
if {$translate == ""} { set translate 1.0 }
if {$angle == ""} { set angle 90.0 }
# Statements assigned to characters in the
# script data file are stored as arrays of arrays
set stats [getArrayValueOf ScriptDB statement]
array set Statements $stats
set statechars [array names Statements]
# MEL begin_________________________________________
puts $out "source \"$LROOT/LMelProcs.mel\";"
puts $out "global string \$stack\[\];"
puts $out "select -all;"
puts $out "delete;"
puts $out "clear(\$stack);"
puts $out "\$root = `group -em -n LSYS`;"
puts $out "\$tnode = `group -em`;"
puts $out "parent -r \$tnode \$root;"
for {set i 0} {$i < [string length $lstr]} {incr i} {
set char [string index $lstr $i]
# Handle the custom statements__________________
for {set j 0} {$j < [llength $statechars] } {incr j} {
set ch [lindex $statechars $j]
if { $ch == $char } {
set item [subst [getArrayValueOf Statements $ch]]
puts $out $item
continue
}
}
switch $char {
> {set angle [expr abs($angle)] }
< {set angle [expr abs($angle) * -1] }
x {puts $out "rotate -r $angle 0 0 \$tnode;"}
y {puts $out "rotate -r 0 $angle 0 \$tnode;"}
z {puts $out "rotate -r 0 0 $angle \$tnode;"}
s {puts $out "scale -r $scale $scale $scale \$tnode;"}
R {set translate [expr abs($translate) * -1] }
S {set scale [expr abs($scale) * -1] }
X {puts $out "move -r $translate 0 0 \$tnode;"}
Y {puts $out "move -r 0 $translate 0 \$tnode;"}
Z {puts $out "move -r 0 0 $translate \$tnode;"}
+ {set translate [expr abs($translate)] }
- {set translate [expr abs($translate) * -1] }
1 {puts $out "\$tnode = addConeTo(\$tnode);"}
4 {puts $out "\$tnode = addCurveTo(\$tnode);"}
\{ { puts $out "push(\$tnode);"}
\} { puts $out "\$tnode = pop();"}
}
}
# Delete "stray" group nodes
puts $out "\$nulls = `ls \"|null*\"`;"
puts $out "select -r \$nulls;"
puts $out "delete;"
close $out
}