// Error: line 1: Cannot find procedure "CgAbBlastPanelOptChangeCallback". //
// Error: line 1: Cannot find procedure "onModelChange3dc". //
が出てきた場合の対処。
UI乗っ取り系プラグイン滅すべし!!!
##とりあえずググる
https://qiita.com/mono-g/items/457b1c80147daa059eb2
https://forums.autodesk.com/t5/maya-animation-and-rigging/onmodelchange3dc-error/td-p/8124149
の6番め
以下のスクリプトを実行するといいらしい
import pymel.core as pm
# Get all model editors in Maya and reset the editorChanged event
for item in pm.lsUI(editors=True):
if isinstance(item, pm.ui.ModelEditor):
pm.modelEditor(item, edit=True, editorChanged="")
##が、消えない
↑の対処が直らない・・・というか↑のスクリプト使わないほうが良さそう。
https://forums.autodesk.com/t5/maya-animation-and-rigging/onmodelchange3dc-error/m-p/8124149
の8番め
DO NOT USE THAT SCRIPT! The above solution is very dangerous.
まあ、今あるmodelEditorで出来てるUI全部editしちゃうからそりゃそうか・・・
needs_fixing = False
try:
expression_str = cmds.getAttr('uiConfigurationScriptNode.before')
fixed_expression_lines = []
for line in expression_str.split('\n'):
if '-editorChanged "onModelChange3dc"' in line:
needs_fixing = True
continue
fixed_expression_lines.append(line)
fixed_expression = '\n'.join(fixed_expression_lines)
if needs_fixing:
cmds.setAttr('uiConfigurationScriptNode.before', fixed_expression, type='string')
except:
pass
内容的にはuiConfigurationScriptNode
の.beforeアトリビュートを取得して、一行ずつ読んでエラーのプロシージャを見つけたら消すというもの。
Here is a script that will safely remove the onModelChange3dc callback without damaging the default maya UI expression.
と自信満々に書いているけどコレ走らせた後でも出る。
MayaAsciiで保存して該当箇所を検索して削除すると消えるらしい。
##原因
uiConfigurationScriptNode
というノードが原因。
Preferences > Interface > UI Elements > Panel Configurations > When saving >Save panel layouts with file のチェックがオンになっていると作成されるファイル
恐らくプラグイン・ツールによってMayaに現存するmodelEditorで出来たUIをeditされる
↓
uiConfigurationScriptNodeに保存される
↓
このノードが保存されたシーンが外注とかから回ってくる
↓
このノードが保存されているシーンを開いてmodelEditorがeditされる
↓
汚染されたシーン以外のシーンを開いても同様のエラーが発生
↓
そちらのuiConfigurationScriptNodeがさらに上書きされて被害が広がっていく
という状態のようだ。
##二次被害
上記のSave panel layouts with fileのチェックを外して変更を保存したところ、uiConfigurationScriptNodeを消せばエラーは出なくなりました。
が、今度はOutlinerで選択を変更するごとに
Error: line 1: Cannot find procedure "look".
が発生。最高にうざい。最初に問題にしたエラーが可愛く見える。
これは Mayaデータ保存フォルダの、prefs > workspaces > Maya_Classic.json に
outlinerEditor -e
で -selectCommand \"look\"
が書き込まれてたのが原因だと発覚した・・・。
どのタイミングでその変更がかかったのか不明…意味が分からない。
環境によるものかもしれんが、取り合えず自環境ではSave panel layouts with fileのチェックを外すのはダメそうだ。
(同じことを試してくれた人も同じ症状が出た)
##対策
uiConfigurationScriptNodeを消してもすでにmodelEditorがeditされてるので、Save時にonModelChange3dcとか勝手に書き加えられたuiConfigurationScriptNodeが生成されて出続ける。
ので、必要なものをExportSelectionして即座にMayaを落とし再起動のちにExportしたシーンを開くと消えてました。
ma編集するよりこっちの方が楽だと思う。今のチームmb運用だし…。
##ツールを作るときには
UIのフラグ書き換えるなら、警告出すとか使ってるときだけ書き換えるようにするとか、後濁さないで欲しいわ・・・。
ホットキー勝手に設定してカレントにするプラグインもあったけど、それもホットキーにプラグインのプロシージャ読みに行かせてたから、パスが切れたら全く同様のことが起こった。
自分もツール作る側だからいい勉強になったけど、規定のUIいじるのはアブない。
##追記 対策おまけ
そういえばmayabatchを使えばUI出さないから、uiConfigurationScriptNodeをいじるスクリプト走らせてもSave時上書きされないんじゃね!?と思い試したところ、
スクリプト走らせなくてもmayabatchでSaveだけすればuiConfigurationScriptNodeの中身が(ほぼ)クリアされるという事が発覚した…。
(ほぼ)っていうのは、uiConfigurationScriptNode.beforeに書いてある冒頭の「このスクリプトは自動生成されたもんで、いじってバグっても知らないからね」的な事がコメントアウトで書いてある部分以外は消えたという事。
つまりは、UI出さないモードでUIの状態を保存したもんだから消えたのかな…。なんか、こう…モヤっとするわ。
あと、D&DでSaveだけするバッチも置いときます。複数ファイル可です。利用は自己責任でお願いします。
for %%F in (%*) do call :sub %%F
:sub
Call お使いのMayaバージョンがあるディレクトリ\bin\mayabatch.exe -file %* -command "file -save"