Source code for tecplot.macro

import logging
import re
from textwrap import dedent

from .tecutil import _tecutil, lock
from .exception import TecplotLogicError, TecplotMacroError

log = logging.getLogger(__name__)


@lock()
[docs]def execute_command(cmd): """Runs a series of tecplot macro commands. Parameters: cmd (`string <str>`): The macro commands to be run. Raises: `TecplotMacroError`: Message will specify the command that failed. This command splits the input into individual commands and runs them one at a time. See the |Tecplot Macro Scripting Guide| for details about |Tecplot 360 EX|'s macro language. .. warning:: Currently, only commands that do not require raw data, by use of the ``RAWDATA`` macro directive, are accepted. See the |Tecplot Macro Scripting Guide| for more information about raw data. The following command will perform the same operations as the `Hello, World! example <hello_world>`:: >>> tecplot.macro.execute_command(r''' ... $!ATTACHTEXT ... ANCHORPOS { X = 35 Y = 50 } ... TEXTSHAPE { HEIGHT = 35 } ... TEXT = 'Hello, World!' ... $!EXPORTSETUP EXPORTFNAME = 'hello_world.png' ... $!EXPORT ... EXPORTREGION = CURRENTFRAME ... ''') """ ptrn = re.compile(r'(\$!.*?)(?=\$!)|(\$!.*)', re.MULTILINE | re.DOTALL) for match in ptrn.finditer(cmd): c = (match.group(1) or match.group(2)).strip() if __debug__: log.debug('executing command:\n' + c) try: if not _tecutil.MacroExecuteCommand(c): raise TecplotMacroError(c) except TecplotLogicError as e: raise TecplotMacroError()
[docs]def execute_extended_command(procid, cmd): """Runs a tecplot macro command defined in an addon. Parameters: procid (`string <str>`): Registered name of the addon. cmd (`string <str>`): The command to run. Raises: `TecplotMacroError` In general, the command string is formatted prior to being fed into the |Tecplot Engine| so liberal use of whitespace, including new-lines, are acceptable. Example:: >>> tecplot.macro.execute_extended_command( ... 'Multi Frame Manager', ... 'TILEFRAMESSQUARE') """ cmd = dedent(''' $!EXTENDEDCOMMAND COMMANDPROCESSORID = '{procid}' COMMAND = '{cmd}' '''.format(procid=procid, cmd=' '.join(cmd. split()).replace(r"'", r"\'"))) execute_command(cmd)
@lock()
[docs]def execute_file(filename): """Run a macro file. Parameters: filename (`string <str>`): The file to be run. Raises: `TecplotMacroError` Example:: >>> tecplot.macro.execute_file('/path/to/macro_file.mcr') """ try: if not _tecutil.MacroRunFile(filename): raise TecplotMacroError(filename) except TecplotLogicError as e: raise TecplotMacroError(str(e))