8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Maya]恐怖!Cannot find procedure の怪

Last updated at Posted at 2019-06-29
// 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の状態を保存したもんだから消えたのかな…。なんか、こう…モヤっとするわ。

mayabatchについての説明
https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2016/JPN/Maya/files/GUID-2E5D1D43-DC3D-4CB2-9A35-757598220F22-htm.html

あと、D&DでSaveだけするバッチも置いときます。複数ファイル可です。利用は自己責任でお願いします。

for %%F in (%*) do call :sub %%F

:sub
   Call お使いのMayaバージョンがあるディレクトリ\bin\mayabatch.exe -file %* -command "file -save"
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?