前回、DazStudioのマテリアル・プリセットのdufファイルの中身を覗いてみたので、今回は有効に活用していきたいと思うます(*´∀`*)
と、いっても単純にリストデータ化するだけなら
前回、分析したとおりマテリアルの項目名は「url」実データは「keys」というキー・バリュー形式で格納されているので
とやるとn番目のURLと実データを引っ張り出せます。
ここまでくればPythonでは便利なループ制御があるので
変数urlに入ってきた文字列を切り分けて、マテリアル名(シェーディング・グループ名といったほうが正確かもしれない)とプロパティ名にしていきたいと思います。
こんな感じの関数をつくります。
ループ内の処理に
と、いっても単純にリストデータ化するだけなら
import jsonTwitterでも書きましたが、これで配列変数listに全マテリアル情報が格納されます。
f = open('Material_test001.duf', 'r')
jsonData = json.load(f)
list = jsonData.values()[1]["animations"]
f.close()
前回、分析したとおりマテリアルの項目名は「url」実データは「keys」というキー・バリュー形式で格納されているので
url = list[n番目]["url"]
data = list[n番目]["keys"][0]
とやるとn番目のURLと実データを引っ張り出せます。
ここまでくればPythonでは便利なループ制御があるので
for item in xrange(list) :こんな感じになるのかなあ。
url = item["url"]
data = item["keys"][0]
#このあとに何か必要な処理を加える
変数urlに入ってきた文字列を切り分けて、マテリアル名(シェーディング・グループ名といったほうが正確かもしれない)とプロパティ名にしていきたいと思います。
こんな感じの関数をつくります。
import urllib
import urlparse
def dazURL_split(url0):
url_data = urlparse.urlparse(url0)[5]
url1 = url_data.replace(":","")
url2 = urlparse.urlparse(url1)
url3=["",""]
delStr = "extra/studio_material_channels/channels/"
url3[0] = url2[2].replace("materials/","")
url3[1] = url2[4].replace(delStr,"")
return url3
この関数は、まぁURLをパースする関数をつかって必要な部分だけ戻り値に使う配列に格納してるだけです。Python初心者なので、他にもっと高速でシンプルな記述があるかもです(;´Д`)
気になるのはURLの文字列が"name://@selection#materials/……"みたいな感じで始まってる感じなので、エクスポートの仕方によって「@selection」あたりが変わったりしそうです。そのへんもあってURLパース関数を使ってみたんですけれども。
for item in xrange(list) :さっきのループのところにこんな感じで関数呼び出しを組み込みます(太字部分)
url = dazURL_split(item["url"])
data = item["keys"][0]
#このあとに何か必要な処理を加える
ループ内の処理に
print '-->', url[0],url[1],'key=',item["keys"][0]
でも加えるとコンソールに、ずらずらーーーっとマテリアル情報が表示されるんじゃないかと思います(*´∀`*)
とりあえず、今回はこのへんでー。次回は実際のマテリアルに接続していく部分をやっていきたいと思ってます。
…………Mayaじゃなくても動くタダのPythonコードで終わってしまった(*`ロ´ノ)ノ
コメント
コメントを投稿