Mayaのコンポーネント選択状態の選択解除

クリーク・アンド・リバー社 COYOTE CG STUDIO テクニカルチームの可哀そうだと思う武将は愛の戦士直江兼続、戦国大好き人間の中林です。

今回はくだらないけど、本質的に使えるmelの裏技です。
フェースや頂点などのコンポーネントを選択した状態での、melスクリプトからの簡単な選択解除です。

blob.jpg

そもそものキッカケは?

Mayaでツールを作っていて良くあることですが、実行した後に結果をすぐに見たいので選択解除をした状態にして欲しいとアーティストから要望を受けます。
オブジェクト選択ならselect -cl;コマンドで簡単に済みます。
しかし、コンポーネント選択では上図の現実のように選択が解除されても青い線のハイライトが残ります。
当然、アーティストの要望としては理想状態で処理が終わって欲しいのが人情です。

真面目につくろうろすると……

何気にこの選択状態ですがselectModeコマンドやhiliteコマンドなど様々な設定が影響しています。一歩処理のフラグを立て間違えるととハイライトが表示されなくなることもあります(経験談)
select -r オブジェクト名でも良いですが
➀選択コンポーネント名を取得する
➁最初のコンポーネント名を「.」で分割してオブジェクト名を取得する
➂オブジェクト名で選択する
➃選択を解除する
手数が多い上にそもそもコンポーネント選択状態であるだけで、コンポーネントを選択してない可能性もツール次第ではあります。

実はカメラ選択するとオブジェクト選択状態になる

手動でコンポーネント選択状態から適当なカメラを選択してもらえれば分かるけど、カメラを選択した瞬間にコンポーネントの青い線のハイライトが消えます。これで自動的にオブジェクト選択状態と同じ状態になってます。
(正確にはカメラではなくtransformノード全般の選択ですが、今は分かりやすくカメラ限定)
最近のMayaはよほど捻くれたデータではない限りデフォルトカメラは名前が固定をされているので、単純だけど以下の2行で理想的な選択解除状態になります。

select -r "|persp";
select -cl;

多分、真面目にやればSelectToggleModeコマンドを使うなどの様々な方法があると思います。
しかし、if文も何も使わないで素人でも簡単に使えて2行で済む方法はそれほど多くはないと思います。
少なくとも僕はこれを超えるコンポーネント選択状態の解除のスクリプトは見たことはなく、今でも多用する裏技です。

Author: 中林 伸和