Skip to content

Instantly share code, notes, and snippets.

@ryusas
Last active July 28, 2020 07:22
Show Gist options
  • Save ryusas/268ee6f65f1a50d8041e5eec57a4dd8c to your computer and use it in GitHub Desktop.
Save ryusas/268ee6f65f1a50d8041e5eec57a4dd8c to your computer and use it in GitHub Desktop.
A test of mode switching for Maya 2019 cache evaluation.
# coding: utf-8
u"""
Maya 2019 キャッシュのテスト。
キャッシュ機能は Parallel Evaluation の Custom Evaluator の仕組みで実装されており、
それは cacheEvaluator プラグインによって提供されている。
"""
import sys
from collections import Callable
import maya.cmds as cmds
import maya.plugin.evaluator.CacheEvaluatorManager as mgr
BASESTR = basestring if sys.version_info[0] <= 2 else str
#------------------------------------------------------------------------------
def _initModeList():
res = dict([(k[20:], getattr(mgr, k)) for k in dir(mgr) if k.startswith('CACHE_STANDARD_MODE_')])
return res
_CACHE_MODE_DICT = _initModeList()
def showStatus(log=True):
u"""
cache evaluator の状態の情報を得る。
"""
info = cmds.evaluator(n='cache', q=True, i=True)
if not log:
return info
if isinstance(log, Callable):
log(info)
else:
print(info)
def listModes(detail=False):
u"""
モード設定キーのリスト、または詳細設定内容も含む辞書を得る。
"""
if detail:
return dict(_CACHE_MODE_DICT)
return list(_CACHE_MODE_DICT)
def getMode(key):
u"""
モード設定キーから設定内容を得る。
"""
return _CACHE_MODE_DICT.get(key)
def setCurrentMode(mode):
u"""
カレントモードを切り替える。
:param mode: モード設定キーか、設定内容そのもの。
"""
if isinstance(mode, BASESTR):
x = _CACHE_MODE_DICT.get(mode)
if not x:
raise RuntimeError('key does not exist: ' + mode)
mode = x
if True:
mgr.CacheEvaluatorManager().cache_mode = mode
else:
# 同じことをコマンドでやるとこうなる。
cmds.cacheEvaluator(resetRules=True)
for opts in mode:
cmds.cacheEvaluator(**opts)
def currentMode(detail=False):
u"""
カレントモードを得る。
:returns: モード設定キー。未知の設定なら設定内容そのもの。
"""
mode = mgr.CacheEvaluatorManager().cache_mode
if not detail:
for k, v in _CACHE_MODE_DICT.items():
if mode == v:
return k
return mode
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment