EnSight allows for Python to be directly used in command language scripts. When the command language interpreter sees a line that begins with the string 'ensight.', it will pass the line (and only that single line) to the Python interpreter for execution. This means that self-contained Python one line commands can often be directly embedded in command language. For example, the line:
ensight.objs.core.STEREO_SEPARATION=8.500
is legal in Python (.py) or in command language (.enc). One caveat, if a command language file containing a line like this is executed from within a .py file, the Python interpreter will be re-entrant and fail. In practice, this is not generally a problem.
This does mean that it is difficult to use any Python code with a left hand side expression from command language. A special module was added to EnSight: 'enscl'. This module begins as an empty module. However, if the command language interpreter sees a line beginning with 'enscl.' it will also pass that line to the Python interpreter as well. This means that an expression like:
enscl.FOO = ensight.objs.core.STEREO_SEPARATION + 2.0
is legal and will set the module member 'FOO' to the value of the expression. This can be exploited in various ways:
enscl.tmp = []
enscl.tmp.append( ensight.objs.core.PARTS.find( 1, ensight.objs.enums.PARTNUMBER )
enscl.tmp.append( ensight.objs.core.PARTS.find( 2, ensight.objs.enums.PARTNUMBER )
enscl.tmp.append( ensight.objs.core.PARTS.find( 3, ensight.objs.enums.PARTNUMBER )
ensight.objs.core.selection().addchild( enscl.tmp, replace=1)
is legal in both Python and command language and will set the current part selection to parts with part numbers 1, 2 and 3. Again, the Python must be representable as a single line of code for this to work and each line must begin with 'ensight.' or 'enscl.'. By convention, programmers are suggested to use 'enscl.tmp' for storage of temporary values. It is assumed that reuse of that member will not cause any problems for other portions of command language.
Finally, command language has been extended to allow for the expansion of objects in the 'enscl' module as macros. So, the following command language snippet is legal:
enscl.tmp = -1.660036e+001
view_transf: rotate 0.000000e+000 0.000000e+000 $enscl.tmp
The core knows how to properly expand float, int and string values. All other values are converted using 'str()' internally.