# Author: Malcolm Kesson (2007)
proc render {lstr script filename} {
global LROOT
if {$filename != ""} {
set out [open "$LROOT/$filename.rib" w]
} else {
set out stdout
}
# 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]
# 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 statements]
array set Statements $stats
set statechars [array names Statements]
# RIB begin______________
puts $out "AttributeBegin"
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 $angle 1 0 0"}
y {puts $out "Rotate $angle 0 1 0"}
z {puts $out "Rotate $angle 0 0 1"}
s {puts $out "Scale $scale $scale $scale"}
R {set translate [expr abs($translate) * -1] }
S {set scale [expr abs($scale) * -1] }
X {puts $out "Translate 1 0 0"}
Y {puts $out "Translate 0 1 0"}
Z {puts $out "Translate 0 0 1"}
+ {set translate [expr abs($translate)] }
- {set translate [expr abs($translate) * -1] }
1 {puts $out "Cone 0.25 1 360"}
4 {puts $out "Curves \"linear\" \[2\]"
puts $out " \"nonperiodic\""
puts $out " \"P\" \[0 0 0 0 1 0\]"
puts $out " \"constantwidth\" \[0.3\]"
puts $out "Translate 0 1 0"
}
\{ { puts $out "AttributeBegin"}
\} { puts $out "AttributeEnd"}
}
}
puts $out "AttributeEnd"
# RIB end________________
if {$filename != ""} {
close $out
}
}