ON-BLOG

CGのこと、あれこれ書いてます。

【覚書】maya python入門 其の十三

今回はmaya.cmdsを使ってXMLの簡単な例を書いてみたいと思います。

SIではJSを使えば、結構簡単に出力、読み込みができましたが
Pythonでやるのが、未経験だったのでメモに。

今回は、シーンのディスプレイレイヤーを取得し
それをXMLとして出力してみます。
早速コード

# -*- coding:utf-8 -*-
import maya.cmds as cmds
import xml.dom.minidom as xml
import codecs

imp_XML = xml.getDOMImplementation()
doc = imp_XML.createDocument(None, 'SceneLayers', None)
top_element = doc.documentElement
Disp_Layers = cmds.ls(typ ="displayLayer")
for i in Disp_Layers:
    Member = cmds.editDisplayLayerMembers( i, query=True )
    Layer = doc.createElement('Layer')
    Layer_attr = doc.createAttribute("layer_name")
    Layer_value = doc.createTextNode(str(Member))
    Layer.appendChild(Layer_value)
    Layer_attr.value = str(i)
    Layer.setAttributeNode(Layer_attr)
    top_element.appendChild(Layer)
print(doc.toxml('UTF-8'))

# ファイルに保存
f = codecs.open('sample.xml', 'w', 'utf-8')
doc.writexml(writer=f, encoding='UTF-8', newl='\n', addindent='\t')
f.close()

f:id:tommy_on:20151006000640p:plain
上記のコードを実行するとmayaのデフォルトフォルダ
C:\Program Files\Autodesk\Mayaバージョン\bin
XMLが保存されます。
※必要に応じてディレクトリーは変えてください。


そうすると、こんな感じで出力されています。
f:id:tommy_on:20151006000434p:plain


出力はこんな感じ。
細かいコマンドについては、他を参照いただければと思います。
超カンタンです。


では、次は簡単な解析を

# -*- coding:utf-8 -*-
from xml.dom import minidom
# ----- DOM生成 -----
# DOM 実装を取得


doc = minidom.parse('c:\\Program Files\\Autodesk\\Maya2016\\bin\\sample.xml')


elements = doc.getElementsByTagName("Layer")

for i, element in enumerate(elements) :
    print(element.childNodes[0].data )

XMLファイルを取得して、【Layer】以下のタグを取得しているだけ。
ここからMAYAで色んな処理を、噛ますと色々できるかと思います。

私は今回MAYA←→SIでレイヤー構造がうまくいかないので
作成しておりました。
細かい仕様は書かないですが、レイヤー以外にも
マテリアルや、モーションにも使えそうですね。


以上です。