簡単な解決策はmaya2022 以前の2020,2019バージョンを起動して そこでmel2pyを使うことだ。
A simple solution is to launch a maya2020 or maya2019 version prior to maya2022 and use mel2py there.
githubで解決していると思いダウンロードして試したが無理だった
https://github.com/LumaPictures/pymel/blob/master/pymel/tools/mel2py/melparse.py
import pymel_master.tools.mel2py as mel2py
mel_command = 'setDrivenKeyframe "-currentDriver pCube1.translateY pCube2.translateX";setDrivenKeyframe "-currentDriver pCube1.translateY pCube2.translateY";setDrivenKeyframe "-currentDriver pCube1.translateY pCube2.translateZ";'
pythonCode = mel2py.mel2pyStr(mel_command, pymelNamespace='pm')
print(pythonCode)
import pymel_master.tools.mel2py as mel2py
mel_command = '$currentNodes = `ls -sl -l`;'
pythonCode = mel2py.mel2pyStr(mel_command, pymelNamespace='pm')
print(pythonCode)
python3 Error: AttributeError: file C:\Program Files\Autodesk\Maya2023\Python\lib\site-packages\pymel\tools\mel2py\melparse.py line 438: ‘str’ object has no attribute ‘lineno‘
StackOverFlowのように
上記エラーがでて無理だった。
1行ならどうにかなるが、関数などの複数行だとこのlinenoが取得できないようでバグるものしか作れなかった
# cycle through our kwargs and format them
for flag, value in kwargs.items():
print("melparse.py - format_command() - "+" flag= "+str(flag)+" ,value= "+str(value))
if value is None:
value = '1'
# multi-use flag
# mel: ls -type "transform" -type "camera"
# python: ls( type=["transform", "camera"] )
if isinstance(value, list):
#sep = ', '
# if len(value) > t.lexer.format_options['kwargs_newline_threshhold']:
# sep = ',\n\t'
#pargs.append( '%s=[%s]' % ( flag, sep.join(value) ) )
value = assemble(t, 'multiuse_flag', ', ', value, matchFormatting=True)
#pargs.append(Token('%s=[%s]' % (flag, value), None, flag.lineno))
pargs.append(Token('%s=[%s]' % (flag, value), None, 0))#mycode
else:
print("melparse.py - format_command() - flag= "+str(flag))
#pargs.append(Token('%s=%s' % (flag, value), None, flag.lineno))
pargs.append(Token('%s=%s' % (flag, value), None, 0))#mycode
本体の更新に期待する。
コメント