この記事はTakumi Akashiro ひとり Advent Calendar 2020の8日目の記事です。
今日も小粒です。小粒といえば納豆ですね。久しぶりに水戸1に旅行に行って小粒納豆を買いたい。
前置き
保存したくない一時ノードを作ったことはありますか?
自分はあったような、なかったような気もします。
もう1年以上程度前に調べたことを出すので、同期の曖昧さはお許しください。
やってみる
このシーンで以下を実行して保存してみます。
from maya import cmds
cmds.toggle("pCubeShape2", doNotWrite=True)
そして開きなおすと……
pCubeShape2が消え、3dViewにあるCubeも一つになりました。
成功ですね!
締め
いやいや、最初はこんなに短くなる予定じゃなかったんですよ!
「OpenMaya使わないといけないんですねー面倒ですねー」みたいなことを言って、使えないニッチな知識を披露する予定だったんですって!本当です!
でも書いてるときにOpenMayaのどのクラスにdonotwrite
をセットするやつあるんだっけ?って悩んで、「Maya donotwrite」で検索したら、toggle
のMELコマンドリファレンスが出るじゃないですか?
cmdsで試したら普通に保存されないノードができるじゃないですか。
変に難しいやりかたでやるより、cmdsで出来る方が大体のTAは喜ぶじゃないですか?
結果一行で済む記事が出来上がったんであって、私は悪く…いや悪いですね。主に頭が。
...と思っていました。
どちらかと言えば、ポリゴン形状を作るノードのpolyCube2の方を消したいんですよね。
ちょっと試しにやってみましょう。
from maya import cmds
cmds.toggle("polyCube2", doNotWrite=True)
消えない……だと…?!
toggle
コマンドのヘルプを読んでみましょう!
toggle コマンドは、オブジェクトが持つさまざまな オブジェクト コンポーネントの表示と非表示を切り替えます。
たとえば、リストにある NURBS カーブやサーフェスに対して、 CV およびエディット ポイントの表示と非表示を 切り替えることができます。
オブジェクトコンポーネント……?
pCubeShapeはオブジェクトですし、形状なのでコンポーネントも持ってますよね。
PolyCubeはオブジェクトコンポーネントに含まれないので操作不可能なのか……
というわけでOpenMayaを使いましょう!
from maya.api import OpenMaya
def set_flag_of_dont_write(nodename):
sel = OpenMaya.MSelectionList()
sel.add(nodename)
if sel.isEmpty():
return
for i in range(sel.length()):
mobj = sel.getDependNode(i)
mfn = OpenMaya.MFnDependencyNode(mobj)
mfn.setDoNotWrite(True)
set_flag_of_dont_write("polyCube2")
無事(?)、polyCube2(と3dView上のCubeが)消えましたね。
本当の締め
今回はpolyCubeを消したせいで、Shapeの中の形状データまで失ってしまいましたが、
確か探ってた時は、ツール用に一時的なノードを作りたかったんだと思います。
それ以外にもノードエディタ使うとできてしまう、MayaNodeEditorSavedTabsInfo
とかをシーンに保存しないためにつかえるんじゃないですかね。
……どうしてあのノードはデフォルトでdoNotWrite
フラグ立ってないんだ…
「パネルとレイアウトを保存」をオフにしても当たり前のように保存されるし……
思えば、おそらく一年前の私も同じことを検証した気がします。
……まあそういう事もあるよね!
-
アンコウが食べたいので大洗でも可。というか冷静になると大洗の方がいいな。アンキモ食べたい! ↩