Outlinerでオブジェクトを名前順でソートする

こんにちは!Rhinoです。
早くもネタ切れになりつつあり悩み中です。書き続けるのは楽しいのですが、中々難しいですね。
今日はOutlinerで選択したオブジェクトを名前順でソートする短いプログラムをご紹介したいと思います。
完成間近になってシーンを整理する際に手作業で並び替えるのが大変なので作ってみました。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

selection = cmds.ls( sl=True, fl=True )

sortedObjs = sorted( selection )
for o in sortedObjs:
	cmds.reorder( o, b=True )

解説

Outlinerで順番を変える関数

Outlinerでオブジェックの順番を変えるにはreorderという関数があります。
どのように変えるかはフラグによります。フラグの説明をMayaのコマンドヘルプで見てみますと下記のようになっていました。

back(b)オブジェクトを兄弟オブジェクトのリストの最後に移動します。
front(f)オブジェクトを兄弟オブジェクトのリストの先頭に移動します。
relative(r)オブジェクトを他の兄弟オブジェクトに対して相対的に移動します。

このうちのback(b)を今回使いました。
オブジェクトのリストの最後に移動させるフラグです。

どうしたら順番を変えることができるのか

reorderを使うことは分かりました。
ではこれを使ってどうやって変えたら良いと思いますか?
それにはまずpythonのsorted関数を使って選択したオブジェクトのリストを名前順でソートした新しいリストを作ります。
この新しいリストのオブジェクトをループで1つ1つ取り出していきます。
取り出しオブジェクトの後方に次のオブジェクトをreorder関数を使って移動していきます。

sortedObjs = sorted( selection )
for o in sortedObjs:
	cmds.reorder( o, b=True )

最後に

ソートの順番を変更する、またはreorderのフラグにfを使えば降順で入れ替えることもできます。
ソートは良く使いますので、掘り下げていっても面白いかもしれませんね。
では、また!

コメント

タイトルとURLをコピーしました