Update
This commit is contained in:
89
2023/scripts/animation_tools/dwpicker/languages.py
Normal file
89
2023/scripts/animation_tools/dwpicker/languages.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from copy import deepcopy
|
||||
|
||||
PYTHON = 'python'
|
||||
MEL = 'mel'
|
||||
|
||||
|
||||
PYTHON_TARGETS_VARIABLE = """\
|
||||
import animation_tools.dwpicker as dwpicker
|
||||
__targets__ = [{targets}]
|
||||
if dwpicker.get_shape('{shape_id}'):
|
||||
__shape__ = dwpicker.get_shape('{shape_id}').options
|
||||
else:
|
||||
__shape__ = None
|
||||
{code}
|
||||
"""
|
||||
|
||||
|
||||
MEL_TARGETS_VARIABLE = """\
|
||||
string $targets[] = {{{targets}}};
|
||||
{code}
|
||||
"""
|
||||
|
||||
|
||||
DEFERRED_PYTHON = """\
|
||||
from maya import cmds
|
||||
cmds.evalDeferred(\"\"\"{code}\"\"\", lowestPriority=True)
|
||||
"""
|
||||
|
||||
DEFERRED_MEL = """\
|
||||
evalDeferred "{code}" -lowestPriority;"""
|
||||
|
||||
STACK_UNDO_PYTHON = """\
|
||||
from maya import cmds
|
||||
cmds.undoInfo(openChunk=True)
|
||||
{code}
|
||||
cmds.undoInfo(closeChunk=True)
|
||||
"""
|
||||
|
||||
STACK_UNDO_MEL = """\
|
||||
undoInfo -openChunk;
|
||||
{code}
|
||||
undoInfo -closeChunk;
|
||||
"""
|
||||
|
||||
|
||||
EXECUTION_WARNING = """\
|
||||
Code execution failed for {object}: "{name}"
|
||||
{error}.
|
||||
"""
|
||||
|
||||
|
||||
def execute_code(
|
||||
language, code, shape=None, deferred=False, compact_undo=False):
|
||||
return EXECUTORS[language](code, shape, deferred, compact_undo)
|
||||
|
||||
|
||||
def execute_python(
|
||||
code, shape=None, deferred=False, compact_undo=False):
|
||||
if compact_undo:
|
||||
code = STACK_UNDO_PYTHON.format(code=code)
|
||||
if deferred:
|
||||
code = DEFERRED_PYTHON.format(code=code)
|
||||
targets = (shape.targets() or []) if shape else []
|
||||
targets = ', '.join(('"{}"'.format(target) for target in targets))
|
||||
shape_id = shape.options['id'] if shape else None
|
||||
code = PYTHON_TARGETS_VARIABLE.format(
|
||||
targets=targets, shape_id=shape_id, code=code)
|
||||
exec(code, globals())
|
||||
|
||||
|
||||
def execute_mel(code, shape=None, deferred=False, compact_undo=False):
|
||||
from maya import mel
|
||||
if compact_undo:
|
||||
code = STACK_UNDO_MEL.format(code=code)
|
||||
if deferred:
|
||||
print('Eval deferred not supported for mel command.')
|
||||
# code = DEFERRED_MEL.format(code=code)
|
||||
targets = (shape.targets() or []) if shape else []
|
||||
if targets:
|
||||
targets = ', '.join(
|
||||
'"{}"'.format(target) for target in shape.targets())
|
||||
code = MEL_TARGETS_VARIABLE.format(targets=targets, code=code)
|
||||
mel.eval(code.replace(u'\u2029', '\n'))
|
||||
|
||||
|
||||
EXECUTORS = {
|
||||
PYTHON: execute_python,
|
||||
MEL: execute_mel,
|
||||
}
|
||||
Reference in New Issue
Block a user