スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

blender python script tips

基本

・指定オブジェクトのメンバー一覧を出力
def pdirl(obj):
    for s in dir(obj):
        print(s);


・指定オブジェクトのメンバーと値を出力
def pdirlp(obj):
    pdirl(obj)
    print(obj)


・指定オブジェクトの型名を表示
def ptype(obj):
    print(type(obj))


・現在のblendファイルのフルパスを取得
import os
def getCurrentPath():
    return os.getcwd()

カレントディレクトリを取得するAPIのようですが、blender上で実行すると、現在のblendファイルのパスがかえってくるようです。




Blender オブジェクト制御関係

・指定した名前のメッシュオブジェクトを取得
def findObject(name):
    for obj in bpy.data.objects:
        if obj.type!="MESH":
            continue
        if obj.name != name:
            continue;
        return obj
    return None


・指定オブジェクトのメッシュを取得
def getMesh(obj):
    return obj.data


・指定オブジェクトのモディファイア適用後のメッシュを取得
def getModifiedMesh(obj):
    apply_modifiers = True
    settings = 'PREVIEW'
    om = obj.to_mesh(bpy.context.scene, apply_modifiers, settings)
    return om


・メッシュオブジェクトのローカル頂点座標値を取得
def getVertPosL(obj, vid):
    m = obj.data
    v = m.vertices[vid]
    return v.co


・メッシュオブジェクトのワールド頂点座標値を取得
def getVertPosW(obj, vid):
    m = obj.data
    t = obj.matrix_world
    v = m.vertices[vid]
    return t * v.co


・オブジェクトの原点のローカル座標値を取得
def getObjPosL(obj):
    return obj.location

オブジェクトのローカル座標値というのは、そのオブジェクトが所属する親ノードから見た座標値が入っています。
ノードの階層をあまり使っていない場合はワールド座標値と一致します。

・オブジェクトの原点のワールド座標値を取得
def getObjPosW(obj):
    t = obj.matrix_world
    origin = Vector([0,0,0])
    return t * origin





入出力

・リストをテキストファイルに保存
def saveList(filename, list):
    out = open(filename, 'w')
    for s in list:
        out.write(s + '\n')
    out.close();

相対パスを指定すると、現在のblendファイルの所属フォルダからのパスになります。

C++を良く使う人は勘違いしやすいかもしれませんが、ファイルストリームのスコープを出ても、デストラクタでクローズしてくれませんので自分でclose()を呼ぶ必要があります。

また、このコードでは処理の途中でエラーが起きた場合には、ファイルがロックされたままの状態になってしまいますがその対策はしていません。

・テキストファイルをリストとして読み込む
def loadToList(filename):
    f = open(filename, 'r')
    l = []
    for s in f:
        l.append(s.replace('\n',''))
    f.close()
    return l

blenderではなくpythonの話ですが、ファイルを1行ずつ読み込むには普通にforeachに入れてやれば良いのですが、そのときに各行の最後に改行コードまで付いてきてしまいます。

他の言語と比べると珍しい仕様かと思いますが、ここでは改行コードを空文字に変換して除去しています。




その他


・シーン中の全テキストデータをファイルに出力
import bpy

def saveText(t):
    file = open(t.name, 'w')
    for l in t.lines:
        file.write(l.body + '\n')
    file.close()

def exportAllTexts():
    for t in bpy.data.texts:
        saveText(t)

これを実行すると、現在のblendファイルと同じフォルダにテキストファイルとしてエクスポートされます。

スポンサーサイト

コメントの投稿

非公開コメント

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。